C# 签名凭据-使用私钥的X509证书-SAML2
我对证书几乎一无所知,因为有C# 签名凭据-使用私钥的X509证书-SAML2,c#,x509,saml-2.0,pfx,makecert,C#,X509,Saml 2.0,Pfx,Makecert,我对证书几乎一无所知,因为有CA、public和private key,我边学边用。我正在使用saml2创建一个SSO登录,除了添加元素外,我还使用了它 创建证书: 我在一个目录中有一份makecert.exe和pvk2pfx.exe。我打开cmd并键入以下内容: makecert -r -pe -n "CN=Test Cert" -sky exchange -sv testcert.pvk testcert.cer 弹出一个对话框,询问我输入的密码和确认密码。另一个对话框弹出询问密码(我假设
CA
、public
和private key
,我边学边用。我正在使用saml2
创建一个SSO登录,除了添加
元素外,我还使用了它
创建证书:
我在一个目录中有一份makecert.exe
和pvk2pfx.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
编辑:它要求我输入密码。我输入了创建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));
我收到一个错误:指定的网络密码不正确。
我还尝试将pfx
文件导入MMC
,而不是cer
文件。它要求我输入密码。我使用makecert.exe
创建证书时使用的密码。它总是告诉我密码不正确
我做错了什么?我认为makecert
和pvk2pfx
在某种程度上是不正确的。我知道这不是答案,但我发现了这个漂亮的小工具:
基本上做了相同的事情,但当我查看证书时,它有:
您有一个与此证书对应的私钥
另一个testcert.cer
没有这个
现在是代码
X509SigningCredentials clientSigningCredentials = new X509SigningCredentials(
X509Certificate2(@"c:\directory\testcert.pfx", privateKey, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable));
返回时没有问题,我的SAML断言很好执行。您需要加载pfx,而不是cer。证书只有公钥。PFX是证书和私钥的包。您应该知道makecert.exe已被弃用,不再受支持。@pm100-好,但为什么当我尝试导入到MMC
和/或使用X509SigningCredientals
加载时,私钥总是不正确?因为PFX有密码,你必须在阅读时提供密码。文件上说你必须提供pvk2pfx的密码,但你没有在question@pm100-对不起-忘了。我提供了与创建cer
文件时相同的私钥
密码。