Nginx部署ssl证书开启https简要教程
ssl证书分收费的,和免费的,当然这里会给普通用户介绍免费就可以用的。
关于什么是SSL证书,什么是https的基础问题,这里不作赘述,需要补课的同学可以自行搜索学习。本篇直接给出简便快捷实现目标的工具,那就是今天的主角,acme.sh。它完成了帮你自动申请Let's Encrypt证书的全部过程,所以这里你又可以忽略它到底怎么申请到,并使用的整个过程,只需要知道怎么用它就好了。
详细官方使用说明见
github:Neilpang/acme.sh/wiki/How-to-issue-a-cert
其它也有中文文档可参考
我这里示例过程,使用的dnspod部署dns的域名,所以申请了dnspod接口,可以让acme.sh直接自己验证域名有效性,完成自动申请证书的过程。
DNSPOD API在其后台可以设置,文中没办法帖外链地址,请自行查找。
申请到API的ID和TOKEN之后
# export DP_Id="ID123456"
# export DP_Key="token串"
# acme.sh --issue --dns dns_dp -d example.com
example.com是示例域名,请替换成你自己的。运行完上面的命令之后就会告诉你,证书文件存放在/root/.acme.sh/example.com/目录下了。
生成4096位的DH-Key(证书密钥交换密钥)
# screen -S DH
# openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 4096
在Nginx的Server段加入ssl相关配置
ssl_certificate /usr/local/nginx/conf/ssl/example.com.cer;
ssl_certificate_key /usr/local/nginx/conf/ssl/example.com.key;
#OCSP Stapling的证书位置
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
#DH-Key交换密钥文件位置
#SSL优化配置
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
#只允许TLS协议
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
#加密套件,这里用了CloudFlare's Internet facing SSL cipher configuration
ssl_prefer_server_ciphers on;
#由服务器协商最佳的加密算法
ssl_session_cache builtin:1000 shared:SSL:10m;
#Session Cache,将Session缓存到服务器,这可能会占用更多的服务器资源
ssl_session_tickets on;
#开启浏览器的Session Ticket缓存
ssl_session_timeout 10m;
#SSL session过期时间
证书安装并重启nginx
# acme.sh --installcert -d example.com --key-file /usr/local/nginx/conf/ssl/example.com.key --fullchain-file /usr/local/nginx/conf/ssl/example.com.cer --reloadcmd "service nginx reload"
配置acme.sh自动运行,因为免费证书的有效期是90天,这样就不用想着自己再去生成新证书了。
# crontab -e
42 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
最后特别注意,经过实践发现,新配置的域名和相关证书,第一次需要重启nginx,配置才会生效,配置过https的域名,以后nginx reload才有效。这里是个坑,需要注意一下。
OK,就到这里吧,你在使用过程中遇到什么问题,可以在下面回复交流。