本文介绍如何在 NGINX安装SSL证书,包括如何合并证书链,使用高强度的DHE参数 ,配置使用安全的加密套件和安全TLS协议,最后让NGINX 上的网站实现HTTPS访问
1.安装前准备:合并证书
在这里我们把中级证书和域名证书合并成一个证书文件,ca.crt 是中级证书,server.crt 是服务器证书,我们通过下面命令把两个证书合并
cat server.crt ca.crt >> server-bundle.crt
也可以文本编辑器 分别打开 server.crt 和 ca.crt ,
复制这两个文件里面的全部代码到新建的件 server-bundle.crt
注意位置顺序, server.crt的代码放在 ca.crt的代码上面。
2.安装SSL证书
我们把私钥 server.key 和 合并后的证书文件放在目录 /etc/nginx/ssl/ ,或者其他nginx能够读取的目录下,然后编辑 nginx.conf 文件 ,你可以从原来网站的配置代码中复制一份,然后参考下面做相应的修改。
使用更强的DHE参数 ,这里我们可以直接下载 mozilla 的 ssl_dhparam 文件, 下载并保存到指定的目录 ,可以通过下面命令 完成
curl https://ssl-config.mozilla.org/ffdhe2048.txt > /etc/nginx/ssl/dhparam
我们把dhe文件保存在 /etc/nginx/ssl/dhparam
下面我们建立两个nginx 虚拟主机, 第一个用于监听域名的 80端口, 就是 http ,并将所有访问301 重定向到 443端口, 就是 https ,具体代码如下
# 重定向 http 到 https
server {
listen 80 default_server;
listen [::]:80 default_server;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/nginx/ssl/server-bundle.crt; #证书文件路径
ssl_certificate_key /etc/nginx/ssl/server.key; #私钥文件路径
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_dhparam /etc/nginx/ssl/dhparam;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
#### 下面这部分不是必须的,可以选择是否使用 #####
# HSTS:作用是 让浏览器强制跳转到 https , 在指定的时间段内,浏览器在下次访问会直接访问 https (需要用到nginx 模块 :ngx_http_headers_module ) (63072000秒)
add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling ,有些浏览器会访问CA网站验证证书的有效性,使用 OCSP stapling 可以让这个验证在服务器端完成,提高访客端的访问速度
ssl_stapling on;
ssl_stapling_verify on;
}
然后重启nginx