我昨天在《如何申请免费好用的HTTPS证书Let's Encrypt》中详细地介绍了申请免费的Let's Encrypt证书步骤,如果大家按照上面的文章介绍一步一步地操作我们可以在/data/web/ssl/
文件夹下看到如下的文件列表:
[iteblog@iteblog.com ssl] $ ll total 28 -rw-r--r-- 1 iteblog iteblog 3243 Aug 5 09:21 account.key -rw-r--r-- 1 iteblog iteblog 9159 Aug 5 09:33 acme_tiny.py -rw-r--r-- 1 iteblog iteblog 1635 Aug 5 09:22 domain.csr -rw-r--r-- 1 iteblog iteblog 3243 Aug 5 09:21 domain.key -rw-r--r-- 1 iteblog iteblog 2163 Aug 5 09:34 signed.crt -rw-r--r-- 1 iteblog iteblog 3834 Aug 5 10:23 chained.pem -rw-r--r-- 1 iteblog iteblog 1647 Aug 5 10:23 intermediate.pem
这里我们再把根证书和中间证书合在一起:
iteblog$ wget -O - https://letsencrypt.org/certs/isrgrootx1.pem > root.pem iteblog$ cat intermediate.pem root.pem > full_chained.pem
现在我们已经把文件都差不多准备好了,现在可以在nginx里面启用HTTPS了。你可以直接在你之前网站的default.conf
配置文件里面配置。
注意:为了不影响你现在正常运行的网站,在配置HTTPS的时候最好将你现有的配置文件全部备份起来,这样在你启用HTTPS过程中出问题之后也能够快速恢复。
在你现在网站nginx配置文件里面加入以下配置:
listen 80; listen 443 ssl http2 reuseport; server_name *.iteblog.com iteblog.com; server_tokens off; ssl_certificate /data/web/ssl/chained.pem; ssl_certificate_key /data/web/ssl/domain.key; ssl_trusted_certificate /data/web/ssl/full_chained.pem;
剩下的配置保持不变即可,保存配置文件,然后重新加载nginx:
iteblog$ /usr/sbin/nginx -s reload 或者 iteblog$ service nginx restart
然后到浏览器打开你的网站,现在是不是有个绿色的锁啊(Chrome浏览器里面)。如下:
在Chrome浏览器里面你可能看到你网站是
https
开头的,但是没看到绿色的锁标记,这是因为你网站里面有请求http://xxx
的资源,你需要把所有http://xxx
的资源全部切换成https://xxx
的资源,这样绿色的锁才会出现。上面的配置虽然能在浏览器里面看到绿色的锁标记,但是你的网站依然需要优化Https安全性。各个服务器的配置可以参考https://cipherli.st/这个网站。步骤如下:
1、生成dhparam.pem文件:
iteblog$ openssl dhparam -out dhparam.pem 2048
这里使用的是2048bit加密,你可以根据你服务器配置情况选择4096bit。
2、生成HTTP Public Key Pinning,可以参考https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning。
iteblog$ openssl rsa -in domain.csr -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64 writing RSA key 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= iteblog$ openssl x509 -in full_chained.pem -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 writing RSA key YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=
下面是整个网站对HTTPS的配置:
listen 80; listen 443 ssl http2 reuseport; server_name *.iteblog.com iteblog.com; server_tokens off; ssl_certificate /data/web/ssl/chained.pem; ssl_certificate_key /data/web/ssl/domain.key; ssl_trusted_certificate /data/web/ssl/full_chained.pem; #add_header Front-End-Https on; ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /data/web/ssl/dhparam.pem; fastcgi_hide_header X-Powered-By; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; add_header Public-Key-Pins 'pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg="; pin-sha256="47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; max-age=2592000; includeSubDomains'; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header Cache-Control no-cache; ssl_session_cache shared:SSL:10m; ssl_session_timeout 60m; ssl_session_tickets on; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.4.4 8.8.8.8 valid=300s; resolver_timeout 10s;
然后你再重启nginx服务器,并且到https://www.ssllabs.com/ssltest/测试一下现在的安全级别,我的网站目前的安全级别如下:
本博客文章除特别声明,全部都是原创!原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【在Nginx中使用Let's Encrypt免费证书配置HTTPS】(https://www.iteblog.com/archives/1735.html)