今天成功用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;