使用let’s encrypt制作免费HTTPS证书

新浪微博 QQ空间 腾讯微博

在外网访问家里的NAS服务器上面的jAlbum相册时,使用HTTPS更安全。之前使用的一直是自签发的证书,在自己的手机上面导入了自签发证书的CA,因此浏览器一直显示安全的绿色。今天在其他手机上面使用HTTPS访问时,打不开页面,使用HTTP访问则没问题,很快就想到这是证书的问题,自签发证书的根证书没有安装。但是总不能每次有新的设备访问时就要求其安装CA证书,除非这个服务能做到像12306那么不可或缺(12306上线很多年都不购买商用证书,一直要求用户下载证书安装到本地,这种做法很危险)。

let’s encrypt上线已经有好几年了。一直没条件使用,今天想着拿来用下。有自己的域名,能自定义解析结果。有这个条件就足够使用let’s encrypt生成证书了。首先是查看官网,官网推荐使用certbot生成证书。certbot默认的验证方式是,在常用的web服务根目录创建文件和文件夹,然后工具使用指定域名下载,能下载到,则说明请求生成证书者是域名和网站管理员。验证时使用默认HTTP端口,80端口。由于我的jAlbum部署在家里,电信关闭了443和80端口(实测同时关闭的还有SMB端口445)。这样使用这种方式没办法验证管理员。

还提供了一种standalone方式,这种方式是certbot自行启动一个web服务端,同样,80端口不开放,无法验证。

继续寻求其他验证方式,有一种不依赖web服务的方式,使用DNS验证,这也是一些搜索引擎网站登入网站的时候常用的方式。letsencrypt的使用方法还比一般的设置DNS TXT记录的方式复杂。它使用的是动态添加记录,因此需要提供dns解析服务的账号的访问凭据才能使用。好在很多人制作了方便一键式工具,推荐使用如下工程:

root@shentar-raspberry:~/cert/letsencrypt-dnspod# git remote -v
origin http://github.com/YJBeetle/letsencrypt-dnspod.git (fetch)
origin http://github.com/YJBeetle/letsencrypt-dnspod.git (push)

配置好domains.txt,其中logintoken为dnspod给出的访问密钥。domain为二级域名,record为子域名。

domains.txt

填写好后,还要主要record一定要在dnspod上面已经解析,并且解析记录必须是A记录,实测CNAME无法完成校验。

然后执行

bash letsencrypt-dnspod.sh

即可生成证书和私钥文件。位于certs/codefine.site目录内。

整个制作流程并不复杂。

对于jAlbum而言,需要将pem文件导入到jks格式的证书库文件中。使用如下命令可以实现:

openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out pkcs.p12 -name NAME

keytool -importkeystore -deststorepass PASSWORD_STORE -destkeypass PASSWORD_KEYPASS -destkeystore keystore.jks -srckeystore pkcs.p12 -srcstoretype PKCS12 -srcstorepass STORE_PASS -alias NAME

openssl命令将pem文件导出到pkcs12格式的库中,keytool命令再将pkcs12格式的库导入到jks格式的库中。

这样一个可用于java程序加载的keystore文件就做好了,其内包含的证书由于有了letsencrypt的CA签发,具备公信力,可以被一般WEB客户端识别。最终的效果如下图:

Screenshot_20180615-115723

新浪微博 QQ空间 腾讯微博

| 1 分2 分3 分4 分5 分 (5.00- 2票)
Loading ... Loading ... | 这篇文章归档在:WEB网络, 建站技术
| 标签: , , , , , . | 永久链接:链接 | 评论(0) |

评论

邮箱地址不会被泄露, 标记为 * 的项目必填。

8 - 2 = *



You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <img alt="" src="" class=""> <pre class=""> <q cite=""> <s> <strike> <strong>

返回顶部