Chrome很快就不认没有CA的自签证书了,在RouterOS上使用Let’s Encrypt又非常麻烦,以及一些诸如OpenVPN服务器的服务必须使用证书,所以就想了一下用CACert这个社区驱动的证书签发机构来代替自签证书。(打开网站提示证书不被信任是正常的;该网站的证书也是由CACert自己签发的。)
首先我们来创建一个证书模板:
1 |
/certificate add name=my-cert common-name=your.domain.com key-size=4096 days-valid=180 key-usage=digital-signature,key-encipherment,key-agreement,server-gated-crypto,tls-client,tls-server |
注意这边 subject-alt-name ,别的 key-usage 以及其它选项CACert都因为无法验证而不认,如果你填错了的话,之后导入的时候可能被RouterOS认成两个证书,找不到私钥。你需要修改的只有 common-name 一项,填入你的服务器域名。
然后导出证书私钥和请求:
1 |
/certificate create-certificate-request template=my-cert key-passphrase=12345678 challenge-passphrase=abcdefgh |
这边需要记住你的 key-passphrase ,接下来导入证书的时候要用到。 challenge-passphrase 是可选的但是根据实验,不填一个就没法正常导出,所以就随意填好了。
把RouterOS根目录下的 certificate-request.pem 文件导出来,以纯文本方式打开,复制内容粘贴到CACert的新证书页面,确认后获得一个服务器证书。从网页复制这个证书保存成 .crt 扩展名的文本文件(下文用 cert.crt 作为文件名),传到RouterOS根目录。
接下来分别导入CACert根证书,以及证书签名过的公钥和私钥:
1 2 3 4 |
/tool fetch url=https://www.cacert.org/certs/root.crt /certificate import file-name=root.crt /certificate import file-name=cert.crt /certificate import file-name=certificate-request_key.pem |
如果提示输入passphrase的话呢就输入之前设定的 key-passphrase 。一切正常的话,你的证书前面应该显示 KLT ,如下图所示。
最后给各种需要设定证书的地方设定使用刚导入的证书:
1 2 3 |
/ip service set www-ssl certificate=cert.crt_0 /interface ovpn-server server set certificate=cert.crt_0 /interface sstp-server server set certificate=cert.crt_0 |
最终效果(需要在电脑上导入CACert根证书或者手工信任证书):