Chrome 很快就不认没有 CA 的自签证书了,在 RouterOS 上使用 Let’s Encrypt 又非常麻烦,以及一些诸如 OpenVPN 服务器的服务必须使用证书,所以就想了一下用 CACert 这个社区驱动的证书签发机构来代替自签证书。(打开网站提示证书不被信任是正常的;该网站的证书也是由 CACert 自己签发的。)
首先我们来创建一个证书模板:
|
/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 一项,填入你的服务器域名。
然后导出证书私钥和请求:
|
/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 根证书,以及证书签名过的公钥和私钥:
|
/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 ,如下图所示。

最后给各种需要设定证书的地方设定使用刚导入的证书:
|
/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 根证书或者手工信任证书):
