Nginx SSL HTTPS相关配置

一、使用 OpenSSL 生成 SSL Key 和 CSR

输入以下命令:

openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr

加密强度:2048 位,如果你的机器性能强劲,也可以选择 4096 位

国家(Country):CN

省份(State / Province):Beijing

城市(City):Beijing

部门(Department):可以不填写,这里我们写Web Security

组织或公司名字(Organization):Suming, Inc.

域名,也称为 Common Name:example.com (如同时添加WWW和不带WWW的,以逗号分开)

PS:如果是泛域名证书,则应该填写*.example.com

你可以在系统的任何地方运行这个命令,会自动在当前目录生成example.com.csr和example.com.key这两个文件

输入cat example.com.csr查看一下example.com.csr,得到一长串的加密文字,复制并提交SSL认证机构

这个 CSR 文件就是你需要提交给 SSL 认证机构的,当你的域名或组织通过验证后,认证机构就会颁发给你一个Suming.org.crt

二、Nginx 配置 HTTPS 网站以及增加安全的配置

前面已经提到,你需要提交 CSR 文件给第三方 SSL 认证机构,通过认证后,他们会颁发给你一个 CRT 文件,我们命名为example.com.crt

同时,为了统一,你可以把这三个文件都移动到/etc/ssl/certs/目录。(自行修改目录)

然后可以修改 Nginx 配置文件

server {  
    listen 80;
    listen [::]:80 ssl ipv6only=on; 
    listen 443 ssl;
    listen [::]:443 ssl ipv6only=on;
    server_name example.com;

    ssl on;
    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/certs/example.com.key;
}

检测配置文件没问题后重新读取 Nginx 即可

nginx -s reload

生成完毕后,在 Nginx 的 SSL 配置后面加入

ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
keepalive_timeout 70;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;  

同时,如果是全站 HTTPS 并且不考虑 HTTP 的话,可以加入 HSTS 告诉你的浏览器本网站全站加密,并且强制用 HTTPS 访问

add_header Strict-Transport-Security max-age=63072000;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

同时也可以单独开一个 Nginx 配置,把 HTTP 的访问请求都用 301 跳转到 HTTPS

server {  
        listen 80;
        listen [::]:80 ssl ipv6only=on;
        server_name     example.com;
        return 301 https://example.com$request_uri;
}

PS:文章中涉及的域名、目录自行替换,此文章仅备用。


标签: nginx, https, ssl

添加新评论