这篇文章讲述用letsencrypt在Linux centos7上生成ssl证书的操作流程。
1、安装letsencrypt,不知道git是什么的,自行阅读课外书,安装等待时间有点漫长。。。
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help
2、生成私钥
openssl genrsa 4096 > 2pea.com.key
3、生成CSR(Certificate Signing Reqeust),后面要通过该文件,向 Let’s Encrypt 请求证书
openssl req -new -sha256 -key 2pea.com.key -out 2pea.com.csr
回车后,让输入国家(中国用 CN )省(BeiJing)市(BeiJing),公司,部门 ,域名 等,域名为要进做https的域名比如博主用的是www.2pea.com,域名必须填写,其他可为空
4、向letsencrypt服务器发起获取证书的请求
./letsencrypt-auto certonly --authenticator manual --server https://acme-v01.api.letsencrypt.org/directory --text --email admin@2pea.com --csr 2pea.com.csr
输入完Y,在出现”Press ENTER to continue“时,不要动,进行下面第五步操作。(ssh远程登录,重新打开一个新窗口进行操作)
5、验证证书对应域名的所有权
官方给出了两种方法,本文只给出这一种方法。根据以下提供的提示信息,需要认证者在服务器上实现以下功能(下文中“*****”部分每次执行不一样),外网采用curl 请求该地址:http://www.2pea.com/.well-known/acme-challenge/*****1,要能够获得*****2的输出内容。
Make sure your web server displays the following content at
http://www.2pea.com/.well-known/acme-challenge/*****1 before continuing:
*****2
6、curl上文给出的地址,返回的结果确认和*****2一样,则回到第4步的操作窗口按回车键,证书创建成功,执行ls查看命令,发现返回3个pem文件其中:
0000_cert.pem 文件就是证书文件
7、nginx进行一下改进:
server
{
listen 80;
server_name www.2pea.com;
rewrite ^(.*)$ https://$host$1 permanent; // 将所有请求指向https
}
server
{
listen 443;
#listen 80;
server_name www.2pea.com;
ssl on;
ssl_certificate /dir/0000_cert.pem;
ssl_certificate_key /dir/2pea.com.key;
ssl_session_timeout 10m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC$+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
…
}
秘钥和证书地址自己定义
Let’s Encrypt有效期只有3个月,作为懒人,肯定不会每间隔三个月上服务器上重新生成一遍证书的,还好Let’s Encrypt提供了自动更新证书的功能:
/root/letsencrypt/letsencrypt-auto renew
将该命令写入脚本然后添加自动任务,以后就不需要手动更新了。需要注意的是,执行该命令前需要关闭nginx,所以脚本内容可参考一下代码
service nginx stop
/root/letsencrypt/letsencrypt-auto renew
service nginx start
主要参考文章地址:http://www.cnblogs.com/dudu/p/letsencrypt-manual-https-cert.html,http://www.jb51.net/article/70640.htm