Sto cercando di utilizzare i certificati a livello di codice anziché utilizzare lo store. Sto creando X509Certificate2
con nome file e password., verificare a livello di programmazione
Questo funziona correttamente quando ho aggiunto manualmente il certificato di origine all'archivio certificati in Trusted People. Tuttavia, preferirei non doverlo fare su ogni implementazione: preferirei farlo anche a livello di programmazione.
Quando rimuovo il certificato di origine dall'Archivio certificati ottengo un'eccezione.
Tutto ciò che ho letto sembra dire che devo aggiungere manualmente il certificato di root all'archivio certificati, altrimenti la catena di fiducia non funzionerà.
Domanda: C'è un modo programmatico per configurare la catena di trust, quindi non devo farlo manualmente?
Il codice si presenta come:
var serverCert = new X509Certificate2("FullPathToMyCertificate.cer", "Password");
Client.ClientCredentials.ServiceCertificate.DefaultCertificate = serverCert;
L'eccezione, che occures quando cerco di utilizzare il client, è:
System.IdentityModel.Tokens.SecurityTokenValidationException
The X.509 certificate CN=notrealcertname, OU=TPA, OU=BMP, OU=Projects, O=Somebody, C=US is not in the trusted people store.
The X.509 certificate CN=notrealcertname, OU=TPA, OU=BMP, OU=Projects, O=Somebody, C=US chain building failed.
The certificate that was used has a trust chain that cannot be verified.
Replace the certificate or change the certificateValidationMode.
A certificate chain could not be built to a trusted root authority.
Grazie mille per la risposta rapida, Yahia. Quindi, diciamo che volevo implementare un ** CustomCertificateValidator ** che imitasse il comportamento predefinito che si verifica quando non uso un ** CustomCertificateValidator ** ma ho aggiunto manualmente il certificato di root all'archivio certificati in Trusted People. Cosa metterei nel mio ** CustomCertificateValidator **? Presumibilmente, il comportamento predefinito valuta il ** serverCert ** rispetto al certificato radice in Trusted People, decide che è OK e consente al client di ricevere la risposta.Che cosa fa per fare questa valutazione? Grazie ancora, Steve. – Steve
a cosa si riferisce il client qui (ad esempio in Client.ServiceCertificate.), Naespace per favore? Grazie molto. – iTSrAVIE
Questo NON è uno spazio dei nomi. Questo codice presuppone che si trovi in una classe derivata da System.ServiceModel.ClientBase <> e questa "ClientBase" espone, dicendo semplicemente, una proprietà 'ClientCredentials' su cui è possibile eseguire '.ServiceCertificate' quindi '.Authentication' then '. CertificateValidationMode "e così via. Se hai bisogno di sapere esattamente, il ServiceCertificate è una classe X509CertificateRecipientClientCredential – quetzalcoatl