1
Ich habe ein X509Certificate2
mit einem privaten Schlüssel nicht exportierbare aus den Windows-Speichern mit diesem Code:X509Certificate2 von Speicher mit einem privaten Schlüssel
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;
}
}
Wenn ich das Zertifikat mit einem Web-Dienst von Windows verwenden, fragen Sie die privaten Schlüssel. Frage: Wie kann ich den privaten Schlüssel zum Zertifikat senden?
Grüße.
EDIT: Dies ist die Funktion mit der Verbindung als Web-Service:
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;
was meinst du "Wenn ich das benutze Zertifikat mit einem Webdienst Windows fragt den privaten Schlüssel "- In welchem Code rufen Sie diesen Webdienst an? –
* "Wie kann ich den privaten Schlüssel zum Zertifikat senden?" * - Sie nicht Der private Schlüssel bleibt im Geschäft geschützt. Sie senden nur das Client-Zertifikat, um den Client zu identifizieren. Der Client und der Server verwenden den öffentlichen Schlüssel des anderen Benutzers im entsprechenden Zertifikat, um einen sicheren Kanal zu erstellen. – jww