从letsencrypt申请https证书踩坑记

今天成功用let's encrypt 上搞定了https证书,整个过程参考这篇文章 https://www.cnblogs.com/teamblog/p/6219204.html
结合本人在制作ssl证书的过程中踩的一些坑说一些注意点
整个流程如下
1.在服务器上运行一个程序获取let's encrypt颁发的证书
2.配置nginx服务器使用生成的证书

正文
1.在服务器运行一个程序获取let's encrypt颁发的证书
  在服务器上运行的程序可以从下面的链接中获取  https://letsencrypt.org/docs/client-options/
 官方推荐使用certbot,但是我的服务器是windows,所以我使用letencrypt-win-simple来生成证书,需要注意的是需要安装.net 4.x才能使用这个程序
    https://github.com/Lone-Coder/letsencrypt-win-simple/releases/download/v1.9.8.0-beta8/letsencrypt-win-simple.v1.9.8.0-beta8.1.zip
  附上.net 4.7.1的下载链接  https://download.microsoft.com/download/8/E/2/8E2BDDE7-F06E-44CC-A145-56C6B9BBE5DD/NDP471-KB4033344-Web.exe
 下载好上面的程序后把程序复制到web服务器的静态文件目录下,因为letencrypt会主动发请求获取
  注意点
a. letencrypt放到外网服务器的nginx的html目录下,在目录执行letencrypt,这样会把从letencrypt.com生成的验证文件放到本目录下,避免了复制文件的麻烦
b. nginx必须要监听80端口 ,不能监听其它端口,因为letencrypt.com只会访问http://[domainname]/.well-known/[cert_file] 来验证域名所有权
c. 验证过程中输入的邮箱不会发邮件确认所有权
2. 配置nginx使用证书 
   配置的过程 参考这篇文章 https://www.cnblogs.com/teamblog/p/6219204.html
服务器使用nginx反向代理 nodejs 服务,其中nginx是https,而nodejs服务在内网非https,这就涉及到了 https反向代理http的问题, 根据经验使用下面的配置
    upstream remoteservername{
        server [remoteserverip]:8080;
    }
    server {
        listen       443 ssl;
        server_name  [realservername];
        ssl_certificate      path/to/cert .pem;
        ssl_certificate_key  path/to/key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass   http://remoteservername;
        }
    }
上面的配置会导致502错误,解决方案是
    upstream remoteservername{
        server [remoteserverip]:8080;
    }
    server {
        listen       443 ssl;
        server_name  [realservername];
        ssl_certificate      path/to/cert .pem;
        ssl_certificate_key  path/to/key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass   http:// remoteservername;
              proxy_read_timeout 1800;
            proxy_connect_timeout 1800;
        }
    }
加上proxy_read_timeout 1800;
proxy_connect_timeout 1800;

你可能感兴趣的:(从letsencrypt申请https证书踩坑记)