设置 ssl 可以让访客通过 443 端口 &加密方式访问你的网站。SSL是一个网络安全数据数据套接字协议 提供在网络上加密你的网络会话来传输你的信息。
对于文章的内容,我不会对其做出任何的担保。
前提
已经正确安装了nginx 而且正在运行的 , 服务器 nginx 版本 >= 0.8.21 .
nginx -v
证书方面, 这里使用开放组织 CAcerts.org 的 SSL 签名服务, 虽然现在对于该签发机构 各大浏览器貌似还没有几个加入基为默认。 但是在开源社区 对其的支持就要好得多 ,具体的 列表在这里: 点我
本文全程都是在root 权限下运行的.
虚拟主机设置
假设 网站的目录为 /var/www/blog/
nginx 的虚拟主机站点配置文件 在 /etc/nginx/site-enabled/
创建自签名证书
在设置SSL 虚拟主机之前,我们需要一个 SSL 证书。现在我们来制作一个自签名证书 ,关于这个证书 ,浏览器会发生警告 ,但是我们需要用这个证书来 做为 后面 CAcert 认证证书的前题。
确保 ssl-cert 已经安装
apt-get install ssl-cert
用下面的方式创建一个自签名证书
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/blog.crt
中途需要输入主机名
host name : <= blog.blambin.com
这将会在这个文件里生成自签名证书 和 密钥 /etc/ssl/private/blog.crt
cat /etc/ssl/private/blog.crt
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDDxJqZcSPKhMhE
+AEHBfRPwgM1+k3vUDye6KZzcIg9Nnur1PqTRS/WJne2PhACOZ8wAgp+tWr9y6OR
………………………………………………………………
RvWyLl8m3qj812HYzqFYvF4CdlhABRuTa1VnwUnIN6jZIpKdEYmKsDI2Kn3u7G3V
FZ1gSqD53JK9dFPAvvV+/t6S
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICsjCCAZoCCQCSSVTOp+Jc5DANBgkqhkiG9w0BAQUFADAbMRkwFwYDVQQDExBi
bG9nLmJsYW1iaW4ub3JnMB4XDTEyMTExOTA3MjExN1oXDTIyMTExNzA3MjExN1ow
GzEZMBcGA1UEAxMQYmxvZy5ibGFtYml……………………………………………………
pykI8KOp7Rc15QiyWxmadaRKWKPpyH41uBbw4Xh8hM9kEuW2D7aG2t8RqdJYb8C8
vXKUdN+uFpX8b9JA2ObUbT8UxV4TDwFwe+yKQZn32dZPYUijdG/a/+3VwP2SG2h0
AcCu6JcfKLlwXem6S2isUEqqbOQgxg==
-----END CERTIFICATE-----
到这里,我们将文件分成两部分 ,私钥 /etc/ssl/private/blog.key 和 自签名证书 /etc/ssl/certs/blog.pem
vi /etc/ssl/private/blog.key
在里面填入我们得到以上文件 的 -----BEGIN PRIVATE KEY----- 和 -----END PRIVATE KEY---- 之间的部分 (包括)如:
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDDxJqZcSPKhMhE
+AEHBfRPwgM1+k3vUDye6KZzcIg9Nnur1PqTRS/WJne2PhACOZ8wAgp+tWr9y6OR
………………………………………………………………
RvWyLl8m3qj812HYzqFYvF4CdlhABRuTa1VnwUnIN6jZIpKdEYmKsDI2Kn3u7G3V
FZ1gSqD53JK9dFPAvvV+/t6S
-----END PRIVATE KEY-----
密钥必须设置为只有管理员才有权限访问
chmod 600 /etc/ssl/private/blog.key
同样 ,创建文件 blog.pem
vi /etc/ssl/certs/blog.pem
在里面填入得到的文件的下半部分 , -----BEGIN RSA PRIVATE KEY----- 跟 -----END RSA PRIVATE KEY----- 之间
-----BEGIN CERTIFICATE-----
MIICsjCCAZoCCQCSSVTOp+Jc5DANBgkqhkiG9w0BAQUFADAbMRkwFwYDVQQDExBi
bG9nLmJsYW1iaW4ub3JnMB4XDTEyMTExOTA3MjExN1oXDTIyMTExNzA3MjExN1ow
GzEZMBcGA1UEAxMQYmxvZy5ibGFtYml……………………………………………………
pykI8KOp7Rc15QiyWxmadaRKWKPpyH41uBbw4Xh8hM9kEuW2D7aG2t8RqdJYb8C8
vXKUdN+uFpX8b9JA2ObUbT8UxV4TDwFwe+yKQZn32dZPYUijdG/a/+3VwP2SG2h0
AcCu6JcfKLlwXem6S2isUEqqbOQgxg==
-----END CERTIFICATE-----
现在我们就可以把 /etc/ssl/private/blog.crt 删除了 。
rm -f /etc/ssl/private/blog.crt
-----------------------------------------------------------------------长长的分割线-----------------------------------------------------------
SSL 虚拟主机设置
下一步就是需要把 ssl 添加到 虚拟站点是去了
打开站点配置文件
vi /etc/nginx/site-enabled/blog
在 server { 和 } 之间 添加
listen 443 ssl;
listen [::]:443 ipv6only=on ssl;
ssl_certificate /etc/ssl/certs/blog.pem;
ssl_certificate_key /etc/ssl/private/blog.key;
或者
listen 443 ;
listen [::]:443 ipv6only=on ;
ssl on;
ssl_certificate /etc/ssl/certs/blog.pem;
ssl_certificate_key /etc/ssl/private/blog.key;
完成之后重启 nginx :
/etc/init.d/nginx reload
这个时候 用 ssl 方式打开 你的网站 会发现 警告 ,暂时先忽略掉。
创建一个证书签名请求
想要在 CAcert 上请求一个签名证书 ,我们必须从我们生成的私钥生成的证书签名请求 (CSR)拿到 CAcerts 上重新生成一个受认证的证书,用以替换我们的自签名证书。
创建一个新的工作目录 /etc/ssl/csr
mkdir /etc/ssl/csr
现在我们从我们的私钥里生成一个新的CSR
openssl req -new -key /etc/ssl/private/blog.key -out /etc/ssl/csr/blog.csr
接下来会要球你回答一些问题,需要注意的是 Common Name 字段 必须填上你的域名信息
Common Name (eg, YOUR name) [ ]: <-- blog.blambin.org
之后 将会生成一个 csr 文件
cat /etc/ssl/csr/blog.csr
获取受信认的证书
到 Cacert.org 上注册一个帐号 , 然后在右加的栏目 (Domains)里添加你的域名然后 还是到邮箱里认证它 。
要得到一个证书 ,点选 Server Certificates > New
然后把上一小节的内容粘贴到里面
-----BEGIN CERTIFICATE REQUEST-----
MIIC8jCCAdoCAQAwgZUxCzAJBgNVBAYTAkNOMRAwDgYDVQQIDAdHdWFuZ3hpMQ8w
DQYDVQQHDAZZaXpob3UxEDAOBgNVBAoMB2JsYW1iaW4xEDAOBgNVBAsMB2JsYW1i
aW4xGTAXBgNVBAMM…………………………………………………………………………
wJ6yXyw19ydcH7FwDft5ovlosWiSA+HEdqZpbEkf7pDkdCNgLVg=
-----END CERTIFICATE REQUEST-----
点 Submit ,过一会就会生成证书内容啦
然后备份本地的 pem 文件 为pem_bak,再清空 pem 文件
cp /etc/ssl/certs/blog.pem /etc/ssl/certs/blog.pem_bak
清空
> /etc/ssl/certs/blog.pem
用上面网页上得到的证书填充
vi /etc/ssl/certs/blog.pem
重启 nginx :
/etc/init.d/nginx reload
这样下来 ssl 已经装好了 如果firefox 没有问你要认证的话。 有可能你还需要自行添加 CAcert 的根证书。