网站快速开启https

知易行难啊,老早就知道https了,网上有很多教程,可是自己弄的时候还是费了好大的劲。为了以后更容易点,所以以记之。

这里使用的是免费的Let's Encrypt证书,这个证书使用期限只有90天,可以设置自动续。

获取免费证书

1 安装Cerbot客户端

yum install certbot

2 获取证书

由于要用到80和443端口,所以服务器要开放这两个端口,并保证端口号没有被占用。

防火墙的设置

CentOS 7.0默认使用的是firewall作为防火墙,使用iptables必须重新设置一下
1)直接关闭防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
2)设置 iptables service
yum -y install iptables-services
如果要修改防火墙配置,增加防火墙端口80和443
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






已有 1 条评论
发表新评论