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 promptNetsh 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>