事件背景
近期捡漏了一个.cn的域名,于是就部署了一套静态页面到服务器上,绑定域名/nginx反向代理。一顿操作猛如虎,然后使用www.yuming.cn访问。欢迎进入新X京娱乐城,?????一定是看错了,重新刷新一下才进入到自己的页面。之后还会偶现跳到娱乐城的页面,然后看到浏览器地址栏那里写了不安全
三个字。突然想到了什么,所以就开始了
准备工作
一个已备案域名
一台公网可访问服务器
一个web服务器(nginx或者apache)
SSL证书申请
之前看了很多都说阿里云和腾讯云都可以免费申请SSL证书,但是楼主在阿里云没有找到免费的。使用的是腾讯云的免费证书
申请步骤:
- 登陆腾讯云账号(首次登陆需要做实名认证)
- 控制台–>云产品–>域名与网站–>SSL证书
- 申请免费证书–>免费证书–>填写必要信息
- 域名有效性验证:在申请后会出现验证域名有效性的一组DNS,将此DNS在自己的域名供应商系统中配置到自己的域名解析中,然后提交验证,验证通过后,待证书服务商验证即可(此时需要等待,验证通过会有短信提示)
WEB服务器配置
申请到证书后
点击下载,解压文件后会有三个文件
因为我这里用的是Nginx服务器,所以打开Nginx的文件夹。.csr
结尾的这个文件在我们的部署过程中是不用的。
本文仅针对NGINX安装流程进行说明,其他web服务器的安装请见:https://cloud.tencent.com/document/product/400/4143
腾讯的文档
将下载下来的ssl_certificate 1_www.xxx.cn_bundle.crt
和 ssl_certificate_key 2_www.xxx.cn.key
上传到nginx的conf目录
/usr/local/nginx/conf
不同的安装方式对应的conf目录不同。
我这边的目录直接就是在/etc/nginx
Nginx配置
因为服务器内部对应的项目暴漏的是端口是8082
未配置https时的nginx策略为:
# server {
# listen 80;
# server_name www.xxx.cn;
# location / {
# proxy_pass http://172.18.19.189:8082;
# proxy_set_header X-Forwarded-Host $host;
# proxy_set_header X-Forwarded-Server $host;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_connect_timeout 600;
# proxy_read_timeout 600;
# }
# }
改用https后的nginx配置
server {
#SSL 访问端口号为 443
listen 443;
ssl on;
#填写绑定证书的域名
server_name www.xxx.cn;
#证书文件名称
ssl_certificate 1_www.xxx.cn_bundle.crt;
#私钥文件名称
ssl_certificate_key 2_www.xxx.cn.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
proxy_pass http://172.18.19.189:8082;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
配置好以上信息之后执行service nginx reload
即可生效
此处需要注:https走的时443端口,需要确保服务器已经放开443端口,云主机需要确定443端口已经添加到安全组
如果配置后不生效,需要检查一下自己Nginx的版本,使用命令nginx -v
如果nginx的版本高于nginx/1.15.0,配置中的
listen 443;
ssl on;
这两行需要改成
listen 443 ssl;
修改后重启nginx即可
效果
- http访问时
- https访问时
结束语
以前公司针对网络安全做https访问时,全程由运维操作,自己没配置过,感觉可能很复杂,现在实操一次,感觉其实并不难,手动微笑。