检查证书是否被吊销(19.0版本)
在理想环境中,一个特定证书正如它所声称的那样:能够被证明是拥有唯一实体的。然而,在真实环境中,私钥管理常常出现被错放、被偷、不恰当的分发等问题。在这种情况下,证书可能在到期前,就被吊销了。
当CA吊销一个证书时,它会将证书序列号加入证书吊销列表(CRL)中。但一个实体需要进行证书有效性校验时,可以从下载CRL并检查证书是否在其中。
如果我们想要在Erlang集群中使用证书有效性检查,我们需要指定从哪里获取CRLs。如果我们从一个“适当”的CA获取证书,证书中可能会有一个“分布点”扩展,其中包含一个可以下载CRL的URL信息。实际上,Erlang的ssl应用可以为我们下载它。否则,我们只能通过其它方法获取CRL,并手动地把它传递给ssl应用。
我们也可以选择如何进行广泛的检查,这是由crl_check设置的。默认设置是false,不进行检查。如果设置为true,在证书链中所有的证书,都将执行依赖于CRLs的检查。如果所有CRL都不存在,将证书当作“已吊销”进行处理。我们还可以为对端设置crl_check,仅用于检查对端的证书(不是CA颁发的),或者设置best_effort,当找不到与证书关联的CRL时,认定证书是有效的。
在Erlang/OTP 19.0环境中启动时,我们可以添加与下面类似的代码到启动脚本中:
1 2 3 4 5 6 7 8 | SSL_DIST_OPT="server_certfile erl-dist.pem client_certfile erl-dist.pem \
server_keyfile erl-dist.key client_keyfile erl-dist.key \
server_cacertfile ca.pem client_cacertfile ca.pem \
server_verify verify_peer client_verify verify_peer \
server_crl_check true client_crl_check true \
server_crl_cache {ssl_crl_cache,{internal,[{http, 5000 }]}} \
client_crl_cache {ssl_crl_cache,{internal,[{http, 5000 }]}} \
server_fail_if_no_peer_cert true "
|
指定ssl_crl_cache模块通过HTTP获取CRLs,超时时间为5秒(设置为5000毫秒)。