免费https证书-Let’s Encrypt证书申请并自动更新

作者: 阿伟 分类: linux 发布时间: 2016-07-08 17:10 ė 浏览数 6 2条评论

http是明文通讯,十分的不安全。而且有可能被无良运营商劫持。

https是在http的基础上增加了SSL加密。使得通讯变的安全。

Let’s Encrypt 是由互联网安全研究小组(ISRG,一个公益组织)提供的服务。
主要赞助商包括电子前哨基金会,Mozilla基金会,Akamai以及思科。
2015年4月9日,ISRG与Linux基金会宣布合作。

Let’s Encrypt可免费为我们的域名颁发为期90天的https证书。到期后可以重新申请颁发。

Let’s Encrypt本身有自动话颁发工具“letsencrypt-auto”
具体可以到“https://github.com/letsencrypt/letsencrypt”查看

由于“letsencrypt-auto”不是很好用。所以本文主要介绍的是另外一种方案“acme-tiny”

以下是在centos6.5-x64    Python2.6环境下。

建立工作文件夹

mkdir /usr/local/letsencrypt/
mkdir  -p /home/www/ssl/

生成账户私钥

openssl genrsa 4096 >/home/www/ssl/account.key

生成域名私钥(”xx.com”替换成你自己的域名)

openssl genrsa 4096 >/home/www/ssl/xx.com.key

生成CSR 对于单个域名,执行下面命令 (”xx.com”替换成你自己的域名)

openssl req -new -sha256 -key /home/www/ssl/xx.com.key -subj "/CN=xx.com" > /home/www/ssl/xx.com.csr

对于多域名,执行下面命令(”xx.com”,”yy.com”替换成你自己的域名)

openssl req -new -sha256 \
-key /home/www/ssl/xx.com.key \
-subj "/C=CN/ST=GuangDong/L=ShenZhen/O=EDA/OU=Devops/CN=xx.com" \
-reqexts SAN \
-config <(cat /etc/pki/tls/openssl.cnf \
<(printf "[SAN]\nsubjectAltName=DNS:xx.com,DNS:yy.com")) \
-out /home/www/ssl/xx.com.csr

新建认证用的文件夹。

mkdir -p /home/www/freessl

配置nginx:

在server字段新建一个location

location /.well-known/acme-challenge/ {

alias /home/www/freessl/;

try_files $uri =404;

}
验证域名所有者,就是通过在 /.well-known/acme-challenge/里写文件,然后通过公网来访问,看能不能访问到来判断的。

记得修改/home/www文件夹所有者为nginx的运行用户。

chown -R nginx:nginx /home/www

切换到工作目录

cd /usr/local/letsencrypt/

克隆letsencrypt项目

git clone https://github.com/diafygi/acme-tiny

然后执行

python2.6 /usr/local/letsencrypt/acme-tiny/acme_tiny.py --account-key /home/www/ssl/account.key --csr /home/www/ssl/xx.com.csr --acme-dir /home/www/freessl/ > /home/www/ssl/xx.com.crt

即可生成证书。

最终证书和key路径为:

crt文件:/home/www/ssl/xx.com.crt

key文件:/home/www/ssl/xx.com.key

由于证书有效期为90天。可以写个脚本。定时每月1号执行一次。

vim /usr/local/sh/upssl.sh
#!/bin/bash
#删除旧的证书文件
rm -rf /tmp/xx.com.crt
rm -rf /tmp/intermediate.pem
mv /usr/local/letsencrypt/acme-tiny/xx.com.crt /usr/local/letsencrypt/acme-tiny/xx.com.crt.bak
#运行证书申请
/usr/bin/usr/bin/python2.6 /usr/local/letsencrypt/acme-tiny/acme_tiny.py --account-key /home/www/ssl/account.key --csr /home/www/ssl/san.csr --acme-dir /home/www/freessl/ > /tmp/san.crt
#下载中间证书
wget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > /tmp/intermediate.pem
#合并证书
cat /tmp/xx.com.crt /tmp/intermediate.pem > /home/www/ssl/xx.com.crt
#重启nginx
/sbin/service nginx restart
crontab -e
0 0 1 * * /scripts/upssl.sh

如果遇到错误:

Traceback (most recent call last):
File “/usr/local/letsencrypt/acme-tiny/acme_tiny.py”, line 2, in <module>
import argparse, subprocess, json, os, sys, base64, binascii, time, hashlib, re, copy, textwrap, logging
ImportError: No module named argparse

是因为缺少python-argparse 执行

yum install python-argparse
知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

本文出自阿伟的博客,转载时请注明出处及相应链接。

本文永久链接: https://blog.awei.me/lets-encrypt-ssl-autoupdate/

0

2条评论

  1. 雅思学习 2016 年 10 月 1 日 上午 9:39 回复

    暂时还没有考虑HTTPS,相比于HTTP,HTTPS的优势只是安全吗?

    1. 阿伟 2016 年 10 月 19 日 上午 10:51 回复

      除了安全、http2目前主流浏览器只支持https形式的http2。这也是上https的一个主要推动力

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Ɣ回顶部