申请SSL证书及Nginx支持HTTPS

Page content

申请SSL证书

每年2.5$ 的SSL证书申请地址在这里: https://billing.centriohost.com/cart.php?a=add&pid=21

打开后看到原价是10$/年,域名使用泛域名: *.imxylz.com,服务器IP地址需要提供公网IP地址。邮件的前缀可以选择一个,后缀是域名地址。 当然需要一个2048位的CSR。

生成一个CSR私钥,可以使用下面的名称:

#openssl genrsa -out imxylz.com.pem 2048
#openssl req -new -key imxylz.com.pem -out imxylz.com.csr

需要注意的是生成csr最好不输入密码,否则某些web服务器(例如apache)启动时需要输入密码。 另外CN (Common Name is a Necessary Item) 应该是 *.imxylz.com,否则会被拒绝。 (我在这个地方折腾好久,最后发ticket更换csr才解决)。

然后在下一页付款是输入优惠码 LET2SSL ,即可优惠7.5$,这样就只剩下2.5$/年了。 以后每年续费也按照这个价格进行。

付款完成后系统会发送邮件给第一步选择的邮箱地址: 前缀@imxylz.com,例如我的是: admin@imxylz.com

特别注意的是:由于邮件会发送给admin@imxylz.com,因此需要提前准备好邮件服务器,例如我当时就安装了postfix又来接收邮件。

由于pop3没有安装成功,因此我将收到的邮件 /root/Maildir/new/xxxxxx 下载回来,改成.eml后缀文件用OS X的Mail打开的。 邮件中有一个链接地址,需要确认信息是否正确,确认即可。(如果不确认及意味着操作失败,不能进行以后的操作了)。

比较悲剧的是我当时将邮件服务器搞坏了,没有收到邮件,最后只好发送ticket请求重发。 好在工作人员非常厚道,将证书发送给admin@imxylz.com以及我的gmail邮箱。 正常应该不发送给非域名邮箱的。

再次表扬下centriohost网站的工作人员,对ticket的处理比较及时。不爽的地方在于注册的时候会将密码明文发送到注册邮箱中。

Nginx 安装证书

邮件中有两个证书,一个是域名证书,一个是根证书。 将两个证书合并成一个文本文件(包括注释) imxylz.com.crt。 (注意域名证书在上,根证书在下,否则nginx启动会报错误。)

现在我们需要两个文件: imxylz.com.pem以及imxylz.com.crt。

  1. 编译Nginx

如果nginx没有支持SSL,则需要重新编译。可通过 nginx -V 来检查是否支持SSL。

#./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
#make
#make install
  1. 配置证书

将证书拷贝到/usr/local/nginx/conf中,然后配置(/usr/local/nginx/conf/nginx.conf)如下:

server {
    listen 443;
    server_name imxylz.com;
    index index.html;
    ssl on;
    ssl_certificate /usr/local/nginx/conf/imxylz.com.crt;
    ssl_certificate_key /usr/local/nginx/conf/imxylz.com.pem;
    location / {
        root /data/imxylz.com/public;
    }
}

测试下nginx并运行。

#/usr/local/nginx/sbin/nginx -t
#/usr/local/nginx/sbin/nginx

现在就可以通过 https://imxylz.com 访问HTTPS服务了。 当然如果网站有非https的资源,就需要改造地址,否则Windows下浏览器会弹出警告。 例如:

dsq.src = '//' + disqus_shortname + '.disqus.com/' + disqus_script;
<link href="//fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">

最终的效果图如下: ssl on imxylz.com

如果有问题,可以检查nginx的error_log。