Tag Archives: SSL

申请SSL证书以及Nginx配置

申请的namecheap的ssl证书(其实namacheap也是comodo的代理),首先要创建Certificate Signing Request (CSR)后才能把CSR输入网站,邮件验证后才能生成证书。

1. 在服务器上创建Certificate Signing Request (CSR)

要使用SSL必须有独立IP地址,所有共享IP的虚拟主机是没有办法申请的。首先把目录切换到Nginx的conf文件目录:

#cd /usr/local/nginx/conf
#openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out server.csr

运行上述命令后就在目录下创建了两个文件:myserver.key和server.csr.myserver.key是你的私钥,要妥善保管。然后openssl会让你输入一些信息:

Country Name (2 letter code) [AU]: GB
State or Province Name (full name) [Some-State]: Yorks
Locality Name (eg, city) []: York
Organization Name (eg, company) [Internet Widgits Pty Ltd]: MyCompany Ltd
Organizational Unit Name (eg, section) []: IT
Common Name (eg, YOUR name) []: mysubdomain.mydomain.com
Email Address []:

域名一定要输入你的域名,email也要输入注册域名时候的whois信息中的邮箱地址。

A challenge password []:
An optional company name []:

这两项可以留空。

然后运行下面命令,显示CSR文件内容:

#cat server.csr

把包含“—–BEGIN CERTIFICATE REQUEST—– ”和“—–END CERTIFICATE REQUEST—– ”在内的内容拷贝。

2. 验证

把CSR的信息输入namecheap后,第二步会有一个可选的邮件地址让你选择,本别是admin@youdomain.com或者webmaster@youdomain.com还有你的whois信息中的邮箱地址,我让选了了whois信息中的邮箱地址。namecheap会向这个邮箱发送一封验证信,根据信中的地址输入验证码后就会向你发送包含证书文件的压缩包了。

解压后把这三个文件通过FTP或者SFTP上传到Nginx的conf目录。

3.Nginx配置文件
Nginx的配置文件需要两个文件,一个是SSL的私钥,也就是刚才第一步创建的myserver.key;另一个是comodo通过邮件发给我的压缩包中文件的“合体”:

cat www_yourdomain_com.crt PositiveSSLCA2.crt AddTrustExternalCARoot.crt >> ssl-bundle.crt

创建的ssl-bundle.crt就是所需的“合体”。
下面创建一个ssl.conf:

server
{
        listen      443;
        server_name yourdomain.com www.yourdomain.com;
        index index.html index.htm index.php;
        root /home/wwwroot;
        ssl on;
        ssl_certificate ssl-bundle.crt;
        ssl_certificate_key myserver.key;
        ssl_protocols SSLv3 TLSv1;
        ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;
        location ~ .*\.(php|php5)?$
        {
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_index index.php;
        fastcgi_param  HTTPS on;
        include fcgi.conf;
        }
        access_log  off;
}

然后在ningx.conf中引用这个ssl.conf即可。

6.Nginx子目录rewrite
如果网站全部通过https访问的话,肯定会给服务带来很多压力(ssl证书每次加密需要CPU运算),所以我只希望某些子目录使用https访问,并且对使用http访问的强制转向至https:

server {
        listen          80;
        server_name     domain.com;

        location / {
                index index.php index.html;
                root  /home/domain.com/public;
                }

        #Redirect Admin requests to secure server
        location ^~ /www/admin/ {
                rewrite ^/(.*) https://domain.com$1 permanent;
                }
}

这样就能强制所有试图用http访问/www/admin/子目录的请求rewrite至https,增加网站的安全性。

5.结尾
重启后通过https就能访问网站了,不过我发现申请comodo廉价SSL证书后,浏览器并没有出现像其他大网站SSL访问时候的效果:

我申请的征收只有显示一把绿色的锁而已,后来查了Google的说明才知道,那样效果的SSL证书是EV SSL证书,价格比较贵:

图标 含义
圆球 此网站未使用 SSL。大多数网站不需要使用 SSL,因为它们不处理敏感信息。请避免在此类网页上输入敏感信息,比如用户名和密码。
锁定图标绿色的 https Google Chrome 浏览器成功地与该网站建立了安全连接。如果您需要登录该网站或在该网页上输入敏感信息,请查找此图标并确保该网址具有正确的域名。

如果网站使用了扩展验证安全套接字层 (EV-SSL) 证书,则单位名称也会以绿色字体显示在该图标旁。请务必将浏览器设置为检查服务器证书吊销状态,以鉴别网站是否有 EV-SSL 证书。

提醒图标 黄色的 https 该网站使用 SSL,但 Google Chrome 浏览器在网页上检测到不安全的内容。请勿轻易在此网页上输入敏感信息。不安全的内容会产生漏洞,给他人提供更改网页外观的可乘之机。
提醒图标 红色的 https 该网站使用 SSL,但 Google Chrome 浏览器在该网页上检测到高风险的不安全内容或该网站的证书有问题。请勿在此网页上输入敏感信息。无效证书或其他严重的 https 问题表明有人试图篡改您与该网站的连接。