部署 SSL 证书的购买与 Nginx 下的配置

hisea · March 13, 2013 · Last by starshine replied at December 22, 2016 · 23788 hits
Topic has been selected as the excellent topic by the admin.

现在 SSL 证书的价格越来越亲民了。

最近发现了RapidSSL Online的 40 美金 3 年的廉价 SSL 证书,还是 GeoTrust 的。

忍不住买了一个。

分享一下具体的购买过程。

声明:RapidSSL 没给任何广告费用,因为购买和安装过程十分顺畅,纯分享。

为什么购买 SSL:

http 协议默认情况下是不加密的。各种密码,邮件,私人信息都是明文传送。

SSL 是 Secure Socket Layer 的简称,具体的作用就是在部署了 SSL 证书的网站跟用户浏览器之间建立一个安全的会话。

以防止信息在互联网任何中间节点上被盗用。

SSL 的工作原理网上很多,这里就不唠叨了,具体可以看这里或者 这里

购买地点:

https://www.rapidsslonline.com/

购买选择:

Standard SSL Certificates

  • 1 year @ $17.99
  • 2 years @ $15.99
  • 3 years @ $12.99
  • 4 years @ $11.99

这种证书是最基本的证书,提供商是 GeoTrust。 可以有一个 Common Name, 加入现在的公司后发现购买的是 domain.com 的证书,导致 www.domain.com 不能使用。 在这里提醒一下考虑购买的朋友,买 www.domain.com 就已经包含了 domain.com 的证书,可是买 domain.com 的

如果你有很多子域名需要证书,那么需要下面任意一个:

  • 购买一个支持多个 SAN 的证书 (支持多个子域名)
  • 购买一个 Wildcard 证书 (支持任意多个子域名)

不过这些都是 300-2000 块美金一年的证书了。

购买过程:

选择 Standard SSL Certificates,RapidSSL. 点击 Buy Now,用 Paypal 付钱。之后你会收到一个邮件。有一个 GeoTrust 生成连接。先不要点击链接,因为需要我们先去部署的服务器上面搞一个 CSR

sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl

#生成private key
sudo openssl genrsa -des3 -out server.key 2048
这里问你输入一个passphrase,选择一个容易记得,下一步会需要输入。

#生成 CSR
sudo openssl req -new -key server.key -out server.csr

Country Name (2 letter code) [AU]:US  #国家代码
State or Province Name (full name) [Some-State]:New York #省份
Locality Name (eg, city) []:NYC  #城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Awesome Inc #公司名称
Organizational Unit Name (eg, section) []:   #部门名称
Common Name (e.g. server FQDN or YOUR name) []: www.example.com                  
Email Address []: [email protected]  #管理员邮箱

生成之后,就可以点击 GeoTrust 的连接,然后 CSR 那个框框里面填入 server.csr 文件的内容。然后选择你的管理员邮箱完成表单。这里一定要选一个可靠的邮箱,因为证书是通过邮箱发送给你的。

完成之后,邮箱会收到一个 Approval 的邮件,点击连接后选择 Approve。

下一个邮件就会收到证书了。

收到证书后,再/etc/nginx/ssl 文件夹下面新建一个 server.crt 的文件,把证书内容粘贴进去。证书这部分就搞定了。

配置过程:

我们的 private key 是有 passphrase 的,我们需要去掉 private key 的 passphrase 才能让 Nginx 自由自在的启动。

sudo cp server.key server.key.org sudo openssl rsa -in server.key.org -out server.key

之后再 nginx.conf 中配置

server {
  listen 443;
  server_name example.com;

  root /usr/share/nginx/www;
  index index.html index.htm;

  ssl on;
  ssl_certificate /etc/nginx/ssl/server.crt;
  ssl_certificate_key /etc/nginx/ssl/server.key; 
}

如果想把 http 的请求转到 https 的话:

server {
  listen      80;
  server_name example.me;
  rewrite     ^   https://$server_name$request_uri? permanent;
}

最后的广告: https://hisea.me/p/ssl-config-with-nginx

startssl.com 是免费的,而且申请很快。

跟服务器的个数有没有关系?

#2 楼 @chinacheng 服务器多了的话可以将 ssl 终结在 Load Balancer. 客户端到 load balancer 加密传输,load balancer 到服务器明文传输。

#3 楼 @hisea 你这个文档相当好 👍, sudo openssl rsa -in server.key.org -out server.key 这个配置我没有用到,也能正常运行,nginx 也能正常重启,你这里做这个的具体场景是什么?他 email 发来的 key 有两部分,当时相当的迷惑,他的文档很蛋疼的写了三步,前两步分别复制保存,第三部的时候把这两个文件合并到了一个文件中。

#4 楼 @chinacheng 嗯,如果你之前生成 private key 的时候没有设置密码,就不需要这一步。

一般他们的文档都是很不专业的。Google 还是王道。

按照这个说明,几分就完成了https://www.haijia.org/的配置。现在从 Bing 下访问,再也不会提示证书未认证了。十分感谢!

huacnlee in [Topic was deleted] mention this topic. 14 Dec 10:44

@huacnlee 我的最近也在玩这个,但是总是不生效,希望大神指教,我的配置如下:(这样配置有问题,但是不知道问题出在哪里)

server {

listen 24766;

listen 443 ssl;

ssl_certificate /opt/zs/33iq.crt;

ssl_certificate_key /opt/zs/33iq.key;

root /var/www/star_p/current/;

location / {

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Host $http_host;

proxy_pass http://star_p;

} }

server {

listen 24766;

server_name demo.star.net;

rewrite ^ https://$server_name$request_uri permanent;

}

You need to Sign in before reply, if you don't have an account, please Sign up first.