如何为自己的VPS服务器安装免费SSL证书

2015年12月5日更新:Let’s Encrypt是一个专门提供免费SSL证书的非盈利性CA机构,极大地方便了申请免费SSL证书的过程。因此现在我不推荐使用下面的方法。

大多数的CA证书都要花钱买,不过有一个叫StartCOM的CA机构为个人提供的证书是免费的。他们的网址是startssl.com,你可以在Firefox浏览器和Chrome浏览器的Certificate Manager受信任的CA机构中找到StartCOM这个公司。

下面,我将一步一步教你如何向StartSSL申请一个证书并安装在自己的Linux VPS服务器上。你可以将CA证书安装在web服务器上,也可以安装在自己的邮件服务器上。

在StartSSL网站注册

StartSSL网站不使用账号和密码来登录,而是使用个人证书来验证用户登录。前往StartSSL注册页面,填写你的个人信息。注意,邮箱地址不要填写QQ邮箱!否则不能接收验证码。

Selection_018

 

点击Continue后,他们会给你的邮箱发一个验证码。将验证码粘贴在文本框中。

ssl-2-signup-verify

 

验证通过后,将会转到一个页面,生成一个私钥。这个私钥保存在浏览器中。点击Continue生成私钥。ssl-3-auth-key-generate然后他们会要求安装证书,点击Install安装。

ssl-4-auth-cert

 

证书会安装在你的浏览器中。记住这个证书不是我们最终要的SSL证书,而是我们登录StartSSL网站的个人证书

ssl-5-auth-cert-installed

 

域名验证

点击Control Panel进入控制面板

Selection_014

 

然后点击Validation Wizard标签,进入验证向导页面。选择Domain Name Validation进行域名验证。

ssl-7-begin-domain

 

输入你的域名

Selection_013

 

然后,他们会查询域名的whois信息,并询问你要使用哪个邮箱来接收验证码,其中有个邮箱就是whois信息查询出来的邮箱。选择一个可用的邮箱地址。

Selection_015

 

他们会发一个验证码到你的邮箱,在文本框中输入验证码以证明你是域名的所有者。

Selection_016

 

验证成功。

Selection_017

 

取得CA证书

首先我们需要生成私钥。StartSSL可以为你生成一个私钥,但私钥最好是自己来生成。因为CA证书的私钥只有自己可以看,不能给任何他人看。

登录Linux VPS服务器,输入下面的命令生成一个4096位的RSA私钥。

openssl genrsa -aes256 -out my-private-encrypted.key 4096

你将被要求输入一个Pass Phrase,Pass Phrase要足够长,能有多复杂就要多复杂,并记住它。输入完Pass Phrase后,一个经过加密的私钥就生成了。这个私钥保存在my-private-encrypted.key文件中。

下一步是将私钥解密(decrypt),输入下面的命令:

openssl rsa -in my-private-encrypted.key -out my-private-decrypted.key

它将要求你输入之前的Pass Phrase。正确输入Pass Phrase后,私钥就被解密了,保存在my-private-decrypted.key文件中。

现在,生成一个证书签发请求(CSR)。

openssl req -new -sha256 -key my-private-decrypted.key -out mydomain.com.csr

-key 后面的参数就是解密的私钥。公钥由经过解密的私钥生成,并嵌入在CSR文件中。将mydomain.com替换成你的域名,比如我的是linuxbabe.com。它将要求你输入一些信息。我们可以一路按回车键,不输入信息,因为StartSSL不会理睬CSR文件中的这些信息,它只关心CSR里的公钥。

CSR文件生成后,你可以输入下面的命令来查看CSR文件里的公钥:
openssl req -in mydomain.com.csr -noout -pubkey
输入下面命令查看CSR申请人的信息以及公钥和签名信息:
openssl req -text -in mydomain.com.csr -noout

向StartSSL提交CSR并获取证书

返回到StartSSL网站的控制面板(Control Panel),点击“Certificates Wizard”(证书向导)标签。不管你是申请Web服务器的证书还是邮件服务器的证书,Certificate Target都要选择Web Server SSL/TLS Certificatessl-12-cert-begin

 

然后StartSSL想要为你生成一个私钥,因为我们自己生成了私钥,所以点击“Skip”跳过这一步。

ssl-13-cert-key-skip

 

下一步是提交CSR,在VPS服务器上输入下面的命令

cat mydomain.com.csr

将cat命令的输出结果全部复制并粘贴到文本框中。

ssl-14-csr-enter

成功提交了CSR。

ssl-15-csr-received

 

现在选择之前通过验证的域名,我的是linuxbabe.com

Selection_019

 

然后它要求你输入一个二级域名,也就是主机名。如果你的服务器是web服务器那么可以输入www,如果你的服务器是邮件服务器,那么这个二级域名要对应MX记录的主机名。我的邮件服务器的MX记录如下:

@           MX           mail.linuxbabe.com

主机名是mail.linuxbabe.com,所以我输入在文本框中输入mail。

Selection_020

