现在有很多证书签发商能签发免费的域名 SSL 证书,其中最出名的就是 Let’s Encrypt 了,不过他们家现在还不支持签发 IP 证书,这对于想给自己的 IP 签发证书的站长来说不免有些遗憾。这次给大家介绍的 ZeroSSL,也是一家类似 Let’s Encrypt 的证书签发商,注册成为他们的免费用户就可以签发出 90 天有效期的证书,但是不同的是,他们家能签发 IP 的 SSL 证书哦,这个就比较少见了~
说起 IP SSL 证书,可能有些人不解,我们平时都是用域名访问网站的,为什么要专门给 IP 签发证书呢?我自己的话主要有四方面的原因:
有些业务需要通过 IP 访问但不想明文传输,需要通过 HTTPS 连接保证传输安全
第一点虽然可以通过自签证书解决但是使用上不太方便
可以一定程度防止源站 IP 检测(Nginx 如果不做特别设置的话,使用 https://ip 的形式访问会默认返回绑定 443 端口的网站域名证书)
IP 证书诶!白嫖的诶!它不香嘛!
话不多说,直接开始申请吧!
一、注册
ZeroSSL 官网:https://zerossl.com
不同于 Let’s Encrypt,ZeroSSL 是要注册才能申请免费证书的,另外虽然官方也支持 ACME 申请证书,但此渠道没办法用来签发 IP 证书,所以我们还是得用 Web 端来申请(信息来源:https://luotianyi.vc/5056.html)。
另外需要注意的是,ZeroSSL 限制每个账号能签发的免费证书数量为 3 个,不知道 ACME 有没有这个限制,如果需要签发更多证书的话需要付费,基础套餐每月 US$ 10。
二、申请
虽然 ZeroSSL 没有 Let’s Encrypt 申请证书那么自由,不过能免费签发 IP SSL 证书这点也确实很有优势,所以还是来说说申请过程吧。
注册完账号之后,申请证书的页面是这个样子的:
图里面这个 1.1.1.1 处就是要填写你自己要申请的 IP 的,我这里为了方便演示就随便写了 Cloudflare 的,如果是要申请普通的域名证书,那直接填写域名也行。填写完 IP,点击 Next Step 到下一步。
这一步就是选择申请证书的有效时间的,他默认选择的是 1-Year 一年的,记得要换成 90-Day Certificate(90 天有效期),一年的证书是要花钱才能用的。选择完成之后,继续 Next Step。
CSR 信息这个一般没需求的话让他自己自动生成(Auto-Generate CSR)就行了。
这一步就是让我们选择付费套餐了,上图里你可以看到各个套餐的区别(买不起买不起,我选择 Free 白嫖!)。
完成上面的设置之后,就会让你验证 IP 了。
因为我们申请的是 IP 证书,所以无法像常规的域名证书那样通过 DNS 来进行检验,只能通过 HTTP 文件的形式来验证 IP。具体操作是在服务器网站目录里创建 .well-known 文件夹,然后在其下面再创建 pki-validation 文件夹,之后把网站提供的验证文件下载上传到这个目录里,点击验证就行了。
上面这一步需要注意的是,你要确保你的 IP 是能通过 http://ip 这种形式访问的,当然不需要访问之后有什么实际内容。下面对 如何验证做一些补充:
- 构造
.well-known/pki-validation/xxx.txt
的目录。这里我是放在服务器
/www/wwwroot/.well-known/pki-validation/xxxxx.txt
这个目录下,接下去要配置 nginx,使得 http://ip/.well-known/pki-validation/xxx.txt(网站提供的验证文件)这个网址能打开能出现下图所示界面即可
- 以宝塔 面板为例, 打开
nginx
配置页面
- 找到配置修改:
- 在 sever 配置中加入如下代码:
location /.well-known/ {
root /www/wwwroot;
allow all;
}
- 将上述配置保存。打开命名行界面。测试配置并重启 nginx:
nginx -t
# 出现success 表示成功,如果fail请检查上述格式配置是否出现问题。空格缩进什么的
nginx -s reload
# 重启nginx
- 测试访问
验证完成之后,就会看到上面的成功签发提示了,然后选择自己 Web Server 的类型,点击 Download Certificate 就能下载到签发出来的 IP 证书。
- 下载.zip 文件并解压:
- 进入解压文件,有如下三个文件:
- 在当下目录打开
cmd
:
# 创建合并后的证书文件
type certificate.crt ca_bundle.crt > fullchain.pem
- 在服务器上创建存放证书的目录:
# 登录服务器后执行
mkdir -p /www/server/nginx/ssl
- 将证书文件上传到服务器: 需要上传的文件有
fullchain.pem
(刚才合并的文件),private.key
(私钥文件),这里先改个名字,上传的位置:/www/server/nginx/ssl
目录下。
fullchain.pem -> 服务器ip.pem 比如说,111.222.33.4.pem
private.key ->服务器ip.key
- 打开上述
Nginx
的配置界面,在默认server
下面,填入下面代码,注意这里我以端口为 8080 的服务为例子。
!重要提示:
假设我原来访问的 ip:port 是 http://1.2.3.4:8080
我这里设置: listen 443 ssl;
那么按照下面的代码配置,实现成功后,访问的 ip:port 变成
https://1.2.3.4:443
。443 是 https 访问的默认端口,可以忽略 ,即访问 https://1.2.3.4
即可。
如果你想通过 ip:8080
来访问,则需要让 Nginx 来绑定监听 8080 端口,而 Spring Boot 服务则需要绑定监听别的端口了。
server {
listen 443 ssl;
server_name 服务器ip;
ssl_certificate /www/server/nginx/ssl/服务器ip.pem;
ssl_certificate_key /www/server/nginx/ssl/服务器ip.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL_Server1:1m;
ssl_session_timeout 10m;
location / {
proxy_pass http://127.0.0.1:服务端口;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
access_log /www/wwwlogs/access.log;
error_log /www/wwwlogs/error.log;
}
- 点击保存,切换到命令行界面
nginx -t
# 出现success 表示成功,如果fail请检查上述格式配置是否出现问题。空格缩进什么的
nginx -s reload
# 重启nginx
- 结束。
ZeroSSL
是我唯一知道可以免费办IP证书的服务商,一次免费领3个月,到期继续领就行
界面
nginx -t
# 出现success 表示成功,如果fail请检查上述格式配置是否出现问题。空格缩进什么的
nginx -s reload
# 重启nginx
- 结束。
ZeroSSL
是我唯一知道可以免费办IP证书的服务商,一次免费领3个月,到期继续领就行