给Nginx服务器配置Let's encrypt的SSL证书
墨初 服务器 8653阅读
现在已经到了遍地都是HTTPS网站的年代,浏览器的一些功能和接口也限制了HTTPS才能使用,如果你的网站还没有HTTPS,是时候看下这篇文章,动手配置一个了。
本篇博文教你如何在CentOS 7上,为使用 Nginx 的网站配置HTTPS。
配置HTTPS前,需要有对应的证书。恰好,Let's encrypt提供了免费的SSL/TLS证书
安装 Certbot 获取证书
下面获取证书的命令中,--email 表示域名所有者的邮箱,多个域名用 -d 连接。
这里不多做介绍,可前往 https://certbot.eff.org/docs/ 查看对应文档信息(英文不认识的,可借助翻译工具)。
Certbot 会通过 80 端口检查域名的解析 IP 是否和请求的服务器 IP 一致,获取证书前,请确认你的域名解析正常。
# Certbot 在 EPEL 源里,需要先安装 EPEL。 yum install epel-release # 安装 Certbot yum 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
为 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 4096 ssl_dhparam /etc/nginx/ssl/dhparam.pem; # 修改这里,加密或解密 session_ticket 密钥文件路径,建议定期更改 # 生成方法: openssl rand 48 > session_ticket.key ssl_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.8 resolver 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 就行
文章当这里就结束了,如果你还有其它的问题,可以在下方留言哦!
标签:nginx