一般来说,我们使用域名访问给域名加上 SSL 证书是建站的常规操作,但是有一些应用可能不需要使用域名访问,或者是不想绑定域名,而只是想用单纯的 IP 来实现访问。在现在全网都是 HTTPS 加密访问的背景下,有没有可能给 IP 地址也加上 SSL 证书实现访问呢?
有。但大多数面对 IP 的 SSL 证书都是收费的。而 zeroSSL 提供免费 SSL 证书[1]是支持纯 IP 颁发的,本篇文章就来分享一下zeroSSL[2]免费的纯 IP SSL 证书申请以及如何在自己的服务器(Nginx)安装配置 zeroSSL 免费 SSL 证书。更多的免费 SSL 请参考专题页面:免费 SSL 证书收集整理汇总[3]。
ZeroSSL 证书申请
网站:https://zerossl.com[4]
手动申请
进入到ZeroSSL[5]官网,注册一个账号,然后点击免费 SSL 证书申请。
填写你的 IP 地址,然后选择免费 SSL 证书时长。
选择自动生成 CSR。
验证域名
ZeroSSL 免费 SSL 证书提供了两种域名验证方式,最简单的就是 Web 验证,但是前提是你要让你的 IP 地址实现 Web 访问。如果没有,你可以选择使用域名 DNS 添加 TXT 记录验证。
选择网站 Web 访问的话,直接下载验证文件,然后上传到 IP 地址默认的 Web 目录下,要求是路径保持如下:
用你的浏览器打开 IP,保证可以访问到验证文件。
最后,回到 ZeroSSL 验证页面,点击完成验证。
ZeroSSL 证书安装
下载证书文件
ZeroSSL 证书验证成功后,你就可以下载证书文件了。ZeroSSL SSL 证书[6]提供了多种形式,包括了 Nginx、Apache 等。
这里以 Nginx 为例,下载下来的 ZeroSSL 证书文件有三个:ca_bundle.crt 和 certificate.crt 以及私钥 key。
合并 SSL 证书
对于 Nginx 服务器,需要将 ca_bundle.crt 和 certificate.crt 合并,方法是打开 certificate.crt,然后将 ca_bundle.crt 的内容复制粘贴放在后面。
安装 SSL 证书
如果你用的是宝塔面板,可以直接在后台点击安装 SSL 证书,然后将证书和密钥文件分别上传保存即可。
如果你用的是Oneinstack 一键包[7]和LNMP 一键安装包[8],则需要打开你的 Nginx 配置文件(不是域名 Nginx 配置文件),参考以下格式修改,注意要将 SSL 证书的路径改成你自己的:
server
{
listen 443 ssl http2;
#listen [::]:443 ssl http2;
server_name _;
index index.html index.htm index.php;
root /home/wwwroot/default;
ssl_certificate /usr/local/nginx/conf/ssl/ipssl/wzfouip.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/ipssl/wzfouip.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
# openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
access_log /home/wwwlogs/access.log;
}
证书安装后,记得执行一次:nginx -t 来检查一下是否有没有语法错误,没有的话直接重启 Nginx 完成 SSL 证书安装。打开 IP 地址你就可以看到 IP SSL 证书已经成功安装了。
总结
就目前来看,纯 IP 的ZeroSSL 免费 SSL 证书[9]暂时没有很好的工具来自动续期,Github 有开发者使用 golang 写了个工具可以实现更新:https://github.com/tinkernels/zerossl-ip-cert,但是不好操作,所以比较简单的方法就是自己手动申请续期。