【发布时间】:2017-02-01 01:05:09
【问题描述】:
我制作了一个工具,可以为 localhost 公开一个 Web 界面。现在,我需要这个 Web 界面来为页面注册一个 https 前缀。为此,我使用 BouncyCastle 生成根证书和 ssl 证书。这一切都很好(生成、签名和绑定到端口)。 IE 通过 https 没有证书警告等显示页面。
但是,当第三方应用程序尝试显示网页时,它会失败(无法加载和显示“about:blank”)。因为它是一个嵌入式网络浏览器,所以我不确定确切的问题是什么。因此,除了其他东西,我尝试使用提琴手来确定问题 - 只是发现它确实接受提琴手生成的证书。
所以我所做的是导出提琴手证书并从商店中删除所有自定义证书。然后,我在我生成的证书所在的完全相同的商店中导入了提琴手证书。我还确保构建(您可以通过查看证书属性检查的所有内容)完全相同。通过使用 Windows MMC,单击证书我可以看到没有区别,即使顺序是相同的。关键等 - 都匹配。唯一略有不同的是:我的证书中的序列号比 fiddler 生成的序列号短。
所以我最终得到的是 4 个证书(我从 fiddler 中删除了所有原始证书):来自 fiddler 的 1 个 ssl 和 1 个 root 以及来自 BouncyCastle 的 1 个 ssl 和 1 个 root。根是可信的,ssl 是个人的,都在本地机器上。现在,当我使用 netsh 将提琴手证书绑定到端口时,它可以工作。当我将自己的证书绑定到端口时,它会失败。
我不知道为什么所有属性对我来说都一样。
但有一件事(再次,我不知道出了什么问题,所以这可能无关紧要):在 SSL 证书(所以不是根证书)上,SKI 指向无处(或者,至少,我看不到它指向的位置),但这似乎也是提琴手证书的情况。显然,对于这两个证书,授权密钥 id 都指向它们各自的根。 SSL 证书上的 SKI 由
设置 certificateGenerator.AddExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(subjectKeyPair.Public));
顺便说一句,我使用虚拟机进行测试,每次都会重置,所以我不认为我在路上的某个地方搞砸了证书存储。该工具保持不变,唯一改变的是绑定证书,两者都注册到'localhost'
IE thirdparty browser
fiddler's good good
Own's good fail (without message)
为什么 2 个看似相同的证书会产生不同的影响?我在隐藏属性中缺少什么吗?如果是这样,我应该寻找什么?
【问题讨论】:
-
没有将证书绑定到端口这样的事情。
-
感谢您非常有用的评论和 2 票反对!!!我会记住这一点的!看到我尽了最大努力A)用我拥有的知识(sed)解释我的问题,这是完全有道理的。 B)彻底解释我所尝试的 C)发布了对我有用的解决方案,以便它可以帮助其他人。下次我真的应该在发布问题之前先弄清楚问题和解决方案是什么(???)
标签: certificate ssl-certificate fiddler bouncycastle