前言
想起来上次配置nginx ssl证书还没配置完毕,不想配完了访问https还是失败,网上看了一大堆相关的配置文档,正好总结下,自己认为比较方便的配置方式
OHTTPS
网上很多证书的获取时要收费的,比较推荐的时Let's Encrypt
这个非盈利组织颁发的证书,该证书有效期90天,但是可以通过工具来自动获取更新证书,另外它是不收费,但是配置起来需要自己实现,缺点在于第一需要安装它自己的客户端来获取和更新证书,另外如果使用手动添加TXT解析记录到自己的域名下,证书更新后这块也要重新配置
无意看到网络上关于OHTTPS的文章,进了官网看了下,发现它恰好满足了我的需求,十分满意,官方文档介绍如下:
OHTTPS的证书是由Let’s Encrypt颁发,而Let’s Encrypt是通过ACME协议来自动化验证您对指定域名的控制权并向您颁发证书的。ACME协议需要您证明您对域名的控制权,一般有两种方式: 您手动添加指定的TXT解析记录至您的域名解析中,这种方式在每次更新时都需要手动操作,无法实现自动化更新和部署;或者使用自动化的方式,自动化方式需要您提供您的DNS域名解析服务商的API接口授权,这样可以实现自动化更新和部署,这也是Let’s Encrypt组织提倡的方式
也就是说他是对绝大部分域名服务都做了API接口授权,这样当证书更新时也帮你一起刷新解析记录,当然这样的服务是收费的,但是新用户注册会送1000豆,够用比较长时间了
创建HTTPS证书
1. 登陆注册
2. 创建证书
登录后点击创建证书,这里需要输入你的域名,推荐使用泛域名来创建,这样该域名下的子域名都会同样继承该证书,省了不少事
完了直接点击下一步
3. 对域名绑定解析记录
因为需要验证你对於该域名的所有权所以需要绑定指定的解析记录到该域名下,按照要求,我们登录阿里云,绑定了指定的解析记录
4. 验证记录并下载证书
点击验证解析,验证成功后点击下载证书,证书下载后留存cert.cer
和key.cer
这两个文件,用于后续web服务器的配置
至此事实上,已经获取到了相关的证书,但是我们如果想让OHTTPS帮助我们来自动进行证书的更新,还需要配置DNS授权
创建DNS授权
1、登录阿里云
阿里云登录地址:https://account.aliyun.com/login/login.htm
2、打开控制台
登录阿里云后,打开控制台,选择访问控制。控制台地址:https://homenew.console.aliyun.com/
3、打开访问控制
找到访问控制页面并打开。访问控制页面地址:https://ram.console.aliyun.com/overview
4、新建RAM用户
在访问控制页面点击[用户]菜单,新建用户。 注意新建用户时,必须勾选编程访问。
5、保存AccessKey ID和AccessKey Secret
在用户新建完成后,及时保存AccessKey ID和AccessKey Secret。
6、为用户添加权限
选择新建的ohttps-dns用户,为该用户添加[AliyunDNSFullAccess(管理云解析(DNS)的权限)]权限。
该权限仅在申请证书时证书提供商Let’sEncrypt验证域名所属权使用。
7、在OHTTPS中添加DNS授权
在第5步中保存的AccessKey ID和AccessKey Secret,即为在OHTTPS中添加[DNS授权-阿里云]所需填写的内容
配置Nginx
一般安装Nginx模块都没安装SSL模块,所以对于已经安装了的Nginx需要在原本上重新编译添加SSL模块,之前删掉了的安装目录还需要重新找回来,具体步骤如下:
#可提前查看下自己是否含有SSL模块
./nginx -V
# 进入安装目录
./configure --prefix=/usr/local/nginx --with-http_ssl_module
# 编译
make
# 复制编译出来的nginx脚本到之前的sbin目录下
# 新编译出来nginx脚本在objs目录下
# 在nginx目录下新建文件夹存放证书,将之前下载cert.cer和cert.key都放到这个目录中来
# 复制覆盖后进入nginx配置
# 添加新server模块
server {
listen 443 ssl;
server_name bowensun.top;
ssl_certificate /usr/local/nginx/cert/zoombar/cert.cer;
ssl_certificate_key /usr/local/nginx/cert/zoombar/cert.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root ****;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
# 重新启动nginx
./nginx -s reload
注意
- 千万记得检查自己的防火墙和云服务器的安全组,保证自己的443端口是开放的
- 建议配置80端口也转发到443端口这样对于域名的访问都是一致的
最后
我们可以见到当前网站是带有安全锁标志的,表明浏览器对其证书也是认可的