现在都流行 https,今天晚上花了二个小时,学习了一下,这里做个学习总结:
因为刚开始接触,就使用免费的:Let's Encrypt
Let's Encrypt证书特点:
1. 现在主流的浏览器(chrome, firefox, ie)都支持 Let's Encrypt 证书。
2. 申请ssl证书简单快捷,用户名都不需要注册就能获取。
3. 免费证书有效期: 3 个月,到期后需要重新获取证书,重新安装。
我是根据 http://www.itbulu.com/ssl-for-free.html 提供的信息来操作的:
从 https://www.sslforfree.com 获取免费ssl证书。
只需简单的上传一个文件,验证一下网站的所有者就可以了。
注意:下载的文件存放在 /.well-known/acme-challenge/ 由于文件夹[.well-known]中含有一个小数点,所以在iis中需要配置一下MIME类型,否则上传的验证文件无法访问。
获取到的证书文件有3个:
ca_bundle.crt
certificate.crt
private.key
由于我是在 iis 上使用,iis 安装ssl证书需要的是一个 .pfx 文件。这需要使用 openssl.exe 生成一个 .pfx 文件。
好在我电脑上原来有一个自已编译的 openssl.exe,刚好能用上。
根据 www.sslforfree.com 的提示,执行下列命令生成 certificate_combined.pfx:
openssl pkcs12 -export -out "certificate_combined.pfx" -inkey "private.key" -in "certificate.crt" -certfile ca_bundle.crt
输入一个密码,然后再重复输入一次密码,就 生成 certificate_combined.pfx 文件了。
然后在iis上,在一个站点上点右键,查看【属性,配置服务器证书,选择【从 .pfx 文件导入证书】。
这样就完成了 http -> https 的升级。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
将 cert 和 key 文件转换成java使用的 jks(keystore)文件的方法:
1. 生成 PKCS#12 文件
openssl pkcs12 -export -in "certificate.crt" -inkey "private.key" -certfile "ca_bundle.crt" -out "qlz.p12" -name "qlz"
验证文件(测试用,这一步不重要): keytool -rfc -list -keystore qlz.p12 -storetype pkcs12
2. 生成 jks 文件 (参考: https://stackoverflow.com/questions/11952274/how-can-i-create-keystore-from-an-existing-certificate-abc-crt-and-abc-key-fil)
keytool -importkeystore -srckeystore qlz.p12 -srcstoretype PKCS12 -destkeystore qlz.jks -deststoretype JKS
完工,生成的 qlz.jks 就可以供 java 直接使用。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
需要注意的地方:
1. 如果有多个站点,其中一个开启了https,就会占用 443 端口。另一个站点如果同时想开启https,就会提示失败,因为无法开启443端口了。
查了一下相关资料,说是 iiis 6,因为使用ssl,无法读取请求的主机头(host),所以只能读取配置的第一个ssl证书,如果有多个ssl证书,就无法正确与host相匹配了。 好像说 iis8开启一个功能*SNI (Server Name Indication),就能解决这个问题。
2. 每隔3个月,证书到期一次,需要重复操作一次,更新证书。