CentOS7+nginx配置免费ssl网站证书
2018-07-09
一个小博客也没啥重要内容,本来不想搞证书,最近竟然发现页面有被劫持篡改的情况,折腾一下吧
1. 开放服务器443 端口
https
会使用443端口,所以无论是centos的防火墙,还是云主机提供商的防火墙,都必须开放443端口
2. 暂时停掉nginx服务
# systemctl stop nginx
后面第3步操作会临时占用80端口,如果nginx等其他服务占用该端口,将导致无法生成证书
猜测下面工具的实现过程是用-d
的域名,临时启动了一个web服务器用于向机构申请证书
3. 申请证书
let’s encrypt
是一家提供免费证书的服务商,可以通过其提供的脚本,快速生成证书,把email
和-d
参数改成你自己的邮箱和域名信息
# yum update -y nss curl libcurl
# git clone https://github.com/letsencrypt/letsencrypt
# cd letsencrypt/
# ./letsencrypt-auto certonly --standalone --email xxx@163.com -d maming.org -d www.maming.org
成功的话,会在/etc/letsencrypt/live/
生成对应的key,例如:
# tree /etc/letsencrypt/live/
/etc/letsencrypt/live/
└── maming.org
├── cert.pem -> ../../archive/maming.org/cert1.pem
├── chain.pem -> ../../archive/maming.org/chain1.pem
├── fullchain.pem -> ../../archive/maming.org/fullchain1.pem
├── privkey.pem -> ../../archive/maming.org/privkey1.pem
└── README
1 directory, 5 files
到此证书已经申请成功
4. nginx配置该证书
在你原有配置里面加入ssl
开头的那些项目
后面加了一个80的跳转,为了当用户使用http://
访问时,可以自动跳转到https://
# cat /etc/nginx/conf.d/maming.org.conf
server {
listen 443 ssl; # 此处需要改成443,且加上ssl
server_name maming.org www.maming.org;
ssl on;
ssl_certificate /etc/letsencrypt/live/maming.org/fullchain.pem; # 此处改成你上面生成的key文件地址
ssl_certificate_key /etc/letsencrypt/live/maming.org/privkey.pem; # 此处改成你上面生成的key文件地址
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
location / {
index index.html;
}
}
server { # 额外增加一个80的301跳转
listen 80;
server_name maming.org www.maming.org;
return 301 https://$server_name$request_uri;
}
重启nginx
# systemctl restart nginx
到此证书已经导入成功了,通过浏览器访问,浏览器的地址栏应该已经显示绿锁+https的显示了
5. 证书续期
该免费证书有效期为3个月,可以通过下面的命令续期,你可以把它加入到crontab
里面自动执行
# ./certbot-auto certonly --renew-by-default --email xxx@163.com -d maming.org -d www.maming.org
6. 其他问题
现象: 浏览器地址栏没有绿锁,点开感叹号后,显示的信息是您与此网站之间建立的链接并非完全安全
解决: 检查你网站的html
代码,如果有除<a href>
标签以外的地方引用了http://
的资源,就会标示为非完全安全
比如引用的任何.js/.css/.img
等,把他们找出来,想办法换成https://