ADFS and WAP certificate replacement
ADFS Certificate replacement
- Import certificate to ADFS Server in the Personal store
- Right-click the certificate in MMC > All Tasks > Manage Private Keys
- Add the ADFS service with Full Control and Read permissions
- Select the local machine as location
- Nt service\adfssrv
- Nt service\drs
- Add the ADFS service with Full Control and Read permissions
- Take note of Thumbprint:
- Open the Certificate in MMC > Details
- The Thumbprint can be found at the bottom of Details tab and look something similar to:
- 6eb44ed4a495dec64fe96c1ae5eb43c0157ee44e
- Export the private key from MMC
- Open up ADFS Management
- Go to AD FS > Service > Certificates
- Click Set Service Communications in the right corner
- Select the new certificate
- Open up powershell as admin on the primary ADFS and type following commands:
Set-AdfsCertificate -CertificateType Service-Communications -Thumbprint 6eb44ed4a495dec64fe96c1ae5eb43c0157ee44e
Set-AdfsSslCertificate -Thumbprint 6eb44ed4a495dec64fe96c1ae5eb43c0157ee44e
- Restart ADFS Service
- Open up powershell as admin on the secondary ADFS and type following commands:
Set-AdfsSslCertificate -Thumbprint 6eb44ed4a495dec64fe96c1ae5eb43c0157ee44e
- Restart ADFS Service
WAP Certificate replacement (repeat on each WAP server)
Import the private key into the WAP Server
Open powershell as admin and type the following commands:
Set-WebApplicationProxySslCertificate –Thumbprint 6eb44ed4a495dec64fe96c1ae5eb43c0157ee44e
- Check this hasn’t removed any bindings to ports as there's a bug in some versions of WAPs. If this has, recreate the bindings by doing the following:
Install-WebApplicationProxy
- CertificateThumbprint: the one you've just imported
- FederationServiceName: the fed service URL with the issue
- If you get an error about error connecting to federation services, check the host file.
- Check command below, it may affect other services and may not need applying:
- The below command will apply to all services under
Get-WebApplicationProxyApplication
. To find out what certificates they currently use, issue the following command:Get-WebApplicationProxyApplication | fl
Get-WebApplicationProxyApplication | Where {$_.ExternalCertificateThumbprint -eq "e9672a2f11439cab56d6a03b66836f124ecb211e" | Set-WebApplicationProxyApplication -ExternalCertificateThumbprint "0d633ce1650a279384ea418cfc73c84bca620d2c"
- The below command will apply to all services under
- Check whether a fallback certificate (default cert supporting older, non-SNI capable devices e.g. older Android phones) has been configured on the WAP servers.
- Run the following command to view certificate bindings
Netsh http show sslcert
- If a fallback certificate is configured, it displays as
IP:port : 0.0.0.0:443
- If the fallback certificate needs updating, make a note of the App ID, then delete & recreate the entry using the new hash. Run the following from an administrative command prompt
Netsh http delete sslcert ipport=0.0.0.0:443
netsh http add sslcert ipport=0.0.0.0:443 certhash=<hash> appid={<app ID>}
- Run the following command to view certificate bindings
Restart WAP and ADFS services
Testing the certificate has applied successfully
External test
1. Goto portal.office.com and type any@domainrenewing.com
2. If is redirects you are good to go
Internal test
1. Goto the following address on both WAP servers and check the certificate https://login.domianname.co.uk/adfs/ls/idpinitiatedsignon
WAP certificate errors
When renewing the WAP certificate, sometimes there's an issue where on one of the WAPs CONFIG files was empty. The configuration file is located:
This was located in C:\Windows\ADFS\Config
The resolution is to copy and pastes the configuration file from WAP01 and copied into WAP02. Below is a copy of the missing config file:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="microsoft.identityServer.proxyservice" type="Microsoft.IdentityServer.Management.Proxy.Configuration.ProxyConfiguration, Microsoft.IdentityServer.Management.Proxy, Version=6.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
</configSections>
<microsoft.identityServer.proxyservice>
<congestionControl latencyThresholdInMSec="8000" minCongestionWindowSize="64"
enabled="true" connectionTimeoutInSec="60" />
<connectionPool connectionPoolSize="200" scavengeInterval="5" />
<diagnostics eventLogLevel="15" />
<host tlsClientPort="49443" httpPort="80" httpsPort="443" name="login.shieldtx.com" />
<proxy address="" />
<trust thumbprint="6E79C156A1B26DCAB09146C9F505331492B2E741"
proxyTrustRenewPeriod="21600" />
</microsoft.identityServer.proxyservice>
<!-- <system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true">
</messageLogging>
</diagnostics>
</system.serviceModel> -->
</configuration>