如何申请免费证书并基于Nginx搭建Https服务

收费证书是真的(赫赫)贵,搭建https服务每年不花个千把块还弄不来,So跟博主一样缺钱的请看过来,教你如何申请免费证书,并给予Nginx搭建https服务。
转载请注明出处:https://blog.lzoro.com,谢谢~

一、环境说明

1
2
3
4
阿里云ECS云服务器(centOS)一台(我真的不是打广告的)
lzoro.com域名一个
Nginx-1.9.9
浏览器

几个前提条件必须要满足,首先你要有自己的域名/服务器,如果没有的话,建议先准备一下。

二、步骤

1、申请证书

这里格子有一个免费申请证书的网站https://freessl.org/推荐一下,个人觉得挺好用的。

话不多说,撸起袖子。

首先,登录网站后,请先注册一个账号,目前注册十分简单,只需要邮箱即可。

注册freesll.org

注册完毕请先登录邮箱验证,然后登录freessl.org,就可以开始申请免费证书了。

填写域名
填写需要证书的域名

选择参数,这里格子从freessl.org摘录说明如下

1
2
3
4
5
6
7
8
9
10
11
12
13
关于域名验证的说明

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的相关值
验证DNS

添加解析
添加DNS验证解析

生成并下载证书
生成证书并下载

至此,证书的申请就大功告成了。
注意私钥请妥善保存,freessl控制台不会帮你存在私钥,除非你自己上传。

2、安装配置证书

证书申请完毕后不安装你留着当传家宝吗。

本篇博客是基于Nginx进行证书配置,其他诸如IIS、Apache等其他服务器不在本文讨论范围,请移步搜索引擎~

所以,你需要一台装有Nginx的服务器,真巧,我有。

先把证书更名,并上传到服务器,格子这边存放路径如下

1
2
/usr/local/nginx/cert/lzoro.pem
/usr/local/nginx/cert/lzoro.key

进入配置文件所在目录

1
cd /usr/local/nginx/conf

编辑配置文件

1
vim nginx.conf

配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

1
2
3
4
./sbin/nginx -s reload
# 如果上面的命令不起作用,也可以重启
./sbin/nginx -s stop
./sbin/nginx

当然,到这一步的话,https的配置就算是完成了,不过当你打开浏览器的美滋滋地敲入https://blog.lzoro.com的时候,可能会发现无法访问,先别着急心里奔腾某个神秘生物,你需要几个步骤来处理。

如果你用的是云服务器的话,无论是阿里云或者腾讯云亦或其他云,这些云服务器厂商基本上都会提供安全组配置的,所以你需要到你的云服务器控制台,针对该服务器进行安全组配置(说明白些,就是开放端口),配置完安全组之后,再访问一次。

what!还不行,我真的没逗你。还是上面那个根本原因,你配置了安全组之后,依旧无法访问的话,可能原因是你服务器也开启了防火墙。

判断防火墙状态

1
systemctl status firewalld

没错,出现下图状态证明你是开启了防火墙的,挺好,有安全意识。
防火墙状态
开放对应端口并重载防火墙

1
2
firewall-cmd --zone=public --add-port=443/tcp --permanent
systemctrl reload firewalld

再来一次,https://blog.lzoro.com,是不是可以了,收工。

什么,还不行。那你可能是遇到了格子没出现的问题,当然你可以搜索解决方案,也可以留言。

可以了,还不满足只有https访问是吗,想要兼容http访问,没问题。只要在上面的配置稍微修改即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
}

无妨的话,点个喜欢呗,溜了溜了。

分享到