Let's Encrypt免费证书安装方法

2016-03-19 20:33:49

[服务器开发] , ,

 

考虑到网站上面一堆域名证书的续费成本,还是花了几个小时将给服务器装上了Let's Encrypt 的免费证书。其实还算挺简单的。总体来说,LE的证书还是挺可靠的,支持着有EFF、Mozilla等大头,虽然是2015年末才正式推出服务,但是一年多以前我就早已听到,当时好像还引发了很强烈的反响。

 

 

基本原理

https://letsencrypt.org/how-it-works/

简要的说,签发机构通过可信的DNS找到你的服务器,确认上面有验证文件证明你是这个网站的所有者。为了确保安全性,与目前很多免费一样,仅提供短期(3个月)的验证服务。主要问题还是如何设置长期可维护的自动更新脚本了。更新证书的方法是 ACME (已经提交ietf草案 https://tools.ietf.org/html/draft-barnes-acme-01)

 

 

 

安装方法

我们需要两个private key,一个是用于和签发机构交流用的,另外一个是给网站用的正常的证书。

openssl genrsa 4096 > account.key
openssl genrsa 4096 > domains.key

 

我没有用官方的略显臃肿的程序,直接用一个短小精悍的python脚本,只有两百余行,个人可以自己将程序看完,了解这个程序是干什么的。官方文档上也是这样写的,程序不能太长,必须让大家都看清写的是什么。

wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py

 

接下来就要生成证书申请文件了,可以自己写一个openssl的配置文件,以免以后添加域名的时候需要麻烦地更改命令行。另外letsencrypt可以支持一个证书多个域名,但是不支持泛域名(wildcard),于是需要大家把域名都写在一起。配置文件的写法可以参考下面的文件。

[ req ]
default_bits        = 4096
default_keyfile     = /文件位置/domains.key
distinguished_name  = req_distinguished_name
req_extensions     = req_ext # The extentions to add to the self signed cert

[ req_distinguished_name ]
countryName           = Country Name (2 letter code)
countryName_default   = 国家代号
stateOrProvinceName   = State or Province Name (full name)
stateOrProvinceName_default = 省份
localityName          = Locality Name (eg, city)
localityName_default  = 城市
organizationName          = Organization Name (eg, company)
organizationName_default  = 组织名称
commonName            = Common Name (eg, YOUR name)
commonName_max        = 名称

[ req_ext ]
subjectAltName          = @alt_names

[alt_names]
DNS.1   = 域名1.com
DNS.2   = 域名2.com
DNS.3   = 域名3.com

 

生存csr文件可用命令

openssl req -new -sha256 -key /文件位置/privatekey.key -out /文件位置/requests.csr -config /文件位置/settings.conf

 

这时候需要用nginx给需要验证的服务器添加一个目录以便存放验证文件,建立成功后,建议弄一个文件然后访问网站看看能不能成功下载。

    location ^~ /.well-known/acme-challenge/ {
        alias /var/目录/challenges/;
        try_files $uri =404;
    }

 

然后就用csr去请求证书,第二行是将官方Let's Encrypt Authority X1 证书(链)添加到请求到的证书的后面,然后重启nginx的服务

python acme_tiny.py --account-key /文件位置/account.key --csr /文件位置/requests.csr --acme-dir /var/目录/challenges/ > /文件位置/publickey.crt
cat /文件位置/publickey.leix1.crt >> /文件位置/publickey.crt
systemctl restart nginx

 

值得注意的是推荐使用  Let's Encrypt Authority X1 -> DST Root CA X3的证书链,否则在部分设备可能不支持

 

-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/MSQwIgYDVQQK
ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
DTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0NlowSjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxl
dCdzIEVuY3J5cHQxIzAhBgNVBAMTGkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4
S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13
EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKH
y9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2P
MTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQAB
o4IBfTCCAXkwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEE
czBxMDIGCCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNvbTA7
BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9kc3Ryb290Y2F4My5w
N2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAwVAYDVR0gBE0wSzAIBgZngQwBAgEw
PwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcCARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNy
eXB0Lm9yZzA8BgNVHR8ENTAzMDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9P
VENBWDNDUkwuY3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJouM2VcGfl96S8
TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/wApIvJSwtmVi4MFU5aMqrSDE
6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwuX4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPM
TZ+sOPAveyxindmjkW8lGy+QsRlGPfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M
+X+Q7UNKEkROb3N6KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----

 

 

定期执行方法

其实了解怎么安装也就不难弄了,只需要在crontab 里面挂一个脚本即可。主要需要做:

  1. 重新请求一个证书
  2. 将Let's Encrypt Authority X1 证书贴到收到的证书的后面
  3. 重启nginx

 

0       0       15      *       *       root    /文件路径/get_certificate.sh       > /dev/null 2>&1

 

 

 

其他注意事项

  • 验证的时候会首先验证80端口上面的页面,可以转跳到443页面,也就是说可以在不停机的情况下验证。
  • 所有成功分发的证书都可以在 https://crt.sh/ 查找到
  • 不可以频繁请求证书,网站对此有限制,可以使用测试的服务器进行尝试
  • 可以用https://www.ssllabs.com/ssltest/analyze.html 看看你网站证书的安全状态

 

 

 

 


 

以下内容是给自己看的

  1. 修改 settings.conf
  2. 运行 get_requestfile.sh
  3. 复制request-日期.csr 到 request.csr
  4. 运行 get_certificate.sh
  5. 运行 active.sh

 

这篇博文发表在 服务器开发 目录下,标签为 , ,
版权所有,请勿转载。如需引用,请使用链接:https://note.masterchan.me/?p=1055
 

您的邮箱地址不会被公开,评论使用Gravatar头像。
Your email address will not be published. This blog is using Gravatar.

正在提交评论...
正在为您准备评论控件