为nginx主机配置SSL证书

StartSSL是一个免费颁发SSL证书的机构,个人Class1使用免费,证书一年有效,给自己的host上也加了一个,提高安全性吧。 我用的server是nginx的,所以以下步骤均是按nginx的来,apache请自行改动。

  1. 申请证书

    StartSSL申请帐号,Control Panel->Sign Up,会让填入真实信息,提交后等Staff认证。他们速度很快,1个小时之内就给结果了。

    申请到后先备份证书,然后进Control Panel->Validation Wizard,选择Domain name validation,因为是免费证书必须要顶级域名。子域名输入www就好。

    登录到自己的VPS上,执行:

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

    至于csr和key叫什么随你便。

    生成申请后把csr的内容复制出来,回到StartSSL->Control Panel->Certificates Wizard

    Certificate Purpose选Web Server TLS/SSL Certificate

    生成私钥那步点跳过,粘贴刚才生成的csr内容。提交后继续等,Staff会验证你的site是不是phishing site这种(私人blog没啥可能),然后会发邮件通知去Control Panel retrieve certificate。

    复制证书内容,粘贴到tomem.crt,当然这个名字随便取。

    然后执行如下命令:

     cp tomem.crt tomem.crt.bak
     wget http://www.startssl.com/certs/ca.pem
     cat ca.pem >> tomem.crt
    

    否则Firefox可能提示该SSL不被信任。

  2. 配置nginx

    nginx一定要有http_ssl_module,否则启动时会出现unknown directive ssl。编译时没注意只加了--with-openssl-dir,结果nginx死活启动不了。

    修改nginx.conf,基本上把https server那段前面的#去掉就好。需要加入这行:

     error_page 497 "https://$host$uri?$args";
    

    否则连接http时会出现The plain HTTP request was sent to HTTPS port。

    如果有php,还需要在fastcgi配置里面加上

     fastcgi_param HTTPS on;
    

    重启nginx搞定。

本文参考了http://icodex.org/2010/02/为nginx虚拟主机配置startssl免费https证书/,特此感谢

PS:现在问题是开首页没问题,开blog提示This connection is partially encrypted,不知道是什么问题,有空再看 莫名其妙的好了