首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用私钥存储的X509Certificate2

使用私钥存储的X509Certificate2
EN

Stack Overflow用户
提问于 2016-04-02 08:49:12
回答 1查看 1.5K关注 0票数 1

我有一个带有私钥的X509Certificate2,它不能从Windows导出,下面的代码是:

代码语言:javascript
复制
X509Certificate2 oCertificato = null;

X509Store my = new X509Store(StoreName.My, StoreLocation.CurrentUser);
my.Open(OpenFlags.ReadOnly);
System.Security.Cryptography.RSACryptoServiceProvider csp = null;
foreach (X509Certificate2 cert in my.Certificates)
{
    if (cert.SerialNumber.Trim() == cSerial)
    {
        csp = (System.Security.Cryptography.RSACryptoServiceProvider)cert.PrivateKey;
        oCertificato = cert;
        break;
    }
}

当我在web服务中使用证书时,Windows询问私钥。问:如何将私钥发送到证书?

致以问候。

编辑:这是将连接作为web服务的函数:

代码语言:javascript
复制
string cEndPoint = Leo.myendpoint();

ServicePointManager.ServerCertificateValidationCallback = CertificateHandler;

datiOperatore DataOp = Leo.OperatorData();//Operator data request from system (it's ok)
datiApplicativo DataApp = Leo.AppData();//program data request from system (it's ok)

var b = new CustomBinding();
var sec = new AsymmetricSecurityBindingElement(
    new X509SecurityTokenParameters(X509KeyIdentifierClauseType.Any, SecurityTokenInclusionMode.Never),
    new X509SecurityTokenParameters(X509KeyIdentifierClauseType.Any, SecurityTokenInclusionMode.AlwaysToRecipient));
sec.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
sec.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
sec.IncludeTimestamp = true;
sec.SetKeyDerivation(false);
sec.KeyEntropyMode = System.ServiceModel.Security.SecurityKeyEntropyMode.ServerEntropy;
sec.EnableUnsecuredResponse = true;

b.Elements.Add(sec);

b.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8));
b.Elements.Add(new HttpsTransportBindingElement());

EndpointAddress ea = new EndpointAddress(cEndPoint);

oClient = new CVPClient(b, ea);

X509Certificate2 certSigned = Leo.GetSignedCert();//HERE IS THE REQUEST OF PRIVATE KEY
X509Certificate2 certUnsigned = Leo.GetUnSignedCertificate();

oClient.ClientCredentials.ClientCertificate.Certificate = certSigned;
oClient.ClientCredentials.ServiceCertificate.DefaultCertificate = certUnsigned;
EN

回答 1

Stack Overflow用户

发布于 2016-04-02 14:54:13

我解决了问题:

代码语言:javascript
复制
string cPin = "12345";
System.Security.SecureString SecurePIN = new System.Security.SecureString();
foreach (char ch in cPin)
{ SecurePIN.AppendChar(ch); }
var rsa = (RSACryptoServiceProvider)certSigned.PrivateKey;
string ContinerName = rsa.CspKeyContainerInfo.KeyContainerName;
string CspName = rsa.CspKeyContainerInfo.ProviderName;
int CspType = rsa.CspKeyContainerInfo.ProviderType;
CspParameters csp = new CspParameters(CspType, CspName, ContinerName, new System.Security.AccessControl.CryptoKeySecurity(), SecurePIN);
RSACryptoServiceProvider CSP = new RSACryptoServiceProvider(csp);

我希望它对其他人有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36371174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档