【问题标题】:Why does makecert not make a *valid* certificate?为什么 makecert 不制作 *valid* 证书?
【发布时间】:2013-01-21 11:05:27
【问题描述】:

我想创建一个 X509 证书用于测试目的。此证书必须由 3 个开发人员在其本地计算机上共享(即所有人共享相同的证书,以便我们可以使用相同的指纹)。

因此,此证书中的私钥必须是可导出的。

我使用以下命令创建证书:

makecert -r -pe -n "CN=mytestsite.local" -b 01/01/2000 -e 01/01/2036 -ss my -sr localMachine -sky exchange localhost.cer

此证书工作正常,但问题是调用 Certificates.Find 时 isValid 参数必须为 false...

        var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
        store.Open(OpenFlags.ReadOnly);

        var cert = store.Certificates.Find(
                                X509FindType.FindByThumbprint,
                                Config.PdfCertificateThumbprint, 
                                false  //********************* This has to be false.
                              ).OfType<X509Certificate>().FirstOrDefault();

只要我将该 IsValid 属性设置为 True,Find 方法就不再返回我的证书。为什么 makecert 会生成“无效”证书?或者如何找出证书被视为无效的原因?

【问题讨论】:

  • 因为它不受信任(即证书链没有以安装在证书存储中的证书结尾)?

标签: c# x509certificate x509certificate2 makecert


【解决方案1】:

嗯,这是因为它不像互联网上使用的“真实”ssl 证书那样由“受信任的证书颁发机构”颁发。 (例如由 VeriSign 签发)

您可以在本地执行的操作是在您的用户和/或本地计算机的受信任证书中手动添加证书。但是在您获得由 CA(证书颁发机构)颁发的有效 SSL 证书之前,必须对所有使用它的人执行此过程。

但是您的问题指出了它仅用于开发目的的情况,因此您可以手动将证书添加到 Trusted,或者您可以覆盖 .Net 中的证书验证机制并编写将认为您的证书有效的代码。

【讨论】:

  • 太好了,谢谢。我将尝试添加到受信任的证书存储区。
  • 在我这样做之前...有几个“受信任的”证书文件夹。您的意思是将证书添加到“受信任的根证书颁发机构”类别吗?
  • 是的,根据经验,如果您将其添加到受信任的人,它也可以工作
  • @willem 请记住,将它添加到本地计算机和当前用户可能是个好主意
【解决方案2】:

您可能想尝试以下可在客户端配置中使用的设置来绕过证书验证过程:

    <serviceCertificate>
      <authentication certificateValidationMode="None"
                      revocationMode="NoCheck" />
    </serviceCertificate>

【讨论】:

    猜你喜欢
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2018-04-14
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多