3

#Regular OCSP (RFC 6960) 我写了一个 OCSP 响应程序,其中响应基于RFC 6960,它声明:

如果未设置 nextUpdate,则响应者指示更新的撤销信息始终可用。

所以我没有设置 nextUpdate 而是BasicOCSPRespBuilder像这里一样使用 BouncyCastle (默认设置 thisUpdate,在 Wireshark Capture 中也可以看到):

basicOCSPRespBuilder.addResponse(certID, responseList.get(certID));

但是这些响应被 IIS 中的证书身份验证器拒绝。在尝试 certutil 时,响应状态始终为“已过期”。

在此处输入图像描述

这是使用“certutil -url”命令验证的。

#Lightweight OCSP (RFC 5019) 一些谷歌搜索显示,微软根据RFC 5019支持 Lightweight OCSP,其中指出:

客户端必须检查 nextUpdate 字段是否存在,并且必须确保当前时间(如第 2.2.4 节所述,以 GMT 时间表示)位于 thisUpdate 和 nextUpdate 时间之间。如果 nextUpdate 字段不存在,客户端必须拒绝响应。

所以我修改了实现以包含一个 nextUpdate 日期(未来几分钟),如下所示:

basicOCSPRespBuilder.addResponse(certID, responseList.get(certID), getNextUpdateDate(), null);

这让我摆脱了“过期”状态问题,但现在的问题是,当它被部署到 Web 服务器并且我尝试执行“certutil -url”检查时,它为证书中的 WebProxy 链接返回“已验证”,但如果我直接提供服务器的 URL,它会显示“OK”。Response 结构在两种情况下都保持不变,因为它是同一个响应者(使用 Wireshark Capture 进行了验证,如果您愿意,我也可以附上它)。

在此处输入图像描述

#issuerKeyHash 字段 这里有趣的事实是,通过 WebProxy 和 Direct URL 发送到服务器的 OCSP 请求是不同的。不同之处在于 OCSP 请求不包括将issuerKeyHash请求发送到直接链接时。

Wireshark 捕获发送到 Webproxy 并返回“已验证”的 OCSP 请求:-

在此处输入图像描述

发送到返回状态“OK”的直接链接的 OCSP 请求的 Wireshark 捕获:-

在此处输入图像描述

问题是请求如何在一个实例中包含 issuerKeyHash 而在另一个实例中不包含。此外,即使来自服务器的 OCSP 响应相似(由 Wireshark Caputres 确认),为什么两个查询的状态也不相同。

在这方面,我还将感谢“URL 检索工具”或“certutil -verify”的任何有见地的文档/链接。

我还可以根据要求包含 Wireshark Captures。

我没有将 Java 和 Bouncycastle 作为标签包括在内,因为 Java、openssl 等都接受了 OCSP 响应,没有任何问题(根据 RFC 6960 有或没有 nextUpdate)。这个问题是为了了解 Microsoft certutil & OCSP Check here 发生了什么。

#Update #1 --- 开始更新 #1 ---

正如@Crypt32 所建议的那样;我可以验证当在 URL 字段中使用 URL 时,由于未知原因没有构建完整的证书路径,因此缺少IssuerKeyHash.

假设是响应始终包含IssuerKeyHash,这可能导致“OK”而不是“Verified”状态。为了确认这一点,我修改了响应以匹配请求并且没有发送IssuerKeyHash如果它没有在请求中交付但状态保持“正常”并且没有更改为“已验证”。

我们的想法是正确理解 Microsoft 应用程序如何处理 OCSP 响应以及如何正确实施响应程序,以使 Microsoft 应用程序不会一蹶不振。

研究正在进行中,任何建议和建议表示赞赏!

--- 结束更新 #1 ---

4

2 回答 2

3

回覆。下一个更新

Microsoft 使用轻量级 OCSP,因此需要 athisUpdateRFC 5019nextUpdate中引用的强制性。

回覆。证书实用程序

certutil感谢@Crypt32,现在已经澄清了有关的查询。

回覆。颁发者密钥哈希

在 的“下载 URL”框中使用自定义 URL 时certutil,不会生成完整的证书链,因此会导致 OCSP 请求没有IssuerKeyHash.

标准 CryptoAPI 客户端从不发送空的 OCSP 请求,IssuerKeyHash这只是certutil可能被忽略的特殊行为,因为它也倾向于在 Windows OCSP 服务器上失败(在我的最后也通过 Microsoft CA 进行了验证)

于 2018-02-22T09:00:18.700 回答
-1

“certutil -url”的详细信息

只回答部分。

“CertUtil”是一个通用的微软证书/PKI 工具。它可以做很多事情。

现在URL Retrieval Tool,当您使用“-url”参数启动它时,会发生此 GUI。

我觉得有点奇怪的是该-URL参数没有公开记录。

  • 它未在 Microsoft.com 文档中列出:https ://docs.microsoft.com/en-us/windows-server/administration/windows-commands/certutil
  • 它甚至没有在 ss64 上列出:https ://ss64.com/nt/certutil.html
  • 它未在“CertUtil -v -? - 显示所有动词的所有帮助文本”中列出,包括帮助。只有-URLCache-urlfetch没有-url
    PS C:\> Get-Command certutil | select -expand fileversioninfo | fl filename, fileversion
    FileName    : C:\WINDOWS\system32\certutil.exe
    FileVersion : 10.0.19041.1 (WinBuild.160101.0800)
    
    PS C:\> certutil -v -? | select-string ' -url'
      -URLCache         -- Display or delete URL cache entries
      CertUtil [Options] -URLCache [URL | CRL | * [delete]]
      -urlfetch         -- Retrieve and verify AIA Certs and CDP CRLs
    

但它确实有一些帮助文本,如果你特别要求它:

C:\> certutil.exe -URL -?
Usage:
  CertUtil [Options] -URL InFile | URL
  Verify Certificate or CRL URLs

Options:
  -f                -- Force overwrite
  -Unicode          -- Write redirected output in Unicode
  -gmt              -- Display times as GMT
  -seconds          -- Display times with seconds and milliseconds
  -split            -- Split embedded ASN.1 elements, and save to files
  -v                -- Verbose operation
  -privatekey       -- Display password and private key data
  -pin PIN                  -- Smart Card PIN
  -sid WELL_KNOWN_SID_TYPE  -- Numeric SID
            22 -- Local System
            23 -- Local Service
            24 -- Network Service

CertUtil -?              -- Display a verb list (command list)
CertUtil -URL -?         -- Display help text for the "URL" verb
CertUtil -v -?           -- Display all help text for all verbs

要启动“URL 检索工具”GUI,您可以像这样启动 certutil。

C:\> certutil -url http://example.com

在此处输入图像描述

于 2021-02-04T08:07:34.567 回答