Nginx 安装SSL证书步骤
发布于 分类 Nginx
更新于 2015-10-25
58天前 有1个用户阅读过
一、HTTPS 是什么?
可以查看维基百科了解。
二、使用 OpenSSL 生成 SSL Key 和 CSR
由于只有浏览器或者系统信赖的 CA 才可以让所有的访问者通畅的访问你的加密网站,而不是出现证书错误的提示。所以我们跳过自签证书的步骤,直接开始签署第三方可信任的 SSL 证书吧。
同时,普通的 SSL 证书认证分两种形式,一种是 DV(Domain Validated),还有一种是 OV (Organization Validated),前者只需要验证域名,后者需要验证你的组织或公司,在安全性方面,肯定是后者要好。当然价格相差还是比较多的。
无论你用 DV 还是 OV 生成私钥,都需要填写一些基本信息,这里我们假设如下, 本例以seonoco.com为例,请根据实际情况更换为自己相应信息:
你可以在系统的任何地方运行这个命令,会自动在当前目录生成seonoco.com.csr和seonoco.com.key这两个文件,使用 OpenSSL 生成 key 和 csr 的命令如下
# openssl req -new -newkey rsa:2048 -nodes -keyout seonoco.com.key -out seonoco.com.csr
Generating a 2048 bit RSA private key
..+++
...........................................+++
writing new private key to 'seonoco.com.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Chongqing
Locality Name (eg, city) [Default City]:Chongqing
Organization Name (eg, company) [Default Company Ltd]:SEONOCO
Organizational Unit Name (eg, section) []:SEONOCO
Common Name (eg, your name or your server's hostname) []:*.seonoco.com //泛域名证书
Email Address []:[email protected] Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []://不输入直接回车
An optional company name []://不输入直接回车
查看CSR文件内容, 这个 CSR 文件就是你需要提交给 SSL 认证机构的,当你的域名或组织通过验证后,认证机构就会颁发给你一个seonoco.com.crt
而seonoco.com.key是需要用在 Nginx 配置里和seonoco.com.crt配合使用的,需要好好保管,千万别泄露给任何第三方。
# cat seonoco.com.csr
-----BEGIN CERTIFICATE REQUEST-----
MIIXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXX seonoco.com XXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXX+02D8A==
-----END CERTIFICATE REQUEST-----
站长使用的是wosign证书,在后台根据提示验证域名和提交CSR后,很快就生成了证书并下载到服务器进行稍后的配置。
三、Nginx 配置 HTTPS 网站以及增加安全的配置
前面已经提到,你需要提交 CSR 文件给第三方 SSL 认证机构,通过认证后,他们会颁发给你一个 CRT 文件,我们命名为example_com.crt
同时,为了统一,你可以把这三个文件都移动到/etc/ssl/private/目录。
然后可以修改 Nginx 配置文件
server {
listen 80;
listen [::]:80 ssl ipv6only=on;
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
server_name seonoco.com www.seonoco.com;
ssl on;
ssl_certificate /etc/ssl/private/seonoco.com.crt;
ssl_certificate_key /etc/ssl/private/seonoco.com.key;
}
检测配置文件没问题后重新读取 Nginx 即可,这里基本上就完成了,后面只是扩展知识。
nginx -t && nginx -s reload
但是这么做并不安全,默认是 SHA-1 形式,而现在主流的方案应该都避免 SHA-1,为了确保更强的安全性,我们可以采取迪菲-赫尔曼密钥交换
首先,进入/etc/ssl/certs目录并生成一个dhparam.pem
cd /etc/ssl/certs
openssl dhparam -out dhparam.pem 2048 # 如果你的机器性能足够强大,可以用 4096 位加密 生成完毕后,在 Nginx 的 SSL 配置后面加入
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
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 seonoco.com;
return 301 https://seonoco.com$request_uri;
}
四、可靠的第三方 SSL 签发机构
众所周知,前段时间某 NIC 机构爆出过针对 Google 域名的证书签发的丑闻,所以可见选择一家靠谱的第三方 SSL 签发机构是多么的重要。
目前一般市面上针对中小站长和企业的 SSL 证书颁发机构有:
Comodo / 子品牌 Positive SSL
GlobalSign / 子品牌 AlphaSSL
五、针对企业的 EV SSL
EV SSL,是 Extended Validation 的简称,更注重于对企业网站的安全保护以及严格的认证。
最明显的区别就是,通常 EV SSL 显示都是绿色的条。
-- The End --