欢迎关注大数据技术架构与案例微信公众号:过往记忆大数据
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
过往记忆大数据

在Nginx中使用Let's Encrypt免费证书配置HTTPS

  我昨天在《如何申请免费好用的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浏览器里面)。如下:


如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
  在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/测试一下现在的安全级别,我的网站目前的安全级别如下:


如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
本博客文章除特别声明,全部都是原创!
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【在Nginx中使用Let's Encrypt免费证书配置HTTPS】(https://www.iteblog.com/archives/1735.html)
喜欢 (2)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!