2024年12月4日 星期三
通知

如何为网站配置(Let’s Encrypt)HTTPS协议

之前写过另外一篇文章《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协议

关于 荣耀博客

好记性,不如烂笔头。

发表回复