Windows Microsoft OCSP检查(OCSP与轻型OCSP);混淆的回答是;certutil-url"; 常规OCSP(RFC 6960)
我已经编写了一个OCSP响应程序,其中响应基于以下声明: 如果未设置nextUpdate,则响应程序将指示更新的 撤销信息随时可用 因此,我没有设置nextUpdate,只是像这里一样使用了BouncyCastleWindows Microsoft OCSP检查(OCSP与轻型OCSP);混淆的回答是;certutil-url"; 常规OCSP(RFC 6960),windows,ocsp,certutil,Windows,Ocsp,Certutil,我已经编写了一个OCSP响应程序,其中响应基于以下声明: 如果未设置nextUpdate,则响应程序将指示更新的 撤销信息随时可用 因此,我没有设置nextUpdate,只是像这里一样使用了BouncyCastleBasicOCSPRespBuilder(它默认设置此更新,如Wireshark捕获中所示): 但是这些响应被IIS中的证书身份验证程序拒绝。尝试certutil时,响应状态始终为“过期” 这是使用“certutil-url”命令验证的 轻型OCSP(RFC 5019) 谷歌搜索显示
BasicOCSPRespBuilder
(它默认设置此更新,如Wireshark捕获中所示):
但是这些响应被IIS中的证书身份验证程序拒绝。尝试certutil时,响应状态始终为“过期”
这是使用“certutil-url”命令验证的
轻型OCSP(RFC 5019)
谷歌搜索显示,微软支持轻量级OCSP,如下所述:
客户端必须检查nextUpdate字段是否存在,并且必须
确保当前时间,以GMT时间表示,如中所述
第2.2.4节介于本次更新和下一次更新之间。如果
缺少nextUpdate字段,客户端必须拒绝响应
因此,我修改了实现,以包括nextUpdate日期(未来几分钟),如下所示:
basicOCSPRespBuilder.addResponse(certID, responseList.get(certID), getNextUpdateDate(), null);
这使我摆脱了“过期”状态问题,但现在的问题是,当它部署到Web服务器时,我尝试执行“certutil-url”检查,它会在证书中为WebProxy链接返回“Verified”,但如果我直接提供服务器的url,它会显示“OK”。在这两种情况下,响应结构保持不变,因为它是相同的响应者(使用Wireshark捕获进行验证,如果您愿意,我也可以附加此内容)
issuerKeyHash字段
这里有趣的事实是,通过WebProxy和直接URL发送到服务器的OCSP请求是不同的。不同之处在于OCSP请求在向直接链路发送请求时不包括issuerKeyHash
Wireshark捕获发送到Webproxy的OCSP请求,该请求返回“已验证”:-
Wireshark捕获发送到返回状态“OK”的direct link的OCSP请求:-
问题是,请求如何在一个实例中包含issuerKeyHash,而在另一个实例中不包含issuerKeyHash。此外,为什么即使来自服务器的OCSP响应相似(由Wireshark Caputres确认),两个查询的状态也不相同
我也将非常感谢任何关于“URL检索工具”或“certutil-verify”的有见地的文档/链接
我还可以根据要求提供Wireshark捕获
我没有将Java和Bouncycastle作为标记,因为OCSP响应被Java、openssl等接受,没有任何问题(根据RFC 6960,有无nextUpdate)。这个问题是为了了解Microsoft certutil的情况&这里的OCSP检查
更新#1
---开始更新#1---
正如@Crypt32所建议的那样;我可以验证,在URL字段中使用URL时,由于未知的原因,没有构建完整的证书路径,因此缺少IssuerKeyHash
假设响应始终包含IssuerKeyHash
,这可能导致“OK”而不是“Verified”状态。为了确认这一点,我修改了响应以匹配请求,并且如果请求中没有传递,但状态仍然为“OK”,并且没有更改为“Verified”,则不会发送IssuerKeyHash
我们的想法是正确理解Microsoft应用程序如何处理OCSP响应,以及如何正确实现响应程序,从而使Microsoft应用程序不会一败涂地
正在进行研究,请提供任何建议和建议
---结束更新#1---Re。下一个日期
Microsoft使用轻量级OCSP,因此需要一个thisUpdate
和nextUpdate
,如中所述
重新。certutil
由于@Crypt32,关于certutil
的查询现已澄清
重新。IssuerKeyHash
在certutil
的“下载URL”框中使用自定义URL时,不会生成完整的证书链,因此会导致没有IssuerKeyHash
的OCSP请求
标准CryptoAPI客户端从不发送带有空IssuerKeyHash
的OCSP请求,这只是一种特殊的certutil
行为,可能会被忽略,因为它在Windows OCSP服务器上也会失败(在我这一阶段也通过Microsoft CA验证)有关“certutil-url”的详细信息
只有部分答案
“CertUtil”是一个通用的Microsoft证书/PKI工具。它可以做很多事情
现在,当您使用“-URL”参数启动它时,就会出现这个URL检索工具GUI
我发现有点奇怪的是,-URL
参数没有公开文档
- 未在Microsoft.com文档中列出:
- 它甚至没有在ss64上列出:
- “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
据我所知,当您在证书中使用OCSP URL时(URL文本框为空,且radiobutton位于OCSP上),certutil执行证书链构建,并可以获取颁发者证书和获取issuerKeyHash
。当您在certutil中提供显式URL时,它不会构建证书路径,因此issuerKeyHash
为空<代码>已验证
状态表示工具获得了有效的OCSP响应,并且证书状态为良好
<代码>正常
状态表示OCSP以
C:\> certutil -url http://example.com