先声明一下,这里不是打广告,如果有更好用的,欢迎大家推荐。阿里云之前有一款免费的SSL证书申请,但是现在好像下线了,腾讯云有一款TrustAsia的免费证书,又拍云说是有2款免费证书,而且可以自动续签,但是试了一下发现必须把域名绑定到它们的CNAME才行,所以想想还是放弃了:
最后我用的是腾讯云免费SSL证书,有一款TrustAsia的免费证书,缺点是有效期只有1年(到期应该可以重新申请),且不支持泛域名,如果子域名很多的话比如挨个申请,很麻烦,大家有更好用的欢迎推荐:
申请很简单,简单填写资料,然后验证域名身份,快的话2-3分钟内就能成功申请到:
成功后可以把证书下载到本地,内置了Apache、IIS、Nginx、Tomcat的4种证书格式,很方便。
申请到的证书:
3.1.2. 自制证书虽然有很多途径可以申请到免费的证书,但一般都是单域名(不支持泛域名),限制太多,本地调试极不方便,所以我们希望本地开发时能够使用我们自己签发的证书。下面我们就来自己实践一下如何从头开始自制HTTPS证书。
证书一般都是用openssl来生成,当然也可以用jdk自带的keytool来生成,但是最终还是要用openssl来转换格式,所以一般还是推荐用openssl来生成。
3.1.2.1. 安装openssl首先当然还是安装openssl,这里我们只介绍Windows平台,Linux系统的请参考,点击这里下载Win64位的安装包:
安装很简单,安装完毕之后为了使用方便,建议配置一下环境变量:
然后就可以随时随地执行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:
另外,如果报了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
操作截图: