Nginx服务器证书部署
依赖建议
l? SSL卸载驱动。建议:openssl版本1.1.0f+。
l? nginx版本Stable version:最新稳定版,生产环境上建议使用的版本。
获取证书
MPKI方式:
1.?? 登录https://mpki.trustasia.com。
2.?? 证书下载pem(nginx SLB)格式,会得到一个zip的压缩包,解压后有两个文件,分别是crt和key后缀。
非MPKI方式:
1.? CSR对应的key文件
2.? 证书邮件里提取代码,把-----BEGIN CERTIFICATE-----到-----END CERTIFICATE-----(包括开头和结尾,不用换行)复制到txt文本文件里,然后保存为crt后缀;这样也就获取到nginx用的2个文件了。
SSL相关配置
到nginx的conf目录,找到nginx.conf文件,修改或者配置这样一段
server?{ ????listen?80?default_server; ????listen?[::]:80?default_server; ????#?强制跳转 ????return?301?https://$host$request_uri; }? server?{ ????listen?443?ssl?http2; ????listen?[::]:443?ssl?http2;???#IPv6支持? ????#RSA证书 ????ssl_certificate?/xxx/xx/rsa.pem; ????ssl_certificate_key?/xxx/xx/rsa.key; ????#ECC证书,可选,需要1.11版本支持 ????ssl_certificate?/xxx/xx/ecc.pem;; ????ssl_certificate_key?/xxx/xx/ecc.key;; ????ssl_session_timeout?1d; ????ssl_session_cache?shared:SSL:50m; ????ssl_session_tickets?off; ????#?A+级配置. ????ssl_protocols??TLSv1?TLSv1.1?TLSv1.2; ????ssl_ciphers?'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; ????ssl_prefer_server_ciphers?on; ????#?HSTS?(需要编译带ngx_http_headers_module????(15768000?秒=?6?月) ????add_header?Strict-Transport-Security?max-age=15768000; ????#?OCSP?Stapling?装订 ????ssl_stapling?on; ????ssl_stapling_verify?on; }
下面为配置文件参数说明:
listen?443
SSL访问端口号为443
ssl?????? on
启用SSL功能
ssl_certificate
证书文件server.crt
ssl_certificate_key
私钥文件server.pem
ssl_protocols
使用的协议
ssl_ciphers
配置加密套件,写法遵循openssl标准
配置完成后,先用sbin/nginx –t来测试下配置是否有误,正确无误的话,建议重启nginx。
http跳转https(建议而非强制)
对于用户,不是不知道https,就是知道https也因为懒,不愿意输入https。这样就有一个需求,让服务器自动把http的请求重定向到https。
在服务器这边的话配置的话,可以在页面里加js脚本,也可以在后端程序里写重定向,当然也可以在web服务器来实现跳转。Nginx是支持rewrite的(只要在编译的时候没有去掉pcre)
在http的server里
增加
return 301 https://$host$request_uri;
或者
rewrite?? ^(.*) https://$host$1 permanent;
这样就可以实现80进来的请求,重定向为https了。
检测
https的端口没做限制后(防火墙放行,端口转发正常),到https://myssl.com进行检测
评级达到B以上,在安全和兼容方面是较不错的。