ITTS

[原创]使用Let’s encrypt免费SSL证书

本文原创:中国科学技术大学 张焕杰

修改时间:2017.10.04

一、SSL证书产生过程介绍

  1. SSL证书产生过程涉及以下几个概念:
  1. CA服务机构

CA服务机构的存在是做为公认的第三方来验证服务器身份,这中间可能需要收取服务费。

为了方便使用,可以选择Let’s encrypt免费CA机构签发证书。Let’s encrypt已被广泛接受,申请证书也比较快捷,一般来说5分钟内可以完成从开始安装程序到申请证书过程。需要说明的是Let’s encrypt签发的证书有效期是90天,在到期之前需完成证书更新。

  1. Let’s encrypt免费证书颁发过程

二、Let’s encrypt 证书生成工具

有很多种Let’s encrypt 证书生成工具,这里介绍完全由shell脚本完成整个过程的getssl https://github.com/srvrco/getssl

以下过程使用域名blackip.ustc.edu.cn演示,服务器是apache。

  1. 安装过程
    mkdir /usr/src/getssl
    cd /usr/src/getssl
    curl --silent https://raw.githubusercontent.com/srvrco/getssl/master/getssl > getssl ; chmod 700 getssl
    
  2. 生成基本配置
    cd /usr/src/getssl
    ./getssl -c blackip.ustc.edu.cn
    
  3. 修改配置
    vi /root/.getssl/getssl.cfg /root/.getssl/blackip.ustc.edu.cn/getssl.cfg
    

    其中/root/.getssl/getssl.cfg修改为:

    CA="https://acme-v01.api.letsencrypt.org"
    ACCOUNT_EMAIL="james@ustc.edu.cn"
    

    /root/.getssl/blackip.ustc.edu.cn/getssl.cfg修改为: ```` ACL=(‘/var/www/html/.well-known/acme-challenge’)

DOMAIN_CERT_LOCATION=”/etc/ssl/blackip.ustc.edu.cn.crt” DOMAIN_KEY_LOCATION=”/etc/ssl/blackip.ustc.edu.cn.key” CA_CERT_LOCATION=”/etc/ssl/chain.crt”

#对于nginx, 需要full_chain.pem(其实这个文件就是blackip.ustc.edu.cn.crt + chain.crt),可以使用 #DOMAIN_CHAIN_LOCATION=”/etc/ssl/blackip.ustc.edu.cn.full_chain.pem”

RELOAD_CMD=”/sbin/service httpd restart”


4. 获取证书

执行命令获取证书

./getssl -d blackip.ustc.edu.cn

执行完毕后/root/.getssl/blackip.ustc.edu.cn会有四个文件,使用以下命令可以看到文件的内容:

#服务器私钥 openssl rsa -noout -text -in blackip.ustc.edu.cn.key #证书签名请求 openssl req -noout -text -in blackip.ustc.edu.cn.csr #证书 openssl x509 -in blackip.ustc.edu.cn.crt -text #证书链 openssl x509 -in chain.crt -text


5. 证书使用

编辑/etc/httpd/conf.d/ssl.conf,修改以下内容:

SSLCertificateFile /etc/ssl/blackip.ustc.edu.cn.crt SSLCertificateKeyFile /etc/ssl/blackip.ustc.edu.cn.key SSLCertificateChainFile /etc/ssl/chain.crt

执行````service httpd restart````证书生效。 

这时可以使用 https://www.ssllabs.com/ssltest/analyze.html?d=blackip.ustc.edu.cn 测试服务器证书是否工作正常。

如果是nginx,配置是:
```
server {
	listen 443 ssl;
	server_name blackip.ustc.edu.cn;
	ssl_certificate /etc/ssl/blackip.ustc.edu.cn.full_chain.pem;
	ssl_certificate_key /etc/ssl/blackip.ustc.edu.cn.key;
	location / {
		root /usr/share/nginx/html;
	}
```

6. 证书自动更新

Let's encrypt证书有效期为90天,需要在90天内更新,更新方式是执行命令
````/usr/src/getssl/getssl -d blackip.ustc.edu.cn````
即可,离失效期还有30天的证书会得到更新,并自动执行上面定义的RELOAD_CMD启动服务进程。可以使用crontab每天执行一次。

7. 一台服务器有多个域名时的证书生成

假如一台服务器同时服务多个域名,可以生成含有多个域名的证书。

如果这些域名完全是同一个网站,如blackip.ustc.edu.cn 还有个域名是www.blackip.ustc.edu.cn、blacklist.ustc.edu.cn、www.blacklist.ustc.edu.cn,他们是同一个网站,
只要在/root/.getssl/blackip.ustc.edu.cn应增加如下的配置:

SANS=”www.blackip.ustc.edu.cn,blacklist.ustc.edu.cn,www.blacklist.ustc.edu.cn” ACL=(‘/var/www/html/.well-known/acme-challenge’) USE_SINGLE_ACL=”true”


如果域名是不同的网站,如blackip.ustc.edu.cn服务器通过虚拟主机的方式需要服务noc.ustc.edu.cn live.ustc.edu.cn,它们的根目录分别是/var/www/html/noc /var/www/html/live,则
在/root/.getssl/blackip.ustc.edu.cn应增加如下的配置:

SANS=”noc.ustc.edu.cn,live.ustc.edu.cn” ACL=(‘/var/www/html/.well-known/acme-challenge’ ‘/var/www/html/noc/.well-known/acme-challenge’ ‘/var/www/html/live/.well-known/acme-challenge’) ````


欢迎 加入我们整理资料