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

本篇博文教你如何在CentOS 7上,为使用 Nginx 的网站配置HTTPS。

Let's encrypt教程,Let's encrypt免费证书,Let's encrypt获取证书,centos配置SSL,网站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 里,并根据注释修改其对应的内容。

Let's encrypt教程,Let's encrypt免费证书,Let's encrypt获取证书,centos配置SSL,网站HTTPS教程

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 就行

文章当这里就结束了,如果你还有其它的问题,可以在下方留言哦!