- N +

使用 Nginx + Let's encrypt 配置 A+ 级 HTTPS

文章目录 [+]

1521698212.jpg

前言

现在已经到了遍地都是 HTTPS 网站的年代,浏览器的一些功能和接口也限制了 HTTPS 才能使用,如果你的网站还没有 HTTPS,是时候看下这篇文章,动手配置一个了。

本文讲述如何在 CentOS 7 上,为使用 Nginx 的网站配置 HTTPS。

操作

配置 HTTPS 前,需要有对应的证书。恰好,Let's encrypt 提供了免费的 SSL/TLS 证书。

1. 安装 Certbot 获取证书

下面获取证书的命令中,--email 表示域名所有者的邮箱,多个域名用 -d 连接。

这里不多做介绍,可前往 https://certbot.eff.org/docs/ 查看对应文档信息。

Certbot 会通过 80 端口检查域名的解析 IP 是否和请求的服务器 IP 一致,获取证书前,请确认你的域名解析正常。

# Certbot 在 EPEL 源里,需要先安装 EPEL。yum install epel-release# 安装 Certbotyum install certbot-nginx# 查看 80 端口是否被占用lsof -i:80# 如果是 Nginx 占用,停止 Nginx,释放 80 端口nginx -s stop# 获取证书certbot certonly --standalone --email admin@example.com -d example.com -d www.example.com# 更新证书certbot renew

2. 为 Nginx 配置 A+ 级 HTTPS

打开需要配置 HTTPS 的站点配置文件,将以下代码粘贴在 server 里,并根据注释修改其对应的内容。

listen 443 ssl;# 开启 SSL 功能ssl on;# 修改这里,SSL 证书文件路径,由证书签发机构提供ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;# 修改这里,SSL 密钥文件路径,由证书签发机构提供ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;# 修改这里,CA 根证书文件路径,由证书签发机构提供ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;# 修改这里,Diffie-Hellman 密钥文件路径,建议定期更改# 生成方法: openssl dhparam -out dhparam.pem 4096ssl_dhparam /etc/nginx/ssl/dhparam.pem;# 修改这里,加密或解密 session_ticket 密钥文件路径,建议定期更改# 生成方法: openssl rand 48 > session_ticket.keyssl_session_ticket_key /etc/nginx/ssl/session_ticket.key;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";ssl_prefer_server_ciphers on;ssl_session_timeout 1d;ssl_session_cache shared:SSL:50m;ssl_session_tickets on;ssl_buffer_size 1400;ssl_stapling on;ssl_stapling_verify on;# 修改这里,国内填 223.5.5.5 223.6.6.6,国外填 8.8.4.4 8.8.8.8resolver 8.8.4.4 8.8.8.8 valid=300s;resolver_timeout 5s;add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";add_header X-Content-Type-Options "nosniff";add_header X-Frame-Options "DENY";add_header X-XSS-Protection "1; mode=block";

如果你要使用 HTTP2,就需要更新 Nginx 到 1.9+,然后在 listen 后面加上 http2,如下

listen 443 ssl http2;

如果你要 SSL 支持 TLSv1.3,需要使用 OpenSSL draft-18+ 的分支,然后使用下面的配置:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;ssl_ciphers "TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";

配置数据改好后,确认无误,重启下 Nginx 就行,到 https://www.ssllabs.com/ssltest/index.html 测下分数吧。

其他写法可以去这里看下:https://mozilla.github.io/server-side-tls/ssl-config-generator/

参考


作者:扫地僧
本站所有数据来至于收藏转载,如侵犯到你的版权请联系我们
返回列表
上一篇:
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (已有2条评论,共1291人参与)参与讨论
    网友昵称:亚克力浴缸
    亚克力浴缸 游客2018-04-09沙发 回复
    http和https到底区别在哪里
    网友昵称:爱免费吧
    爱免费吧 游客2018-04-17椅子 回复
    文章不错,写的很好!