- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法在 iOS 上使用 CRL。我创建了两个测试用例。我有一个由 CA 颁发的有效证书。我有另一个由 CA 颁发的有效证书,但 CA 已将该证书添加到其 CRL。
然后我设置了一个启用 CRL 检查的吊销策略,并要求它成功。
func crlValidationTest(trustedCert: SecCertificate, certToVerify: SecCertificate) -> Bool {
let basicPolicy = SecPolicyCreateBasicX509()
let crlPolicy = SecPolicyCreateRevocation(kSecRevocationOCSPMethod | kSecRevocationCRLMethod | kSecRevocationRequirePositiveResponse)!
var trust: SecTrust?
SecTrustCreateWithCertificates(NSArray(object: certToVerify), NSArray(objects: basicPolicy, crlPolicy), &trust)
SecTrustSetAnchorCertificates(trust!, NSArray(object: trustedCert))
SecTrustSetNetworkFetchAllowed(trust!, true)
var trustResult = SecTrustResultType.invalid
guard SecTrustEvaluate(trust!, &trustResult) == errSecSuccess else {
return false
}
return trustResult == SecTrustResultType.proceed || trustResult == SecTrustResultType.unspecified
}
kSecRevocationRequirePositiveResponse
flag,双方都成功了。我已经尝试了仅使用 OSCP 或仅使用 CRL 的所有不同排列,但没有任何效果符合我的预期。
SecPolicyCreateRevocation
状态:
It's usually not necessary to create a revocation policy yourself unless you wish to override default system behavior, for example to force a particular method, or to disable revocation checking entirely.
SecPolicyCreateBasicX509
策略允许两者都成功(当第二个证书失败时),那么 Apple 的默认行为是根本不进行 CRL 检查吗?
RequirePositiveResponse
时所有失败标志被检查。
URLRequest
直接从设备导航到 CRL。 ,并且能够毫无问题地获取设备上的 CRL 数据。
certutil -f -urlfetch -verify MYCERT.cer
使用 certutil,我附上了
Fiddler到运行命令的框。我收到了 iOS 没有给我的预期结果,并且我看到了一个通过 fiddler 通过 HTTP 向 CRL 发出的出站请求。
最佳答案
在 Apple 平台上,客户端既不检查 CA 的证书吊销列表 (CRL),也不默认使用 OCSP。
然而,Apple 平台支持 OCSP 装订,并且它们提供了一种称为撤销增强的替代机制,这确实可能导致 OCSP 调用,如下所示。
OCSP 装订
首先解释一下OCSP装订:
Online Certificate Status Protocol (OCSP) stapling, formally known as the TLS Certificate Status Request extension, is a standard for checking the revocation status of X.509 digital certificates.1 It allows the presenter of a certificate to bear the resource cost involved in providing Online Certificate Status Protocol (OCSP) responses by appending ("stapling") a time-stamped OCSP response signed by the CA to the initial TLS handshake, eliminating the need for clients to contact the CA, with the aim of improving both security and performance.
...
let session = URLSession(configuration: .default)
...
func onDownloadAction() {
let url = URL(string: "https://revoked.grc.com")!
self.download(from: url) { (result, error) in
if let result = result {
print("result: " + result)
} else {
print("download failed")
if let error = error {
print("error: \(error)")
}
}
}
}
func download(from url: URL, completion: @escaping(String?, Error?)->Void) {
let dataTask = self.session.dataTask(with: url) { data, response, error in
guard let data = data else {
if let error = error {
completion(nil, error)
return
}
completion(nil, NSError(domain: "DownloadFailure", code: 0, userInfo:nil))
return
}
guard let response = response as? HTTPURLResponse else {
completion(nil, NSError(domain: "ResponseFailure", code: 0, userInfo:nil))
return
}
print("http status: \(response.statusCode)")
let res = String(bytes: data, encoding: .utf8)
completion(res, nil)
}
dataTask.resume()
}
nslookup revoked.grc.com
我们得到服务器的 IP 地址,然后可以在 Wireshark 中使用
ip.addr==4.79.142.205
进行过滤.
revoked
.
2019-10-12 21:32:25.734382+0200 OCSPTests[6701:156558] ATS failed system trust
2019-10-12 21:32:25.734526+0200 OCSPTests[6701:156558] Connection 1: system TLS Trust evaluation failed(-9802)
2019-10-12 21:32:25.734701+0200 OCSPTests[6701:156558] Connection 1: TLS Trust encountered error 3:-9802
2019-10-12 21:32:25.734787+0200 OCSPTests[6701:156558] Connection 1: encountered error(3:-9802)
2019-10-12 21:32:25.737672+0200 OCSPTests[6701:156558] Task <12408947-689F-4537-9642-C8F95E86CA62>.<1> HTTP load failed, 0/0 bytes (error code: -1200 [3:-9802])
download failed
error: Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x6000037f8510>, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, NSErrorPeerCertificateChainKey=(
"<cert(0x7fda78828200) s: revoked.grc.com i: DigiCert SHA2 Secure Server CA>",
"<cert(0x7fda7882b200) s: DigiCert SHA2 Secure Server CA i: DigiCert Global Root CA>"
), NSUnderlyingError=0x600000be9170 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x6000037f8510>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=(
"<cert(0x7fda78828200) s: revoked.grc.com i: DigiCert SHA2 Secure Server CA>",
"<cert(0x7fda7882b200) s: DigiCert SHA2 Secure Server CA i: DigiCert Global Root CA>"
)}}, NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSErrorFailingURLKey=https://revoked.grc.com/, NSErrorFailingURLStringKey=https://revoked.grc.com/, NSErrorClientCertificateStateKey=0}
openssl crl -inform DER -text -in ssca-sha2-g6.crl | grep 0371B58A86F6CE9C3ECB7BF42F9208FC
关于ios - 如何让 CRL 和 OCSP 检查在 iOS 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58227552/
我有一个工作证书,但由于某种原因无法从中获取 CRL 信息。 我运行它以确保它正常工作: openssl x509 -outform PEM -in cert_2_.pem 这是输出: -----BE
全部, 有人对 Azure 上 CRL 使用的最佳实践有最好的看法吗? 背景:使用客户端证书进行身份验证的 Azure 托管服务。我们拥有一个 CA(我们拥有、管理和信任)并向客户端颁发链式证书,用于
SSLLabs.com 报告我的 SSL 证书有问题。 我以前从未见过这种错误。我的所有 5 个域都使用 Comodo SSL(单独的证书)并且都显示完全相同的错误消息。 在我的专用服务器上是否需要更
我需要每周一次下载并安装大约 50 个 CRL,并将它们安装在多个 Windows 服务器上。下载是简单的部分,有什么方法可以编写 CRL 导入过程的脚本吗? 最佳答案 这是我的最终来源(为公众略微删
我正在使用 OpenSSL 验证自定义 PKI 中的签名代码。如何验证证书层次结构中每个节点的 CRL。 我的层次结构是:RootCA -> SubCA1 -> SubCA2 -> EndUser。我
我想使用Android的硬件KeyStore功能,所以我使用Pixel3手机来获取KeyStore对象的证书链,如this article所示. 查看一个特定的.cer例如,文件中的 CRL 分发点为
我希望这个问题不会与 StackOverFlow FAQ 规则混淆 所以,例如,当使用用 C++ 编写的库时,这意味着我们在这些 DLL 中有一些代码将要执行,当在这种情况下执行软件时,这部分代码将由
查看 uWSGI 文档,我看到我可以指定一个 CA 证书来检查任何传入的 SSL 请求并确保它们具有由该 CA 签名的客户端证书(http://uwsgi-docs.readthedocs.org/e
如何在 java 中设置默认的 CRL 路径。至于现在不包含 CRL 分发点的证书,我得到这个: PKIX path validation failed: java.security.cert.Cer
我已通过阅读以下 msdn 链接使用 makecert.exe 创建了一个自签名证书: https://msdn.microsoft.com/en-us/library/ff648498.aspx 但
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwa
据我所知和提到的here浏览器检查特定证书吊销状态的主要技术有两种:使用在线证书状态协议(protocol) (OCSP) 或在证书吊销列表 (CRL) 中查找证书。 嗯,我知道有一些在线 OCSP
如何以编程方式检查某个证书是否已从其 CA CRL 列表中吊销? 我这样做: X509Chain ch = new X509Chain(); ch.ChainPolicy.RevocationMode
有没有办法立即使 CRL(证书撤销列表)缓存失效,从而导致客户端再次下载 CRL? 我想在 C# 中实现它而不求助于命令行“certutil.exe”。 更好的是能够设置失效时间(比如 UtcNow
我有一个基本的 nginx 家庭服务器设置,我使用客户端证书来允许外部访问。我已按照本指南进行所有设置,并按预期工作: https://gist.github.com/rkaramandi/20a04
我正在使用 WinVerifyTrust 来验证文件签名。 互联网连接非常糟糕,所以我只想检查本地缓存。 问题是我不知道应该如何设置 WinTrustData 中的参数 关于 fdwRevocatio
我正在使用的引用书(Network Security with OpenSSL,由 Viega、Messier 和 Chandra 撰写)第 133 页指出: [...] an application
我们正在使用 Python 和 OpenSSL 读取 CRL 文件以提取已撤销证书序列号的列表。在解析文件之前,我们需要添加检查以验证 CRL 是否已使用受信任的证书导出。 在命令行中,适当的 Ope
我正在使用 python、pyopenssl 库来根据其 CA 验证 CRL。 我拥有的是: 我获得证书颁发机构: with open(ca_file_path) as ca_file_obj:
我有一个 CRL 和一个用作 CA 证书的自签名证书。我需要验证同一个 CA 是否同时颁发了 Java 中的 CRL 和根证书。我的想法是这样的: X500Principal rootCertIssu
我是一名优秀的程序员,十分优秀!