Zertifikate: kann Nicht finden, das Zertifikat und den privaten Schlüssel für die Entschlüsselung Fehler beim anmelden
Ich arbeite in der Firma mit vielen Servern und Pcs für die Entwickler. Server sind win2003, PC-Entwickler Windows XP.
In einem server Win2003 named preiis01, in preproduction Umgebung, andere Menschen im Unternehmen installieren Sie ein client-Zertifikat unter Verwendung durch andere Benutzer (domainCompany\adminsystems) für die Protokollierung in server-preiis01.
Jeder admin verwendet der Benutzer "domainCompany\adminsystems" für die log-in server preiis01 (mit Terminal Server, Remote Desktop für Windows XP).
den admin-Benutzer ist domainCompany\adminsystems" installiert Zertifikat.
Admin-Benutzer installieren es wie folgt:
Session-login wie "domainCompany\adminsystems"
Zertifikat ist die PFX-Datei. Tun Sie "PFX Installieren" und Verwendung des Assistenten. Die privaten Schlüssel nicht überprüfen Sie für den export.
Kennwort eingeben und installieren.
Es ist eine Web-Anwendung, die AppPool-Identity ist: NETWORK SERVICE-Konto.
Webserver ist IIS 6.0.
in preiis01,
Dass admin-Benutzer ausgeführt mmc -> Snap-in -> Zertifikate für Lokalen Computer. In Knoten -> Persönlich -> Zertifikate, die er gesehen hatte, das client-Zertifikat:
Ausgestellt ENTIDAD UNTERNEHMEN VERSICHERN SA - CIF-A93 - NOMBRE SURNAME1 NAME1
Ausgestellt Von FNMT Class 2 CA
In den Eigenschaften des Zertifikats der Fingerabdruck: "93 bc a4 ad 58 c9 3c af 8b eb 0b 2f 86 c7 9d 81 70 a6 c4 13"
Dass admin-Benutzer führt diese Befehle aus:
winhttpcertcfg.exe LOCAL_MACHINE\My-s "ENTIDAD UNTERNEHMEN VERSICHERN SA - CIF-A93 - NOMBRE SURNAME1 NAME1" -g - "NETWORK SERVICE"
Ergebnis ist:
Passende Zertifikat:
CN=ENTIDAD UNTERNEHMEN VERSICHERN SA - CIF-A93 - NOMBRE SURNAME1 NAME1
OU=703015476
OU=FNMT Class 2 CA
O=FNMT
C=ES
Gewähren privaten Zugang
Konto: NT AUTHORITY\NETWORK SERVICE
Nun, admin-Benutzer führt diesen Befehl aus:
winhttpcertcfg.exe -l-c-LOCAL_MACHINE\My-s "ENTIDAD UNTERNEHMEN VERSICHERN SA - CIF-A93 - NOMBRE SURNAME1 NAME1"
Ist das Ergebnis:
Passende Zertifikat:
CN=ENTIDAD UNTERNEHMEN VERSICHERN SA - CIF-A93 - NOMBRE SURNAME1 NAME1
OU=700012476
OU=FNMT Class 2 CA
O=FNMT
C=ES
Zusätzliche Konten und Gruppen mit
Zugriff auf den privaten Schlüssel enthalten:
domainCompany\adminsystems NT
- AUTORITÄT\SYSTEM
VORDEFINIERT\Administratoren NT
AUTHORITY\NETWORK SERVICE
Nun, in einer aspx-Seite in der web-Anwendung im server Win2003, IIS 6.0, ich habe diesen code:
Hinweis: der Wert für X509Certificate2.HasPrivateKeyAccess() NEIN (false) für "ENTIDAD UNTERNEHMEN VERSICHERN SA - CIF-A93 - NOMBRE SURNAME1 NAME1" - Zertifikat.
ASP.NET -Anwendung ausgeführt, wobei die Identität :: NT AUTHORITY\NETWORK SERVICE
lbInfo.Text += "<br/><br/>ASP.NET application executes using the identity :: <b>" + WindowsIdentity.GetCurrent().Name + "</b><br>";
var store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
Certificates = store.Certificates;
repeater1.DataSource = Certificates;
repeater1.DataBind();
var nombreCertificado = "ENTIDAD COMPANY INSURE SA - CIF A93 - NOMBRE SURNAME1 NAME1";
store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindBySubjectName, nombreCertificado, false);
if (col.Count > 0)
{
X509Certificate2 certificate = col[0];
store.Close();
Message.Text = "Certificado " + nombreCertificado + " encontrado en " + StoreLocation.LocalMachine;
FirmarConCertificado(nombreCertificado, certificate);
}
else
{
store.Close();
Message.Text = "El certificado " + nombreCertificado + " no esta instalado en la máquina";
}
public void FirmarConCertificado(string nombreCertificado, X509Certificate2 certificate)
{
try
{
var mensaje = "Datos de prueba";
System.Text.Encoding enc = System.Text.Encoding.Default;
byte[] data = enc.GetBytes(mensaje);
var contentInfo = new System.Security.Cryptography.Pkcs.ContentInfo(data);
var signedCms = new System.Security.Cryptography.Pkcs.SignedCms(contentInfo, true);
var cmsSigner = new System.Security.Cryptography.Pkcs.CmsSigner(certificate);
// Sign the CMS/PKCS #7 message
signedCms.ComputeSignature(cmsSigner);
// Encode the CMS/PKCS #7 message
var ret = Convert.ToBase64String(signedCms.Encode());
Message.Text += "Firmado con Certificado " + nombreCertificado + " encontrado en " + StoreLocation.LocalMachine;
}
catch (Exception ex)
{
Message.Text = "Error al firmar con certificado: " + ex.ToString();
Message.Text += "<br /><br />InnerException: " + ex.InnerException;
}
}
Den code nicht für mich, und ich bekomme diese Fehlermeldung: kann Nicht finden, das Zertifikat und den privaten Schlüssel für die Entschlüsselung.
Fehler Zeile:signedCms.ComputeSignature(cmsSigner);
Fehler al firmar con certificado:
System.Sicherheit.Die Kryptographie.CryptographicException:
Kann nicht finden, das Zertifikat und
private Schlüssel für die Entschlüsselung.in
System.Sicherheit.Die Kryptographie.Pkcs.PkcsUtils.CreateSignerEncodeInfo(CmsSigner
signer, Boolean silent) bei
System.Sicherheit.Die Kryptographie.Pkcs.SignedCms.Zeichen(CmsSigner
signer, Boolean silent) bei
System.Sicherheit.Die Kryptographie.Pkcs.SignedCms.ComputeSignature(CmsSigner
signer, Boolean silent) bei
System.Sicherheit.Die Kryptographie.Pkcs.SignedCms.ComputeSignature(CmsSigner
Unterzeichner) an
ASP.dgsfp_test_testcert_aspx.FirmarConCertificado(String
nombreCertificado, X509Certificate2
Zertifikat) in
c:\Firma\App\Test\TestCert.aspx:line
242
Dann, den Benutzer "admin" (ich erinnere mich, wer das Zertifikat installieren), führt diese Befehle aus:
FindPrivateKey Meine "LocalMachine" - t "93
bc a4 ad 58 c9 3c af 8b eb 0b 2f c7 86
9d 81 70 a6 c4 13" –cFindPrivateKey
Meine LocalMachine -n "ENTIDAD UNTERNEHMEN VERSICHERN SA - CIF-A93 - NOMBRE SURNAME1 NAME1" –einFindPrivateKey Meine LocalMachine -n
"CN=ENTIDAD UNTERNEHMEN VERSICHERN SA - CIF-A93 - NOMBRE SURNAME1 NAME1"
–ein
Das Ergebnis für alle 3 Befehle ist das gleiche:
FindPrivateKey hilft Benutzer zu finden
Lage der Datei mit dem Privaten Schlüssel von a
X. 50 9-Zertifikats.Verwendung: FindPrivateKey [{ { -n } | { -t }
} [-f | -d | -a]]Thema name des
ZertifikatFingerabdruck des
Zertifikat (verwenden Sie certmgr.exe zu bekommen
es)-f Ausgabe-Datei-Namen nur
-d output-Verzeichnis nur
-a output absoluter-Datei
name z.B. FindPrivateKey Meine
CurrentUser -n "CN=John Doe"z.B. FindPrivateKey Meine LocalMachine -t
"03 33 98 63 d0 47 e7 48 71 33 62 64
76 5 c 4c 9d 42 1d 6b 52" -c
FindPrivateKey nicht alles bekommen, aber winhttpcertcfg.exe -l funktioniert einwandfrei (matching-Zertifikat)
Haben wir Berechtigungen für das Network Service-Benutzer unter Verwendung der winhttpcertcfg.exe tool, und im code ASP.NET (führen Sie unter Network Service-Konto) das Zertifikat wird gefunden. Schlägt jedoch fehl, wenn Zeichen mit Zertifikat.
Wenn jemand könnte geben Sie uns einige Informationen über oder Vorschläge
update:
Benutzer in der domain "domainCompany\Pre_Certificado" Zertifikat installieren im Speicher der Lokalen Maschine.
domainCompany\Pre_Certificado ist Administrator, in IIS_WPG-Gruppe, hat die Lokale Politik: “als Dienst Anmelden“
Ich konfigurieren "AppPool" - Identität in IIS 6.0 für : domainCompany\Pre_Certificado
ASP.NET -Anwendung ausgeführt, wobei die Identität :: domainCompany\Pre_Certificado
Ich AppPool recycle-und ausführen der Anwendung, bekomme ich System.Sicherheit.Die Kryptographie.CryptographicException: kann Nicht finden, das Zertifikat und den privaten Schlüssel für die Entschlüsselung
Wenn ich den test erneut aus, log-in-session im server IIS, mit domainCompany\Pre_Certificado Benutzer, ich nenne die Seite in ASP.NET Anwendung und alles ist OK.
(Hinweis: log-in-server IIS mit Terminal-Server)
Aber wenn log-off-Sitzung im server-IIS (user: domainCompany\Pre_Certificado), bekomme ich den gleichen Fehler:
System.Sicherheit.Die Kryptographie.CryptographicException: kann Nicht finden, das Zertifikat und den privaten Schlüssel für die Entschlüsselung
Irgendwelche Vorschläge ??
InformationsquelleAutor Kiquenet | 2010-10-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bitte überprüfen Sie diese Dokument was würde Ihnen helfen, das Problem zu beheben. Ich würde empfehlen, verwenden Sie folgenden Befehl option:
InformationsquelleAutor maniargaurav
Machen Sie die ersten 2 Schritte die gleichen wie bei IIS 7.5 (hier klicken)
Führen Sie den nachstehenden Befehl als administrator aus. Ersetzen Sie die folgenden:
winhttpcertcfg.exe -g-a "[computername]\NETWORK SERVICE" -c LOCAL_MACHINE\[Store] -s "[Subject]"
Hinweis:, Wenn Sie ausgeführt werden ASP.NET Application Pool unter einer anderen Identität als "NETWORK SERVICE" Sie müssen das ändern "NETWORK SERVICE" in der obigen Befehl, um die Identität, dass Sie die IIS-Anwendungspool.
InformationsquelleAutor thames
Müssen möglicherweise Zugriff auf die anonymen Benutzer ebenfalls. Wenn Sie anonymen Zugriff dann wird der Auftrag ausgeführt, wie der anonyme Benutzer nicht im Netzwerk-service.
anonymer Zugriff und-Sicherheit in Windows Integriert sind aktiviert.
InformationsquelleAutor Mike