之前写过另外一篇文章《Windows下安装Xampp并配置SSL》,有兴趣可以看下。一直纠结我这个博客要不要上HTTPS协议,发现好多站都是用的Let’s Encrypt SSL证书,我也好奇,今天手贱配置了SSL。这个证书有效期90天,不过可以用脚本自动续期。
Let's Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它的来头不小,由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起,目的就是向网站自动签发和管理免费证书,以便加速互联网由HTTP过渡到HTTPS,目前Facebook等大公司开始加入赞助行列。Let's Encrypt已经得了 IdenTrust 的交叉签名,这意味着其证书现在已经可以被Mozilla、Google、Microsoft和Apple等主流的浏览器所信任,你只需要在Web 服务器证书链中配置交叉签名,浏览器客户端会自动处理好其它的一切,Let's Encrypt安装简单,未来大规模采用可能性非常大。
下面给大家说说怎么配置:
先说下网站环境
System environment: Centos 7
Nginx version: nginx/1.4.7
本人懒省事,用的阿里云一键安装包sh-1.5.5
下面进入正题
1、配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块–with-http_ssl_module和–with-http_gzip_static_module,命令查看是否有相应模块,没有需要重新编译,默认一键安装包都带了。
nginx -V
2、防火墙开启https协议默认端口443
# vi /etc/sysconfig/iptables #编辑防火墙配置文件,添加以下代码
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
:wq! #保存退出
service iptables restart(/bin/systemctl restart iptables.service) #重启防火墙
3、利用脚本快速获取Let’s Encrypt SSL证书
# mkdir /alidata/server/nginx/certs/ //创建certs目录
# cd /alidata/server/nginx/certs/ //进入certs目录
下载脚本文件
wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.conf
wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.sh
给予脚本755权限
chmod +x letsencrypt.sh
4、配置letsencrypt.conf文件
vi letsencrypt.conf
# only modify the values, key files will be generated automaticly.
ACCOUNT_KEY="letsencrypt-account.key"
DOMAIN_KEY="lirongyao.com.key"
DOMAIN_DIR="/alidata/www/site"
DOMAINS="DNS:lirongyao.com"
#ECC=TRUE
#LIGHTTPD=TRUE
:wq! 保存
5、执行脚本生成需要的key文件
# ./letsencrypt.sh letsencrypt.conf
Generate account key...
Generating RSA private key, 4096 bit long modulus
................++
.......................................................................................................................................................................................................................................................................................................++
e is 65537 (0x10001)
Generate domain key...
Generating RSA private key, 2048 bit long modulus
................................................................+++
.......................+++
e is 65537 (0x10001)
Generate CSR...lirongyao.csr
Parsing account key...
Parsing CSR...
Registering account...
Registered!
Verifying lirongyao.com...
lirongyao.com verified!
Signing certificate...
Certificate signed!
New cert: lirongyao.chained.crt has been generated //看到这个说明获取证书成功
如果出现如下错误信息:
错误1
Traceback (most recent call last):
File “/tmp/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
执行以下命令:
yum install python-argparse
错误2
Traceback (most recent call last):
File “setup.py“, line 3, in <module>
from setuptools import setup, find_packages ImportError: No module named setuptools
安装setuptools
wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz tar zxvf setuptools-0.6c11.tar.gz cd setuptools-0.6c11 python setup.py build python setup.py install
错误3
ValueError: Wrote file to /alidata/www/boke/.well-known/acme-challenge/23YlOKT25QPM0NtJL-tHkWOxEXja_aVUTAqKXwlp66g, but couldn’t download http://lirongyao.com/.well-known/acme-challenge/23YlOKT25QPM0NtJL-tHkWOxEXja_aVUTAqKXwlp66g
原因是国内DNS解析问题,还有没有目录没有权限写入等提示
完成后会生成以下几个文件
lets-encrypt-x3-cross-signed.pem
letsencrypt-account.key
lirongyao.chained.crt
lirongyao.com.key
lirongyao.crt
lirongyao.csr
6、打开网站配置文件,修改和添加红色部分
# vi /alidata/server/nginx/conf/vhosts/rongyao.conf
server {
listen 443;
ssl on;
ssl_certificate /alidata/server/nginx/certs/lirongyao.chained.crt;
ssl_certificate_key /alidata/server/nginx/certs/lirongyao.com.key;
server_name lirongyao.com;
index index.html index.htm index.php;
root /alidata/www/site;
...省略部分...
}
server {
listen 80;
rewrite ^(.*) https://lirongyao.com$1 permanent; //强制80转向443
}
:wq! 保存
#service nginx restart 重启NGINX服务
至此HTTPS协议配置完成。
7、每月1号定时自动续期,因为这个证书只有90天有效期。
0 0 1 * * /alidata/server/nginx/certs/letsencrypt.sh /alidata/server/nginx/certs/letsencrypt.conf >> /alidata/log/lets-encrypt.log 2>&1
如何配置定时任务参考这篇文章《Linux定时重启系统或服务》
本文链接地址: 如何为网站配置(Let’s Encrypt)HTTPS协议