Problem:
Po aktualizacji certyfikatów w roli AD FS 2.0 nie zmienia nam się certyfikat widoczny w przeglądarce, lub pojawiają się błedy: An error occurred while using SSL config for socket address 151.24.100.42:6331. The error status code is contained within the returned data.
Powód:
Aktualizacja certyfikatów SSL w usłudze AD FS 2.2 (Windows 2012 R2) nie aktualizuje certyfikatu przypisanego do usługi HTTP. AD FS 2.2 nie wymaga już roli IIS, więc wymiana certyfikatu dla usługi HTTP jest bardziej złożona.
Rozwiązanie:
-
- Musimy pobrać Hash dla certyfikatu, którego będziemy używać dla komunikacji HTTP – to może być ten certyfikat, który w konsoli AD FS nazywa się Service Communications.
W tym celu z linii poleceń uruchamiamy komendęPS C:\Windows\system32> (Get-AdfsCertificate|Where-Object{$_.CertificateType -eq 'Service-Communications'}).Thumbprint
W odpowiedzi dostaniemy ciąg znaków, np:
E07B6F34A236966D6F00D399D6EC87DE55A84201
- Wyświetlamy listę certyfikatów przypisanych obecnie do usług HTTP
netsh http show sslcert
Polecenie zwróci nam taki wynik:
SSL Certificate bindings: ------------------------- Hostname:port : sts.contoso.com:443 Certificate Hash : e08e6c34a53696bd6f00d399d6ec27de55a84207 Application ID : {5d89a20c-beab-4389-9447-324788eb944a} Certificate Store Name : MY Verify Client Certificate Revocation : Enabled Verify Revocation Using Cached Client Certificate Only : Disabled Usage Check : Enabled Revocation Freshness Time : 0 URL Retrieval Timeout : 0 Ctl Identifier : (null) Ctl Store Name : (null) DS Mapper Usage : Disabled Negotiate Client Certificate : Disabled Hostname:port : localhost:443 Certificate Hash : e08e6c34a53696bd6f00d399d6ec27de55a84207 Application ID : {5d89a20c-beab-4389-9447-324788eb944a} Certificate Store Name : MY Verify Client Certificate Revocation : Enabled Verify Revocation Using Cached Client Certificate Only : Disabled Usage Check : Enabled Revocation Freshness Time : 0 URL Retrieval Timeout : 0 Ctl Identifier : (null) Ctl Store Name : (null) DS Mapper Usage : Disabled Negotiate Client Certificate : Disabled Hostname:port : sts.contoso.com:49443 Certificate Hash : e08e6c34a53696bd6f00d399d6ec27de55a84207 Application ID : {5d89a20c-beab-4389-9447-324788eb944a} Certificate Store Name : MY Verify Client Certificate Revocation : Enabled Verify Revocation Using Cached Client Certificate Only : Disabled Usage Check : Enabled Revocation Freshness Time : 0 URL Retrieval Timeout : 0 Ctl Identifier : (null) Ctl Store Name : (null) DS Mapper Usage : Disabled Negotiate Client Certificate : Disabled
Interesujące nas pozycje to:
Hostname:port – adres do jakiego przypisany jest certyfikat, będzie nam to później potrzebne
Certificate Hash – hash obecnego certyfikatu (inny niż ten który zwróciło nam polecenie Get-ADFSCerficate)
Application ID – UID aplikacji, która usługę HTTP wystawia – również potrzebny później - Usuwamy złe wpisy
:netsh http delete sslcert hostnameport:sts.contoso:443 netsh http delete sslcert hostnameport:localhost:443 netsh http delete sslcert hostnameport:sts.contoso:49443
Oczywiście w pole hostnameport podajemy właściwe wartości
- Dodajemy nowy certyfikat do usług, pamiętając by podać poprawne wartości HostnamePort, CertHash oraz AppID.
netsh http add sslcert hostnameport="sts.contoso.com:443" certhash="E07B6F34A236966D6F00D399D6EC87DE55A84201" appid="{5D89A20C-BEAB-4389-9447-324788EB944A}" certstorename=MY netsh http add sslcert hostnameport="localhost:443" certhash="E07B6F34A236966D6F00D399D6EC87DE55A84201" appid="{5D89A20C-BEAB-4389-9447-324788EB944A}" certstorename=MY netsh http add sslcert hostnameport="sts.contoso.com:49443" certhash="E07B6F34A236966D6F00D399D6EC87DE55A84201" appid="{5D89A20C-BEAB-4389-9447-324788EB944A}" certstorename=MY
- Musimy pobrać Hash dla certyfikatu, którego będziemy używać dla komunikacji HTTP – to może być ten certyfikat, który w konsoli AD FS nazywa się Service Communications.
i gotowe.