Bootstrap

ZeroSSL配置https

现在有很多证书签发商能签发免费的域名 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 证书这点也确实很有优势,所以还是来说说申请过程吧。

注册完账号之后,申请证书的页面是这个样子的:
img

图里面这个 1.1.1.1 处就是要填写你自己要申请的 IP 的,我这里为了方便演示就随便写了 Cloudflare 的,如果是要申请普通的域名证书,那直接填写域名也行。填写完 IP,点击 Next Step 到下一步。
img

这一步就是选择申请证书的有效时间的,他默认选择的是 1-Year 一年的,记得要换成 90-Day Certificate(90 天有效期),一年的证书是要花钱才能用的。选择完成之后,继续 Next Step。
img

CSR 信息这个一般没需求的话让他自己自动生成(Auto-Generate CSR)就行了。
img

这一步就是让我们选择付费套餐了,上图里你可以看到各个套餐的区别(买不起买不起,我选择 Free 白嫖!)。
img

完成上面的设置之后,就会让你验证 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(网站提供的验证文件)这个网址能打开能出现下图所示界面即可

img

  • 以宝塔 面板为例, 打开 nginx配置页面

img

  • 找到配置修改:

img

  • 在 sever 配置中加入如下代码:
location /.well-known/ {
    root /www/wwwroot;
    allow all;
}

img

  • 将上述配置保存。打开命名行界面。测试配置并重启 nginx:
nginx -t   
# 出现success 表示成功,如果fail请检查上述格式配置是否出现问题。空格缩进什么的

nginx -s reload
# 重启nginx
  • 测试访问

验证完成之后,就会看到上面的成功签发提示了,然后选择自己 Web Server 的类型,点击 Download Certificate 就能下载到签发出来的 IP 证书。

img

  • 下载.zip 文件并解压:

img

  • 进入解压文件,有如下三个文件:

img

  • 在当下目录打开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个月,到期继续领就行
;