通过提交CSR一些可靠的第三方SSL签发机构,得到颁发的CRT文件,我们可以将自己的站点实现上HTTPS访问。

一些可靠的第三方SSL签发机构在文末列出。

1. 使用OpenSSL生成Key和CSR

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

该命令生成一个2048位的Key文件和CSR文件。如果您的服务器性能足够,也可以使用4096位。不选择1024位是因为(简单来说)现在的计算机性能越来越好,其算法被破解的难度大大降低了。

生成私钥时会向您询问一些信息,其中:

Common Name (e.g. server FQDN or YOUR name) []: YOUR INPUT一项在此处填写的是域名,因为我们在给网站应用上HTTPS。

2. 获取CRT文件

通过您信赖的第三方CA机构(文末列出了一些第三方机构),提供CSR文件,其一般会给您颁发一个CRT文件。现在,您一共有了三个文件:example.key, example.csr, example.crt

3. 在服务区上配置

首先将key和crt上传至服务器任意一个目录下,这里假设您上传至了/etc/ssl/private/.

然后修改Nginx配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80;
listen [::]:80;

listen 443 ssl default_server;
listen [::]:443 ssl default_server;

....

#ssl on;
ssl_certificate /etc/ssl/private/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNULL;
}

保存并退出, 重启Nginx,访问https://example.com即可查看到效果啦!

可以使用nginx -t && nginx -s reload来检测语法并且重启,或者直接使用killall -HUP nginx来平滑启动nginx。

如果取消注释ssl on,那么在没有其他措施的情况下,正常访问http://example.com,会显示错误:

1
The plain HTTP request was sent to HTTPS port

4. 可靠第三方SSL签发机构

此处信息摘自于此处


目前一般市面上针对中小站长和企业的 SSL 证书颁发机构有:

StartSSL

Comodo / 子品牌 Positive SSL

GlobalSign / 子品牌 AlphaSSL

GeoTrust/ 子品牌 RapidSSL

其中 Postivie SSL、AlphaSSL、RapidSSL 等都是子品牌,一般都是三级四级证书,所以你会需要增加 CA 证书链到你的 CRT 文件里。

以 Comodo Positive SSL 为例,需要串联 CA 证书,假设你的域名是 example.com

那么,串联的命令是

1
cat example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > example_com.signed.crt

在 Nginx 配置里使用 example_com.signed.crt 即可

如果是一般常见的 AplhaSSL 泛域名证书,他们是不会发给你 CA 证书链的,那么在你的 CRT 文件后面需要加入 AlphaSSL 的 CA 证书链

AlphaSSL Intermediate CA