- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在考虑允许用户选择一个证书,该证书将用于我们的一项服务的 SSL,最初用户需要选择一个商店名称,证书列表将显示在下拉列表中,我删除了读完这篇article证书只能来自 本地计算机 下的 MY 存储位置。在查看了几篇文章后,我创建了以下代码
using (var store = new X509Store(StoreName.My,StoreLocation.LocalMachine))
{
store.Open(OpenFlags.ReadOnly);
var certificates = store.Certificates;
foreach (var c in certificates)
{
bool isSslCompatible = false;
bool ekuExists = false;//when this value does not exist, certificate can be used for all purposes [ https://tools.ietf.org/html/rfc3280#section-4.2.1.13 ]
if (c.HasPrivateKey)//only chose those that have a private key
{
foreach (X509Extension extension in c.Extensions)
{
if (extension.Oid.Value == "2.5.29.37")//[ Friedlname = Enhanced Key Usage, names are localised, firendly name cannot be used
{
ekuExists = true;
X509EnhancedKeyUsageExtension ext = (X509EnhancedKeyUsageExtension) extension;
OidCollection oids = ext.EnhancedKeyUsages;
foreach (Oid oid in oids)
{
if (/*oid.FriendlyName == "Server Authentication" || -- cannot be used as friendly names are localised*/
oid.Value == "1.3.6.1.5.5.7.3.1")
{
isSslCompatible = true;
}
}
}
}
if (isSslCompatible || !ekuExists)//add only if value is ssl compatible
{
SSLCertficate certificate = new SSLCertficate();
certificate.CertificateHash = c.GetCertHash();
certificate.CertificateHashString = c.GetCertHashString();
certificate.CertificateThumbPrint = c.Thumbprint;
certificate.FriendlyName = c.FriendlyName;
certificate.SubjectName = c.Subject;
certificate.HasPrivateKey = c.HasPrivateKey;
sslCertificates.Add(certificate);
}
}
}
上面代码的这个问题是它看不到证书并且没有所有预期目的,我不确定如何获得这些,
检查属性窗口,我得到以下信息, ,上面的代码似乎没有检测到这个证书,在 IIS 下检查,我能够将这个特定的证书用于 Https,我的代码是否缺少一些东西来检测有效的 SSL 证书?
最佳答案
MMC 用户界面有点误导。它的意思是“启用证书已经声明的所有用途”。
在您的过滤代码中,您要求存在 EKU 扩展并具有 TLS 服务器身份验证目的。
IETF RFC 3280 section 4.2.1.13说
If the extension is present, then the certificate MUST only be usedfor one of the purposes indicated. If multiple purposes areindicated the application need not recognize all purposes indicated,as long as the intended purpose is present. Certificate usingapplications MAY require that a particular purpose be indicated inorder for the certificate to be acceptable to that application.
这通常被认为是“如果没有扩展,则证书被认为对所有目的都有效”。 TLS RFC 似乎没有具体引用 id-kp-serverAuth
EKU,这意味着它是一个“严格约定”的应用程序约定来检查它。
有不同的规范可以覆盖“对所有目的有效”的隐式评估,例如 IETF RFC 3161 (可信时间戳)第 2.3 节:
Thecorresponding certificate MUST contain only one instance of theextended key usage field extension as defined in [RFC2459] Section4.2.1.13 with KeyPurposeID having value:
id-kp-时间戳。此扩展必须是关键的。
但是,再说一次,TLS 从未真正谈论过它。
所以你需要更复杂一些。 Web 浏览器使用的逻辑是 if (!hasEkuExtension || hasServerAuthEku)
,对比你的 if (hasServerAuthEku)
。
此外,您应该(几乎)总是通过它们的Value
来比较Oid
对象,而不是它们的FriendlyName
。 FriendlyName
已本地化,因此您的代码只能在英语系统上可靠地运行。 Oid.Value
值是证书中的实际内容(文本化形式)。 (唯一的异常(exception)是当 Value 为 null 时,因为这意味着 API 试图表示一个没有定义 OID 的值(由于 Curve25519,这实际上只发生在 ECCurve 上))。
关于c# - X509 证书预期用途和 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51322480/
XML可以应用于 WEB 开发的许多方面,常用于简化数据的存储和共享 XML 把数据从 HTML 分离 现在的HTML 文档一般都是显示动态数据,每当数据改变时将花费大量的时间来编辑 HTML
在类(class)(方案)中,我们最近学习了允许函数接受任意数量参数的语法,例如; (define len (lambda args (length args))) >(len 1 2 3
在 redis-cli 中执行 info 命令时,会列出与该服务器相关的所有信息。 “evicted_keys”的目的是什么? 最佳答案 Redis 可以配置为根据需要自动清除键。如果这样配置,red
golang 空结构体 struct{} 可以用来节省内存 ? 1
有人可以解释一下资源文件夹中的 Info.plist 是什么吗?我如何在我的应用程序中使用它?提前致谢。 最佳答案 您可以在Info.plist文件中为所有类型的设备指定不同的常规资源和应用程序配置,
我需要减小可执行文件的大小,并且经常在我的可执行文件中将某些“不必要的” uses占用一定的大小。 例如: Unit1连接到Unit2,但是两个单元的导入为“ System.SysUtils”。 然后
我是 OOP 的新手。虽然我了解多态是什么,但我无法真正使用它。我可以有不同名称的函数。为什么我应该尝试在我的应用程序中实现多态性。 最佳答案 在严格类型化的语言中,多态性对于拥有不同类型对象的列表/
Possible Duplicate: What is the difference between a delegate and events? Possible Duplicate: Differ
这个问题在这里已经有了答案: Custom index.html javadoc page? (2 个答案) 关闭 7 年前。 我使用的是eclipse。一般情况下我们可以使用javadoc.exe
你能解释一下吗ValidateAntiForgeryToken目的并向我展示有关 MVC 4 中的 ValidateAntiForgeryToken 的示例? 我找不到任何解释此属性的示例? 最佳答案
我正在学习 RxSwift 并试图了解 Observable 和 PublishSubject aka Sequence 之间的主要区别。 据我了解,Sequences/PublishesSubjec
有时有人说,在使用 Azure 表时,实际上存在第三个关键分区数据 - 表名称本身。 我在执行分段查询时注意到 TableContinuationToken 有一个 NextTableName 属性。
在Apple提供的aurioTouch项目中,听说在performRender()函数下的AudioController文件中的AudioBufferList ioData携带了mic到音频播放器的音
MSDN 文档没有详细解释它的用途。 由于它是可选的,我几乎假设它类似于某种元数据。 我现在如何看待它,我想用它来为特定用户指定缓存,例如: new CacheItem(key: "keyName",
我正在学习 browserify,我正在尝试用它做两件基本的事情: 转换(通过 shim)非 CommonJS 模块以实现易用性和依赖跟踪 捆绑项目特定的库 我找到了一个工作流程,说明如何使用 Gul
我通过按 CTRL + C 访问 eix 1.8.2 的 Break 菜单。它看起来像这样: BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
在 codeLabs 教程(Android - Kotlin - Room with a View)中,他们使用“viewModelScope.launch(Dispatchers.IO)”来调用插入
我通过按 CTRL + C 访问 eix 1.8.2 的 Break 菜单。它看起来像这样: BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
请耐心等待,因为我没有太多地使用压缩算法,所以这对你们中的一些人来说可能是显而易见的。当某些流媒体视频开始滞后时,我总是注意到这一点。当我看到这个问题时我才意识到我很好奇: Twitter image
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 年前。 Improv
我是一名优秀的程序员,十分优秀!