HTTPS从认识到线上实战全记录(5)

先声明一下,这里不是打广告,如果有更好用的,欢迎大家推荐。阿里云之前有一款免费的SSL证书申请,但是现在好像下线了,腾讯云有一款TrustAsia的免费证书,又拍云说是有2款免费证书,而且可以自动续签,但是试了一下发现必须把域名绑定到它们的CNAME才行,所以想想还是放弃了:

HTTPS从认识到线上实战全记录

最后我用的是腾讯云免费SSL证书,有一款TrustAsia的免费证书,缺点是有效期只有1年(到期应该可以重新申请),且不支持泛域名,如果子域名很多的话比如挨个申请,很麻烦,大家有更好用的欢迎推荐:

HTTPS从认识到线上实战全记录

申请很简单,简单填写资料,然后验证域名身份,快的话2-3分钟内就能成功申请到:

HTTPS从认识到线上实战全记录

成功后可以把证书下载到本地,内置了Apache、IIS、Nginx、Tomcat的4种证书格式,很方便。

HTTPS从认识到线上实战全记录

申请到的证书:

HTTPS从认识到线上实战全记录

3.1.2. 自制证书

虽然有很多途径可以申请到免费的证书,但一般都是单域名(不支持泛域名),限制太多,本地调试极不方便,所以我们希望本地开发时能够使用我们自己签发的证书。下面我们就来自己实践一下如何从头开始自制HTTPS证书。

证书一般都是用openssl来生成,当然也可以用jdk自带的keytool来生成,但是最终还是要用openssl来转换格式,所以一般还是推荐用openssl来生成。

3.1.2.1. 安装openssl

首先当然还是安装openssl,这里我们只介绍Windows平台,Linux系统的请参考,点击这里下载Win64位的安装包:

HTTPS从认识到线上实战全记录

安装很简单,安装完毕之后为了使用方便,建议配置一下环境变量:

HTTPS从认识到线上实战全记录

然后就可以随时随地执行openssl命令了。

3.1.2.2. 生成CA根证书

我们先生成一个自己的CA根证书ca.crt,然后再用这个根证书生成服务端证书server.crt,有人会问,为啥不直接生成服务端证书呢?因为这样做的话将来我们只要导入一个CA根证书,其它所有用它生成的证书都默认是可信任的,方便嘛!

好了,说了这么多废话,下面开始了:

# 生成CA私钥 openssl genrsa -out ca.key 1024 # 生成CA根证书,-day指定证书有效期 openssl req -new -x509 -key ca.key -out ca.crt -days 365

就这么简单,第二步需要输入几个东西,虽然说乱填也可以,但建议按照提示来填,其中Common Name需要特别注意,如果是生成CA证书的话,可以输入诸如My CA之类的,如果是生成服务端证书的话,必须输入网站的域名,可以输入泛域名,如*.haoji.me:

HTTPS从认识到线上实战全记录

另外,如果报了unable to write 'random state'的错误,一般都是因为没有使用管理员权限打开命令行窗口。

3.1.2.3. 生成服务端证书

和CA证书的生成不同的时,我们需要先生成一个csr证书请求文件文件(CSR,Cerificate Signing Request),有了这个文件之后再利用CA根证书生成最终的证书:

# 生成服务端私钥 openssl genrsa -out server.key 1024 # ��成证书请求文件 openssl req -new -key server.key -out server.csr # 生成最终证书文件,-day指定证书有效期 openssl x509 -req -days 365 -sha256 -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

操作截图:

HTTPS从认识到线上实战全记录

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/004116efe91cdfe62d6665eb6eb8f102.html