前瞻:
许多人都想让自己的网站用上https,奈何网上大部分教程都是给域名申请SSL证书。因为某些众所周知的原因,国内使用域名访问自己的服务器往往非常困难,而使用IP可以直接访问,但是没有SSL的保护。
那么我们想到了这个地址:https://1.1.1.1/
我们发现,给IP申请SSL证书也是可以的,但是上网查询后,我们发现相关资料极少,有几个给IP申请SSL证书的却都要价高昂,甚至有人说IP的SSL证书没有一个免费的,但是!白嫖党是不可能放弃白嫖的。
今天趁着配置服务器的功夫,给大家写一篇如何给自己的服务器申请基于IP的SSL证书的文章。
你所需要的:
一台有公网IP的服务器
Nginx
流畅的网络环境
我的过程:
首先,访问:https://zerossl.com/
然后注册我们的账号(该网站可用QQ邮箱注册),完成登陆后,回到主页,点击右上角的Get Free SSL。

之后我们点击New Certificate

将1.1.1.1换成自己的服务器IP,之后点击Next Step

这里选90天有效期的证书,1年的要交钱wmmmm

这里直接Next Step,让他自动生成CSR

这里继续Next Step,毕竟默认就是免费计划。

然后等待一会儿,进入如下界面,开始验证服务器所有权。
这里我们选择HTTP File Upload验证,需要准备Nginx。
点击Download Auth File,下载验证用文件。

服务器端Nginx配置如下,将上面下载的验证用txt丢到Nginx的html文件夹即可。nginx.conf的配置是因为创建.开头的文件夹较为麻烦

location /.well-known/pki-validation {
alias html/;
} 配置好后,重启nginx,点击步骤三中验证用的链接,应该能看到如下内容

之后我们点击Next Step,进入如下界面

点击Verify Domain,进入如下界面

等待几分钟后,我们会收到证书签发完成的邮件,以及跳转到如下界面

在该界面中的Server Type中选择自己的服务端,然后点击Download Certificate(.zip),然后点击Next Step
这里我们先解压得到的证书ZIP,发现如下三个文件

我们需要将ca_bundle.crt中的内容复制到certificate.crt文件末尾,构成证书链。
之后上传到服务器进行配置,Nginx配置如下

ssl_certificate ./ssl/certificate.crt;
ssl_certificate_key ./ssl/private.key;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate ./ssl/certificate.crt;
resolver 1.1.1.1 1.0.0.1 119.29.29.29 valid=300s;
resolver_timeout 30s;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers on; 配置好后重启Nginx,你就可以使用https://ip的形式访问你的服务器了。
该配置应该可以在某些SSL评测网站上拿到A的评价,至于A+,则需要开启HSTS,本人因为部分业务还需要使用http,就没有开启。
SSL测试用网站:https://myssl.com/
之后回到ZeroSSL,我们点击Check Installation,将显示如下界面

至此,我们给IP申请的SSL证书算是完成了。
不过该证书需要每3个月申请一次,一个账号只能申请3个证书,将要到期时(该图为还有30左右到期)也可以重新生成,如下图

点击Renew后重新进行一次申请流程即可。自动化续期的脚本写起来不会很难,就不做过多讨论。