HTTPS
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。
CentOS7 + nginx安装和使用Let’s Encrypt的完整过程
必要条件
- 拥有一个域名,例: www.195440.com
- 在域名服务器创建一条A记录,指向主机的公网IP地址( 也就是说此方法不适合内网 )
- 搭建一个nginx可访问到的站点
- 内网搭建测试https服务器可在外网申请认证
- 证书key拿回内网服务器并将认证域名指向内网ip即可
申请Let’sEncrypt证书
安装certbot工具
# 此为软件包扩展, 非必须执行
yum install -y epel-release
yum install -y certbot
使用certbot命令申请证书
# 使用方法:certbot certonly --webroot -w [Web站点目录] -d [站点域名] -m [联系人email地址] --agree-tos
certbot certonly --webroot -w /usr/share/nginx/html/ -d www.195440.com -m 195440@qq.com --agree-tos
注:联系人email地址要填写真实有效的,letsencrypt会在证书在过期以前发送预告的通知邮件。 申请成功后,会显示以下Congratulations信息
证书的保存位置在:
/etc/letsencrypt/live/jd.195440.com/
用户证书 cert.pem 中间证书 chain.pem 证书链, chain.pem + cert.pem fullchain.pem 证书私钥 privkey.pem
查看证书有效期的命令
openssl x509 -noout -dates -in /etc/letsencrypt/live/jd.195440.com/cert.pem
设置定时任务自动更新证书
# 更新证书 certbot renew --dry-run
# 如果不需要返回的信息,可以用静默方式 certbot renew --quiet
注意:更新证书时候网站必须是能访问到的
# 可以使用crontab定时更新,例如:
# 每月1号5时执行执行一次更新,并重启nginx服务器
00 05 01 * * /usr/bin/certbot renew --quiet && /bin/systemctl restart nginx
Nginx https配置
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
# letsencrypt生成的文件
ssl_certificate /etc/letsencrypt/live/jd.195440.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jd.195440.com/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
location / {
proxy_pass http://www.qq.com; # 测试转发
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
测试转发