HTTPS 目前已经是所有注重隐私和安全的网站的首选,而且支持HTTPS对于网站的SEO也有一定的帮助。下面将介绍如何在nginx下搭建和配置HTTPS。
使用 OpenSSL 生成 SSL Key 和 CSR
OpenSSL 在 Linux、OS X 等常规的系统下默认都安装了,因为一些安全问题,一般现在的第三方 SSL 证书签发机构都要求起码 2048 位的 RSA 加密的私钥。普通的 SSL 证书认证分两种形式,一种是 DV(Domain Validated),还有一种是 OV (Organization Validated),前者只需要验证域名,后者需要验证你的组织或公司。在生成秘钥的过程中,需要填写下列信息:
- Common Name:域名
- Organization:组织或公司名字
- Department:部门,可以不填写
- City:城市,如 Shenzhen
- State / Province:省份,如 Shenzhen
- Country:国家,中国就是 CN
# 1、创建服务器私钥,命令会让你输入一个口令: openssl genrsa -des3 -out server.key 2048 # 2、创建签名请求的证书(CSR): openssl req -new -key server.key -out server.csr # 3、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令: cp server.key server.key.org openssl rsa -in server.key.org -out server.key # 4、最后标记证书使用上述私钥和CSR: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt # 也可以用使用下面一条命令直接生成,注意修改相关的信息 openssl req -new -newkey rsa:2048 -sha256 -nodes -out uusama.csr -keyout uusama.key -subj "/C=CN/ST=Shenzhen/L=Shenzhen/O=uusama Inc./OU=Web Security/CN=uusama.com"
以上命令执行完之后,会在当前目录生成两个文件:uusama.key 和 uusama.csr。这个 csr 文件需要提供给第三方 SSL认证机构,通过认证之后,会给一个 crt 文件,假设为 uusama.crt。
Nginx 配置 HTTPS 网站以及增加安全的配置
通过上面的步骤,我们可以得到两个文件: uusama.crt, uusama.key,我们把这两个文件移动到 /etc/nginx/ssl/ 目录下,然后在nginx的conf.d目录下添加一项 ssl.uusama.conf 的配置。可以直接把原来的配置复制过来。然后进行修改。
server { listen 443 ssl; server_name uusama.com; ssl on; ssl_certificate /etc/nginx/ssl/uusama.crt; ssl_certificate_key /etc/nginx/ssl/uusama.key; }
nginx -t && nginx -s reload 重启nginx,可以看看是否成功。
新型主流的HTTPS加密方法
以上方法采用的是SHA-1的加密方式,并不怎么安全,当前主流的方法是使用 迪菲-赫尔曼密钥交换 方式。
# 在当前文件夹生成一个迪菲-赫尔曼秘钥 uusama.pem openssl dhparam -out uusama.pem 2048
配置方法:在nginx的server配置中加上:
server{ # listen 80; listen 443 ssl; server_name uusama.com; access_log /var/log/nginx/ssl_uusama/access.log; error_log /var/log/nginx/ssl_uusama/error.log; ssl on; ssl_certificate ssl_ali/uusama.pem; ssl_certificate_key ssl_ali/uusama.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; # 下列配置开启全站https # add_header Strict-Transport-Security max-age=63072000; # add_header X-Frame-Options DENY; # add_header X-Content-Type-Options nosniff; }
可靠的第三方 SSL 签发机构
目前一般市面上针对中小站长和企业的 SSL 证书颁发机构有:
Comodo / 子品牌 Positive SSL
GlobalSign / 子品牌 AlphaSSL
其中 Postivie SSL、AlphaSSL、RapidSSL 等都是子品牌,一般都是三级四级证书,所以你会需要增加 CA 证书链到你的 CRT 文件里。