个人网站申请免费ssl证书最靠谱的办法

标签:#ssl证书# 时间:2023/05/21 15:08:40 作者:小木

如今,不支持https的网站基本都无法访问,https网站需要在服务端保存ssl证书才可以建立。这个原理本文不多说。目前,各大云服务厂商也提供ssl证书的发放和管理,但都是收费的。对于个人网站来说,基于第三方的服务申请免费证书其实是合适的。但是,国内申请证书并不好用。本文主要记录一个最简单的免费证书申请安装方法。

[TOC]

证书简介

首先,我们申请第三方Let’s Encrypt的证书。这也是最著名的免费证书发放机构之一,也被各大企业和机构所接受。但是,当前Let’s Encrypt的证书申请基本是需要你在服务器端安装snap服务,再用snap安装certbot申请。但是由于国内网络的原因,我们无法使用snap通过官方的网络安装certbot,离线安装也需要系统本身有类似GLIBC_2.27,并且版本都不能有错误,这也对很多系统带来了麻烦。

但是其实有python脚本可以帮助我们直接连接lets encrypt官方网站申请ssl证书。Let’s Encrypt在国内访问也很顺畅,所以这个方法很简单。目前看到最简单的python脚本就是acme-tiny,十分小巧,不过需要借助openssl生成我们自己的ACCOUNT KEY之后来申请证书,同时需要从letsencrypt验证我们网站所有权即可。这个方法还支持自动更新证书。

项目地址:https://github.com/diafygi/acme-tiny

ACME-Tiny使用教程

假设一下操作均在/home/datalearner_encrypt下操作。

1、生成Let’s Encrypt账户私钥

首先,我们需要用openssl生成我们自己的一个私钥,这是用以做let’s encrypt账户认证的:

openssl genrsa 4096 > account.key

openssl应该是系统已经装好的(一般来说1.1.1版本即可)。

2、生成域名证书私钥

其次,为我们的域名证书请求做个签名,搞个域名私钥:

# Generate a domain private key (if you haven't already)
openssl genrsa 4096 > domain.key
3、为域名生成证书请求

接下来,我们为域名请求证书,有几种情况:

只为一个域名请求:

# For a single domain
openssl req -new -sha256 -key domain.key -subj "/CN=datalearner.com" > domain.csr

那么上述请求证书只能认证datalearner.com这个域名,其它的,例如www.datalearner.com就不行了。

我们也可以一次为多个域名证书请求:

openssl req -new -sha256 -key domain.key -subj "/" -addext "subjectAltName = DNS:datalearner.com, DNS:www.datalearner.com,  DNS:m.datalearner.com" > domain.csr

这里,我们就是申请为三个域名做证书:datalearner.com、www.datalearner.com 以及 m.datalearner.com。

以上都是openssl>=1.1.1版本的写法,如果你的openssl小于1.1.1版本,那么写法如下:

openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:yoursite.com,DNS:www.yoursite.com")) > domain.csr
4、向Let’s Encrypt申请证书

上述两个步骤完成之后我们就可以申请证书了。写法如下:

python3 acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /home/apache-tomcat-8.5.51/webapps/ROOT/.well-known/acme-challenge/ > ./signed_chain.crt

注意,acme_tiny.py就是从前面GitHub上下载的文件。这里的account.keydomain.csr都是前面生成的文件。然后--acme-dir参数后面跟的是网站根目录下.well-known/acme-challenge目录。因为,Let’s Encrypt需要验证你对这个网站的所有权,所以需要网站可以访问上面目录,把Let’s Encrypt给你的东西放进去,然后Let’s Encrypt颁发证书前会访问这个路径,如果没问题,那证明这个网站是你的。

也就是最后它要访问 http://www.datalearner.com/.well-known/acme-challenge/xxxx
注意,这里的xxxx就是它自动生成的内容。你只需要保证上面命令里面的路径正确,它把文件放进去就能通过域名访问即可。

生成的signed_chain.crt就是证书了,然后安装即可。

这里有一个注意的地方,如果你的证书过期,但是强制http跳转https,那么网站访问会出错。最后第4步骤它就无法通过 http://www.datalearner.com/.well-known/acme-challenge/xxxx去验证网站是你的了。所以这种情况一定要关闭强制跳转。

至此,大功告成。

欢迎大家关注DataLearner官方微信,接受最新的AI技术推送
相关博客