Letsencrypt安装

原创 · 金汉江 · 2018-01-08

一 检查服务器Python版本是否>2.7

由于CentOS6.5 自带python版本为2.6.6,实际中使用的大多为2.7.x版本。于是手动升级一下,做个记念。

#查看python的版本
python  -V
Python 2.6.6

#1.下载Python-2.7.6
wget https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz

#2.解压
tar -zxvf Python-2.7.6.tgz

#3.更改工作目录
cd Python-2.7.6

#4.安装
./configure
make all
make install
make clean
make distclean

#5.查看版本信息
/usr/local/bin/python2.7 -V

#6.建立软连接,使系统默认的 python指向 python2.7
mv /usr/bin/python /usr/bin/python2.6.6
ln -s /usr/local/bin/python2.7 /usr/bin/python

#7.重新检验Python 版本
python -V
2.7.6

解决系统 Python 软链接指向 Python2.7 版本后,因为yum是不兼容 Python 2.7的,所以yum不能正常工作,我们需要指定 yum 的Python版本

vi /usr/bin/yum

将文件头部的
#!/usr/bin/python
改成
#!/usr/bin/python2.6.6

配置letsencrypt

1 下载到配置

wget https://raw.githubusercontent.com/carpliyz/Lets-encrypt/master/letsencrypt.conf
wget https://raw.githubusercontent.com/carpliyz/Lets-encrypt/master/letsencrypt.sh
chmod +x letsencrypt.sh

2 配置文件

只需要修改 DOMAIN_KEY DOMAIN_DIR DOMAINS 为你自己的信息

ACCOUNT_KEY="letsencrypt-account.key"
DOMAIN_KEY="example.com.key"
DOMAIN_DIR="/var/www/example.com"
DOMAINS="DNS:example.com,DNS:whatever.example.com"
#ECC=TRUE
#LIGHTTPD=TRUE

执行过程中会自动生成需要的 key 文件。其中 ACCOUNT_KEY 为账户密钥, DOMAIN_KEY 为域名私钥, DOMAIN_DIR 为域名指向的目录,DOMAINS 为要签的域名列表, 需要 ECC 证书时取消 #ECC=TRUE 的注释,需要为 lighttpd 生成 pem 文件时,取消 #LIGHTTPD=TRUE 的注释。

例如:

ACCOUNT_KEY="z7zba.account.crt"
DOMAIN_KEY="z7zba.key"
DOMAIN_DIR="/usr/local/nginx/conf/crt"
DOMAINS="DNS:z7zba.com,DNS:www.z7zba.com"

3 运行脚本

./letsencrypt.sh letsencrypt.conf

注意

需要已经绑定域名到 /var/www/example.com 目录,即通过 http://example.com http://whatever.example.com 可以访问到 /var/www/example.com 目录,用于域名的验证

将会生成如下几个文件

lets-encrypt-x1-cross-signed.pem
example.chained.crt          # 即网上搜索教程里常见的 fullchain.pem
example.com.key              # 即网上搜索教程里常见的 privkey.pem 
example.crt
example.csr

4 在 nginx 里添加 ssl 相关的配置

server{
        listen 443 ssl;
        server_name  www.example.com;
        index index.html index.htm index.php;
        root /data0/website/example;

    ssl on;
    ssl_certificate /usr/local/nginx/conf/crt/example.chained.crt;
    ssl_certificate_key /usr/local/nginx/conf/crt/example.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
    ssl_prefer_server_ciphers on;

    location ~ \.php$
        {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

    location /.well-known/ {
                alias conf/crt/.well-known/;
        }
}

5 cron 定时任务

每个月自动更新一次证书,可以在脚本最后加入 service nginx reload等重新加载服务。

0 0 1 * * /etc/nginx/certs/letsencrypt.sh /etc/nginx/certs/letsencrypt.conf >> /var/log/lets-encrypt.log 2>&1

6 检查ssl是否正常
https://www.sslshopper.com/ssl-checker.html