收费证书是真的(赫赫)贵,搭建https服务每年不花个千把块还弄不来,So跟博主一样缺钱的请看过来,教你如何申请免费证书,并基于Nginx搭建https服务。
转载请注明出处:https://blog.lzoro.com,谢谢~
一、环境说明
阿里云ECS云服务器(centOS)一台(我真的不是打广告的)
lzoro.com域名一个
Nginx-1.9.9
浏览器
几个前提条件必须要满足,首先你要有自己的域名/服务器,如果没有的话,建议先准备一下。
二、步骤
1、申请证书
这里格子有一个免费申请证书的网站https://freessl.org/推荐一下,个人觉得挺好用的。
话不多说,撸起袖子。
首先,登录网站后,请先注册一个账号,目前注册十分简单,只需要邮箱即可。
注册完毕请先登录邮箱验证,然后登录freessl.org,就可以开始申请免费证书了。
填写域名
选择参数,这里格子从freessl.org摘录说明如下
关于域名验证的说明
CA 需要对您是否拥有该域名进行验证,这样才能给您颁发证书。这里有多种验证方式,您可以采用对您较为方便的方式进行。在进行下一步的同时,你将同意 Lets Encrypt service agreement 或 TrustAsia。如果您的网站有防火墙,请对 66.133.109.36 开放。如果您收到 504 网关超时,无法连接等其它错误, 请刷新页面重试;如果您有自己的CSR文件,可上传CSR文件之后进行手动验证。
文件验证(HTTP)
CA 将通过访问特定 URL 地址来验证您是否有改域名的所有权。因此,您需要下载给顶的验证文件,并上传到您的服务器。
DNS 验证
CA 将通过查询 DNS 的 TXT 记录来确定您对该域名的所有权。您只需要在域名管理平台将生成的 TXT 记录名与记录值添加到该域名下,等待大约 1 分钟即可验证成功。
FreeSSL借助 Trustasia 和 Let's Encrypt 提供的 API,以及使用 Web Cryptography API ,完全使用浏览器生成证书,期间不存在数据传输,如果浏览器不支持 Web Cryptography API,那么我们会从后端服务器生成证书,所以在此强烈建议您使用支持 Web Cryptography API 的浏览器。
记录验证DNS的相关值
添加解析
生成并下载证书
至此,证书的申请就大功告成了。
注意
私钥请妥善保存,freessl控制台不会帮你存在私钥,除非你自己上传。
2、安装配置证书
证书申请完毕后不安装你留着当传家宝吗。
本篇博客是基于Nginx进行证书配置,其他诸如IIS、Apache等其他服务器不在本文讨论范围,请移步搜索引擎~
所以,你需要一台装有Nginx的服务器,真巧,我有。
先把证书更名,并上传到服务器,格子这边存放路径如下
/usr/local/nginx/cert/lzoro.pem
/usr/local/nginx/cert/lzoro.key
进入配置文件所在目录
cd /usr/local/nginx/conf
编辑配置文件
vim nginx.conf
配置如下
server {
listen 443 ssl;
server_name blog.lzoro.com;
ssl on;
ssl_certificate ../cert/lzoro.pem;
ssl_certificate_key ../cert/lzoro.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
# 下面root路径格子这边隐去了,各位需自行设置
root ...;
location /{
index index.html index.htm;
}
access_log /usr/local/nginx-1.9.9/logs/blog-https.access.log;
}
重新载入nginx
./sbin/nginx -s reload
# 如果上面的命令不起作用,也可以重启
./sbin/nginx -s stop
./sbin/nginx
当然,到这一步的话,https的配置就算是完成了,不过当你打开浏览器的美滋滋地敲入https://blog.lzoro.com的时候,可能会发现无法访问,先别着急心里奔腾某个神秘生物,你需要几个步骤来处理。
如果你用的是云服务器的话,无论是阿里云或者腾讯云亦或其他云,这些云服务器厂商基本上都会提供安全组配置的,所以你需要到你的云服务器控制台,针对该服务器进行安全组配置(说明白些,就是开放端口),配置完安全组之后,再访问一次。
what!还不行,我真的没逗你。还是上面那个根本原因,你配置了安全组之后,依旧无法访问的话,可能原因是你服务器也开启了防火墙。
判断防火墙状态
systemctl status firewalld
没错,出现下图状态证明你是开启了防火墙的,挺好,有安全意识。
开放对应端口并重载防火墙
firewall-cmd --zone=public --add-port=443/tcp --permanent
systemctrl reload firewalld
再来一次,https://blog.lzoro.com,是不是可以了,收工。
什么,还不行。那你可能是遇到了格子没出现的问题,当然你可以搜索解决方案,也可以留言。
可以了,还不满足只有https访问是吗,想要兼容http访问,没问题。只要在上面的配置稍微修改即可。
server {
listen 80;
listen 443 ssl;
server_name blog.lzoro.com;
ssl off;
ssl_certificate ../cert/lzoro.pem;
ssl_certificate_key ../cert/lzoro.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
# 下面root路径格子这边隐去了,各位需自行设置
root ...;
location /{
index index.html index.htm;
}
access_log /usr/local/nginx-1.9.9/logs/blog-https.access.log;
}
无妨的话,点个喜欢呗,溜了溜了。