昨天看到 name.com 在卖 RapidSSL 的 SSL 证书,而且很便宜的样子,单个域名一年只要 9.99 美元,就买了一个两年的。现在这个站点也算是用上了 HTTPS 了咯,HTTP 访问会跳转到加密连接。那么,记录一下从购买证书到配置好服务器的过程。

首先使用 openssl 生成一个 CSR(证书签名请求)。这里说明一下,购买一个证书之后,RapidSSL 并不是直接就发给你一个证书文件让你用在机器上,而是相当于卖了一个签名机会给你。你需要提交自己的 CSR,然后它会给你签名,这样就得到了一个证书,配合你生成 CSR 的时候使用的私钥就可以使用了。

运行 openssl req -new -nodes -newkey rsa:2048 -keyout yourdomain.com.key -out yourdomain.com.csr(将 yourdomain.com 替换成你自己的域名),openssl 会询问你一些基本信息。其中 Common Name 一项必须填写你要使用的域名。这里生成的 .key 文件就是之后要使用的私钥,而 .csr 文件则是你的证书签名请求文件。

现在你可以去购买证书了。在购买完成之后,会有地方让你输入你的基本信息。(这个步骤我并没有截图,因此没有图片可以用来解说)其中主要的一个过程是要验证你对目标域名的所有权,可以使用 NS 记录验证和邮箱验证。NS 记录验证耗时较长(但一般也能在一个小时内完成),一般是需要你添加一个随机生成的子域名的 C 记录,指向另一个随机子域名上,并最终解析到 127.0.0.1;邮箱验证需要你的域名有邮件服务提供商(通过 MX 记录指定第三方或者自己搭建都可以),RapidSSL 会向 admin@yourdomain.com (或其他可选的少数几个站点管理员邮箱地址)发送验证邮件,需要你访问邮件中的链接地址进行验证。

验证完成之后就可以提交你的 CSR 内容进行签名了。注意这时必须原封不动地将 .csr 文件内容粘贴进去,可以使用 cat yourdomain.com.csr 然后复制粘贴,或者在 OS X 下运行 pbcopy < yourdomain.com.csr 直接将文件内容写入到剪贴板。

提交 CSR 之后很快就可以收到邮件,其中有目标域名的证书内容。RapidSSL 会要求你将证书与一个 Intermediate 证书合并成一个文件使用,但这个步骤似乎不是必须的。

拿到证书文件之后,将证书文件和之前生成 CSR 时候获得的私钥上传到服务器就可以使用了。nginx 配置如下。

server {
    listen 443;
    server_name "yourdomain.com";
    ssl on;
    ssl_certificate "你的证书文件路径";
    ssl_certificate_key "你的私钥路径";
    ...
}

可以使用以下配置来将 HTTP 请求跳转到 HTTPS 请求。

server {
    listen 80;
    server_name "yourdomain.com";
    rewrite ^(.*)$ https://$server_name$request_uri? permanent;
}

最后不要忘了 reload 或者重启一下 nginx。