我制作了一个公开localhost的web界面的工具。现在,我需要此Web界面为页面注册https前缀。为此,我使用BouncyCastle生成根证书和ssl证书。这一切都很好(生成,签名和绑定到端口)。 IE通过https 显示页面,不带证书警告等。
但是,当第三方应用尝试显示网页时,它会失败(无法加载并显示'about:blank')。因为它是一个嵌入式webbrowser,我不确定究竟是什么问题。因此,沿着其他东西,我试图用fiddler来确定问题 - 只是发现它接受了fiddler生成的证书。
所以我所做的就是导出fiddler证书并从商店中删除所有自定义证书。然后,我在我生成的证书所在的完全相同的商店中导入了fiddler证书。我还确保构建(通过查看证书属性可以检查的所有内容)完全相同。通过使用Windows MMC,单击证书我可以看到没有区别,即使顺序是相同的。关键等等 - 全部匹配。唯一略有不同的是:证书中的序列号比fiddler生成的序列号短。
所以我最终得到的是4个证书(我从fiddler中删除了所有原始版本):来自fiddler的1个ssl和1个root以及来自BouncyCastle的1个ssl和1个root。在本地机器上,根源是受信任的,ssl是个人的。现在,当我使用netsh将fiddler证书绑定到端口时,它可以工作。当我将自己的证书绑定到端口时,它会失败。
我没有想法,因为所有属性对我来说都是一样的。
虽然有一件事(同样,我不知道出了什么问题,所以这可能是无关紧要的):在SSL证书上(所以不是根证书)SKI指向无处(或者,至少,我没有看到它指向的地方),但这似乎也是小提琴证书的情况。显然,对于两个证书,权威密钥都指向它们各自的根。 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个看似相同的证书会产生不同的影响?在隐藏的属性或其他什么东西我有什么遗漏?如果是这样,我应该寻找什么?
答案 0 :(得分:-1)
Ahhhhhhhhhhhhhhh ......在这篇文章发表后几分钟我看到了这个漏洞......它与证书根本没有关系,但它与端口绑定的方式......我使用的代码来自{{3绑定证书。这条线造成了问题......
configSslParam.DefaultFlags = (uint)NativeMethods.HTTP_SERVICE_CONFIG_SSL_FLAG.HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT;
将标志更改为0使其有效....
浪费时间.... :(