然后StartSSL请你核对好信息,其中Common Name要与之前的二级域名一致。没有错误的话点击Continue。

Selection_021

 

最后,我们就得到了一个CA证书!证书内容在文本框中,把文本框中的所有内容复制到一个文件中保存在服务器上。你可以为CA证书文件起名为mydomain.com.crt,比如我的是linuxbabe.com.crt。

创建一个完整的证书链

CA证书是用来证明你的服务器是经过CA机构认证的。那么怎么来认证这些CA机构呢?怎么才能让浏览器信任这个CA机构呢?CA机构分为两类,一类是Root CA,另一类是中介CA。如果给你签发证书的机构是一个Root CA,那么现在证书链已经创建好了,因为浏览器中内置了Root CA名单,这些Root CA都是受浏览器信任的。但如果你的CA证书是由中介CA签发的话,那么我们还需要取得Root CA对中介CA签发的中介CA证书。

因为我们从StartSSL取得的免费CA证书是由StartSSL中介CA签发的。所以我们现在需要取得StartSSL的中介CA证书。在服务器上输入下面的命令以下载StartSSL的中介CA证书。

wget https://www.startssl.com/certs/class1/sha2/pem/sub.class1.server.sha2.ca.pem

然后,将你的CA证书和StartSSL的中介CA证书合并在一个文件中,输入下面的命令:

cat mydomain.com.crt sub.class1.server.sha2.ca.pem > unified.crt

当浏览器查看unified.crt证书文件时,首先看到的是StartSSL给你签发的免费CA证书,然后往下看到Root CA给StartSLL签发的中介CA证书。这两个证书与浏览器内置的Root CA名单形成了一个完整的证书链。

将证书安装在自己的web服务器上

首先来讲Nginx Web服务器如何启用SSL/TLS并安装证书

将经过解密的私钥复制到/etc/ssl/private/目录下:

sudo cp my-private-decrypted.key /etc/ssl/private/

将合成的证书文件复制到/etc/ssl/certs/目录下:

sudo cp unified.crt /etc/ssl/certs/

然后编辑Nginx配置文件

sudo vi /etc/nignx/sites-enabled/default

作如下修改,301重定向将使所有HTTP请求转成HTTPS。

server {
     listen 80;
     server_name linuxbabe.com;
     return 301 https://$server_name$request_uri;
}

server {
     listen 443 ssl;
     server_name linuxbabe.com;

     ssl_certificate /etc/ssl/certs/unified.crt;
     ssl_certificate_key /etc/ssl/private/my-private-decrypted.key;

     root /var/www/html;
     index index.php index.html index.htm index.nginx-debian.html;

     location / {
         try_files $uri $uri/ /index.php;
     }

     error_page 404 /404.html;
     error_page 500 502 503 504 /50x.html;

     location = /50x.html {
         root /var/www/html;
     }

     location ~ \.php$ {
         try_files $uri =404;
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
     }
}

保存文件后,输入下面的命令测试Nginx的配置是否正确:

sudo nginx -t

然后重启Nginx:

sudo service nginx restart 或 sudo systemctl restart nginx
如果出现如下错误:
nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use)
那么执行下面的命令,fuser会找到并杀死使用80端口的进程。
sudo fuser -k 80/tcp
然后再重启Nginx。

现在浏览器连接到你的网站时,会出现一把绿锁。ssl-0-lock

邮件服务器如何安装CA证书

Postfix安装证书

打开/etc/postfix/main.cf文件

sudo vi /etc/postfix/main.cf

在# TLS parameters下面添加如下内容:

smtpd_tls_cert_file=/etc/ssl/certs/unified.crt
smtpd_tls_key_file=/etc/ssl/private/my-private-decrypted.key
smtpd_use_tls=yes
smtpd_tls_security_level=may
smtpd_tls_protocols = !SSLv2, !SSLv3

Dovecot安装证书

打开/etc/dovecot/dovecot.conf文件

sudo vi /etc/dovecot/dovecot.conf

在文件中添加如下内容:

ssl=required
ssl_cert = </etc/ssl/certs/unified.crt
ssl_key = </etc/ssl/private/my-private-decrypted.key

备份你的私钥和证书

最后,不要忘记备份你经过加密的私钥和CA证书。私钥的密码也要记下来。给自己设置一个定期提醒,在证书失效之前提醒自己重新申请证书。(我使用QQ邮箱的定时发送邮件功能。)

我们还要在浏览器中导出StartSSL网站的身份证书以备份,这个证书就相当于我们的身份证,用来登录StartSSL网站。

为这篇文章评分
[Total: 5 Average: 2]

One Response to “如何为自己的VPS服务器安装免费SSL证书

  • 邓佳佳
    8 years ago

    非常感谢,资料非常详细。我已经成功部署。
    需要注意的是我用的 LNMP 一键安装包,配置 nginx 配置文件时路径可能不一样。

Leave a Reply

Your email address will not be published.

The maximum upload file size: 2 MB. You can upload: image, audio, video, document, spreadsheet, interactive, text, archive, code, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here