如何实际处理撤销证书的验证?

时间:2017-03-29 12:45:19

标签: security ssl x509 ocsp

据我所知,在证书链验证期间应该验证每个证书的撤销,以保护连接免受MITM攻击。

据我所知,我应该使用CRL / CRL增量或OCSP。我是这个领域的新手,但即使在阅读了一些相关的RFC(但不是那么认真)之后,我也不知道如何实际使用/检查撤销。

  1. 什么样的协议被广泛用作OCSP“传输层” - 我只知道HTTP - 现代客户应该支持其他竞争选择吗?

  2. 如果我理解正确CA会在每个证书中指向哪里可以找到CRL(除了根CA /哪个是自签名的)(在“CRL分发点”列表中?),所以要实现严格的客户端我应该下载证书链握手期间的CRL。我知道为此目的可能会使用HTTP和LDAP - 现代客户需要支持其他竞争替代方案吗?用于此目的的LDAP仍然很常见(或者这可能只是遗留的)?

  3. 以CRL的方式检测它的有效时间,所以我可以以某种方式缓存它以进一步连接吗?

  4. 是否有实用的方法与CRL“离线”工作?正如我所理解的那样,一般来说,我应该为世界上每个可能的CA下载(和更新)CRL,这需要比“在线”这样做更多的资源/工作。

  5. 典型的证书链有多深?例如。例如,链中有10个证书可以吗?

  6. 以某种方式提升asio支持原生CRL和/或OCSP吗?我需要自己做这件事吗?

  7. 如何在botan中实施证书链的CRL“在线”验证?也许它是开箱即用的(因为OCSP已实施)?

  8. 应该支持这两种方法,或者大多数CA都使用OCSP,而CRL仅由传统sw支持原因定义?如果我只想连接到95%的服务器,那么我只需要实现OCSP而不关心CRL并拒绝使用OCSP无法验证的证书?或者可能对OCSP的支持比较少见?正如我发现ocsp支持EV证书但不支持OV和DV。这是真的吗?

  9. 也许我应该通过OCSP和CRL检查撤销。一个“首选”是否可用还是我需要两者都足够了?

1 个答案:

答案 0 :(得分:0)

撤销检查无法避免MITM攻击。

要防止MITM,您需要在客户端信任库中包含服务器根CA证书,并检查服务器证书是否已由受信任的CA(存在于您的信任库中)颁发。您还可以在信任库中包含服务器证书。在攻击者窃取证书的情况下,撤销检查可能有意义

  

1)什么样的协议被广泛用作OCSP“传输层” - 我只知道HTTP - 现代客户应该支持其他竞争选择吗?

HTTP和HTTPS

  

2)如果我理解正确,CA会在每个证书中指向哪里可以找到CRL(除了根CA /自签名)(在“CRL分发点”列表中?),所以要实现严格的客户端我应该下载CRL在证书链握手期间。我知道为此目的可能会使用HTTP和ldap - 现代客户需要支持其他竞争替代方案吗?为此目的的ldap仍然很常见(或者meybe这只是遗产)?

HTTP是通常的方式。但它可以是HTTP,FTP,LDAP或FILE。 LDAP也用于某些环境

  

3)以CRL的方式检测它的有效时间,所以我可以以某种方式缓存它以进一步连接吗?

CRL包含一个nextUpdate字段,用于指示下一个CRL的发布日期

  

4)是否有实用的方法与CRL“离线”工作?正如我所理解的那样,一般来说,我应该为世界上每个可能的CA下载(和更新)CRL,这需要比“在线”这样做更多的资源/工作。

通常的方法是在需要时下载CRL,将其缓存并在下次检查中检查您是否已经拥有它

  

5)典型的证书链有多深?例如。例如,链中有10个证书可以吗?

没有限制,但通常的值是2-4

  

6)boost asio是否支持原生CRL和/或OCSP?我需要自己做这件事吗?

asio的证书验证部分没有引用,所以我担心你必须自己实现它

  

7)如何在botan中实施CRL对证书链的“在线”验证?也许它是开箱即用的(因为OCSP已实施)?

OCSP是在线证书状态协议。在网络上似乎他们在谈论在线验证时会引用OCSP,但只支持CRL

  

8)应该支持这两种方法,或者大多数CA使用OCSP,并且CRL仅由传统sw支持原因定义?如果我只想连接到95%的服务器,那么我只需要实现OCSP而不关心CRL并拒绝使用OCSP无法验证的证书?或者可能对OCSP的支持比较少见?正如我发现ocsp支持EV证书但不支持OV和DV。那是真的吗?

CA通常支持OCSP& CRL。你需要支持两者。即使在同一个CA中,也可能是必须使用OCSP和其他CRL检查的证书

  

9)如果可用或只有一个“首选”就足够了,我可以通过OCSP和CRL检查撤销吗?

OCSP更受欢迎,因为它更快并且使用更少的资源。正常的实现是与两个服务并行启动查询并使用之前的响应