我有一个现有的PKI,我试图集成一个OpenVPN服务器。 我已将CRL分发点包含在链中的每个CA证书中,并在可从我的OpenVPN服务器访问的位置发布CRL。
问题在于OpenVPN服务器似乎完全忽略了CRL分发点扩展,而采用了它自己的--crl-verify选项。 如果我为用户吊销一个证书并发布一个新的CRL,OpenVPN会很乐意继续让这个客户端连接。 我不明白为什么OpenVPN不会阅读这些扩展名,因为它们完全是为了这个目的而添加的。
我只能想到2种替代方法来检查我的CRL:
1)我可以有一个cronjob将CRL复制到OpenVPN服务器并使用--crl-verify选项。 但是由于我有一系列的CA,我怎样才能把所有的CRL都放到一个文件中呢? 如果我使用--crl-verify的文件夹模式, --crl-verify链中的每个CA都有自己的序列号scheme是一个问题吗?
2)我试图避免调用任何外部脚本,而只使用内置的东西,假设我手动做的越多,越有可能引入安全弱点。 我错了吗? 是写我自己的脚本来检查我的CRL是正确的select?
有没有什么办法可以让OpenVPN检查我的证书链中包含的CRL分发点 ,最好是使用内置于OpenVPN本身的机制?
编辑:这也很高兴知道是否有任何方法在客户端也这样做(即,为客户端检查OpenVPN服务器的证书的有效性)。 如果--crl-verify带了一个URL,那将会非常简单。
我相信你是正确的OpenVPN没有这个function。
至于为什么,除了普遍认为OpenVPN更普遍地用自己相当简单的easy-rsa来build立专用的PKI之外,我没有任何答案。
它似乎没有--crl-verify ...会与多个CA的CRL一起玩。
但是,如果您使用--capath dir而不是--ca file来configuration您的CA,则capath选项需要该目录中的CA证书和CRL。 如果你定期将CRL导出到OpenVPN服务器,我相信这将是可行的select。
另一种select,我同意,你应该小心,如何实施,将钩在一个脚本。
你可以使用--tls-verify cmd钩子和--tls-export-cert directory以及peer_cert环境variables。
如果TLS握手应该成功,这将允许您的自定义脚本和对方的证书有最后的决定权。
(有关详细信息,请参阅手册中的上述configuration选项。)