Procedure: X.509-certificaten toegankelijk maken voor WCF
Als u een X.509-certificaat toegankelijk wilt maken voor Windows Communication Foundation (WCF), moet de toepassingscode de naam en locatie van het certificaatarchief opgeven. In bepaalde omstandigheden moet de procesidentiteit toegang hebben tot het bestand dat de persoonlijke sleutel bevat die is gekoppeld aan het X.509-certificaat. Als u de persoonlijke sleutel wilt verkrijgen die is gekoppeld aan een X.509-certificaat in een certificaatarchief, moet WCF hiervoor toestemming hebben. Standaard hebben alleen de eigenaar en het systeemaccount toegang tot de persoonlijke sleutel van een certificaat.
X.509-certificaten toegankelijk maken voor WCF
Geef het account waaronder WCF leestoegang uitvoert tot het bestand dat de persoonlijke sleutel bevat die is gekoppeld aan het X.509-certificaat.
Bepaal of WCF leestoegang tot de persoonlijke sleutel voor het X.509-certificaat vereist.
In de volgende tabel wordt aangegeven of een persoonlijke sleutel beschikbaar moet zijn wanneer u een X.509-certificaat gebruikt.
X.509-certificaatgebruik Persoonlijke sleutel Digitaal ondertekenen van een uitgaand SOAP-bericht. Ja De handtekening van een binnenkomend SOAP-bericht controleren. Nee Een uitgaand SOAP-bericht versleutelen. Nee Een binnenkomend SOAP-bericht ontsleutelen. Ja Bepaal de locatie en naam van het certificaatarchief waarin het certificaat is opgeslagen.
Het certificaatarchief waarin het certificaat is opgeslagen, wordt opgegeven in de toepassingscode of in de configuratie. In het volgende voorbeeld wordt bijvoorbeeld aangegeven dat het certificaat zich in het certificaatarchief bevindt met de
CurrentUser
naamMy
.cc.ClientCredentials.ClientCertificate.SetCertificate( StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "contoso.com");
cc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "contoso.com")
Bepaal waar de persoonlijke sleutel voor het certificaat zich op de computer bevindt met behulp van het hulpprogramma FindPrivateKey .
Het hulpprogramma FindPrivateKey vereist de naam van het certificaatarchief, de locatie van het certificaatarchief en iets dat het certificaat uniek identificeert. Het hulpprogramma accepteert de onderwerpnaam van het certificaat of de vingerafdruk ervan als een unieke id. Zie De vingerafdruk van een certificaat ophalen voor meer informatie over het bepalen van de vingerafdruk voor een certificaat.
In het volgende codevoorbeeld wordt het hulpprogramma FindPrivateKey gebruikt om de locatie van de persoonlijke sleutel voor een certificaat in het
My
archief teCurrentUser
bepalen met een vingerafdruk van46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d
.findprivatekey.exe My CurrentUser -t "46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d" -a
Bepaal het account waaronder WCF wordt uitgevoerd.
In de volgende tabel wordt het account beschreven waaronder WCF wordt uitgevoerd voor een bepaald scenario.
Scenario Procesidentiteit Client (console of WinForms-toepassing). Momenteel aangemelde gebruiker. Service die zelf wordt gehost. Momenteel aangemelde gebruiker. Service die wordt gehost in IIS 6.0 (Windows Server 2003) of IIS 7.0 (Windows Vista). NETWERKSERVICE Service die wordt gehost in IIS 5.X (Windows XP). Beheerd door het <processModel>
element in het bestand Machine.config. Het standaardaccount is ASPNET.Verdeel leestoegang tot het bestand dat de persoonlijke sleutel bevat voor het account waaronder WCF wordt uitgevoerd, met behulp van een hulpprogramma zoals icacls.exe.
In het volgende codevoorbeeld wordt de discretionaire toegangsbeheerlijst (DACL) voor het opgegeven bestand bewerkt om het NETWORK SERVICE-account leestoegang (:R) tot het bestand te verlenen.
icacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\8aeda5eb81555f14f8f9960745b5a40d_38f7de48-5ee9-452d-8a5a-92789d7110b1" /grant "NETWORK SERVICE":R