网站快速开启https
知易行难啊,老早就知道https了,网上有很多教程,可是自己弄的时候还是费了好大的劲。为了以后更容易点,所以以记之。
这里使用的是免费的Let's Encrypt证书,这个证书使用期限只有90天,可以设置自动续。
获取免费证书
1 安装Cerbot客户端
yum install certbot
2 获取证书
由于要用到80和443端口,所以服务器要开放这两个端口,并保证端口号没有被占用。
防火墙的设置
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
yum -y install iptables-services
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
systemctl restart iptables.service #重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动
3)先停止占用端口的服务,证书完成后在启用。
certbot certonly --standalone -d datayang.com -d www.datayang.com
证书生成完毕后,我们可以在 /etc/letsencrypt/live/ 目录下看到对应域名的文件夹,里面存放了指向证书的一些快捷方式。
这时候我们的第一生成证书已经完成了,接下来就是配置我们的web服务器,启用HTTPS。
nginx 配置启用https
加强https安全性
在目录/etc/ssl/certs 运行一下代码生成dhparam.pem文件
openssl dhparam -out dhparam.pem 2048
如果服务器够强大,可以使用更为复杂的4096位进行加密。
在nginx新增一个web.conf
server { listen 443 ssl http2; server_name datayang.com www.datayang.com;#配置共享会话缓存大小,视站点访问情况设定 ssl_session_cache shared:SSL:10m; #设置长连接 keepalive_timeout 70; #HSTS策略 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; ssl on; #证书文件 ssl_certificate /etc/letsencrypt/live/datayang.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/datayang.com/privkey.pem; #优先采取服务器算法 ssl_prefer_server_ciphers on; #使用DH文件 ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #定义算法 ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:!ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:HIGH:!RC4-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!EDH:!kEDH:!PSK:!SRP:!kECDH; #配置会话超时时间 ssl_session_timeout 10m; #减少点击劫持 add_header X-Frame-Options DENY; #禁止服务器自动解析资源类型 add_header X-Content-Type-Options nosniff; #防XSS攻 add_header X-Xss-Protection 1; #应用配置 location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8585; client_max_body_size 10m; }
}
自动更新ssl证书
自动更新先最后先关闭nginx因为需要443端口,以免占用。
certbot renew --dry-run
在 etc目录建一个新文件certbot-auto-renew-cron, 这个是一个 cron 计划,这段内容的意思就是 每隔 两个月的 凌晨 2:15 执行 更新操作。
15 2 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
--pre-hook 这个参数表示执行更新操作之前要做的事情,因为我有 --standalone 模式的证书,所以需要 停止 nginx 服务,解除端口占用。
--post-hook 这个参数表示执行更新操作完成后要做的事情,这里就恢复 nginx 服务的启用
最后我们用 crontab 来启动这个定时任务
crontab /etc/certbot-auto-renew-cron
查看开启的任务
crontab -l
这样就ok了,对了如果没有安装 crontab,可以按一下命令安装
yum install crontabs
补充nginx强制使用https访问
第一次直接访问域名时可能跳转不了https,可以在写给default-web.conf
server {
listen 80;
server_name datayang.com www.datayang.com;location / { #index.html放在虚拟主机监听的根目录下 root /usr/local/webapp/; } #将404的页面重定向到https的首页 error_page 404 https://datayang.com/;
}
这个目录里面写一个index.html
<html>
<meta http-equiv="refresh" content="0;url=https://datayang.com/">
</html>
重启nginx
service nginx restart
参考:
https://my.oschina.net/diamondfsd/blog/829503
https://juejin.im/entry/57ba9a6b2e958a006939083c
https://blog.itnmg.net/letsencrypt-ssl/
http://blog.csdn.net/wzy_1988/article/details/8549290
最后更新于 2017-08-24 15:32:20 并被添加「」标签,已有 1776 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处