签署凭证 - 带私钥的X509证书 - SAML2

时间:2015-02-25 16:41:41

标签: c# x509 saml-2.0 pfx makecert

我对证书几乎一无所知,关于有CApublicprivate key,我正在学习。我正在使用SAML 2创建一个SSO登录,我已经使用了添加<Signature>元素的例外情况。

创建证书:

我在目录中有makecert.exepvk2pfx.exe的副本。我打开cmd并输入以下内容:

makecert -r -pe -n "CN=Test Cert" -sky exchange -sv testcert.pvk testcert.cer

弹出一个对话框,要求输入密码并确认密码。弹出另一个对话框询问密码(我假设这与我之前输入的相同,我一直在做)。这会在同一目录中创建testcert.cer

然后我将其输入cmd

pvk2pfx -pvk testcert.pvk -spc testcert.cer -pfx testcert.pfx

编辑:它要求我输入密码。我输入了在创建private key时使用的相同密码(cer)。

它在目录中创建一个pfx文件。


这是我感到困惑的地方。如果我将cer文件导入MMC,我可以访问它:

        X509Certificate2 cert = null;

        var store = new X509Store(StoreLocation.CurrentUser);
        store.Open(OpenFlags.ReadOnly);

        var storeCollection = store.Certificates.Find(X509FindType.FindBySubjectName, "Test Cert", false);
        if (storeCollection.Count == 1)
        {
            cert = storeCollection[0];
        }

        if (cert == null)
        {
            throw new ArgumentNullException("Certificate", "No certificate found.");
        }

        store.Close();

但是,当我这样做时,私钥(属性)是null。我读到私钥在pfx文件中。因此,我不是访问商店,而是这样做:

privateKey是我在使用makecert.exe

创建证书时使用的私钥
X509SigningCredentials clientSigningCredentials = new X509SigningCredentials(
     X509Certificate2(@"c:\directory\testcert.pfx", privateKey, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable));

我收到错误:The specified network password is not correct.

我还尝试将pfx文件导入MMC,而不是cer文件。它要我输入密码。我把密码放在用于使用makecert.exe创建证书的密码中。 总是告诉我密码不正确。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为makecertpvk2pfx在某种程度上是错误的。我知道这不是一个答案,但我找到了这个漂亮的小工具:

PluralSight's Self-Cert

基本上做了同样的事情,但当我查看证书时它有:

您有一个与此证书对应的私钥

另一个testcert.cer没有这个。

现在代码

X509SigningCredentials clientSigningCredentials = new X509SigningCredentials(
 X509Certificate2(@"c:\directory\testcert.pfx", privateKey, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable));

回来没有问题,我的SAML断言很好。