Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Oryginalny numer KB: 4495258
Symptomy
Email komunikaty wysyłane do domen zewnętrznych są umieszczane w kolejce w Exchange Server lokalnym (2016 lub 2013). Po sprawdzeniu stanu zostanie wyświetlony następujący komunikat o błędzie:
Upłynął limit czasu połączenia 421 4.4.1" Podjęto próbę przejścia w tryb failover do alternatywnego hosta, ale nie powiodło się. Brak alternatywnych hostów lub dostarczenie nie powiodło się dla wszystkich hostów alternatywnych.
Ponadto następujący wpis błędu w dziennikach wyślij łącznika wskazuje, że negocjacje protokołu TLS (Transport Layer Security) nie powiodły się:
Negocjacje protokołu TLS nie powiodły się z powodu błędu NoCredentials
Przyczyna
Ten problem występuje, jeśli spełnione są następujące warunki:
- W certyfikacie używanym do wychodzącego protokołu TLS brakuje klucza prywatnego.
- Atrybut należy wypełnić
TLSCertificateName
przy użyciu ciągów Wystawcy i SubjectName certyfikatu. Ponadto<I>Issuer string<S>SubjectName string
atrybut jest używany do wychodzącego protokołu TLS w łączniku wysyłania w celu kierowania wiadomości e-mail do domen zewnętrznych.
Rozwiązanie
Aby rozwiązać ten problem, wykonaj następujące kroki:
Włącz rejestrowanie w łączniku wyślij autorytatywny do wysyłania wiadomości e-mail. W tym celu uruchom następujące polecenie cmdlet programu PowerShell jako administrator:
Set-SendConnector "NameOfTheSendCconnector" -ProtocolLoggingLevel Verbose
Przejrzyj dzienniki wysyłania łącznika, aby zidentyfikować certyfikat używany podczas wychodzącego protokołu TLS. Na przykład wpis dziennika może wyglądać następująco:
Date/Time.ConnectorId,Outbound to Office 365,SessionId,16,192.168.0.78:28252,172.16.38.36:25,,,,Sending certificate
Date/Time.ConnectorId,Outbound to Office 365,SessionId,17,192.168.0.78:28252,172.16.38.36:25,CN=.xxx.xxx.xxx,podmiot certyfikatu
Date/Time.ConnectorId,Outbound to Office 365,SessionId,18,192.168.0.78:28252,172.16.38.36:25,,"CN=xxxxxx, OU=xxxxxx, O=xxxx, L=xxxx, S=xxxxx, C=xx",Nazwa wystawcy certyfikatu
Date/Time.ConnectorId,Outbound to Office 365,SessionId,19,192.168.0.78:28252,172.16.38.36:25,xxxxxxxxx,Numer seryjny certyfikatu
Date/Time.ConnectorId,Outbound to Office 365,SessionId,20,192.168.0.78:28252,172.16.38.36:25,,xxxxxxxxxxxx, odcisk palca certyfikatu
Date/Time.ConnectorId,Outbound to Office 365,SessionId,21,192.168.0.78:28252,172.16.38.36:25,,.xxxx.xxx.xx alternatywne nazwy
Date/Time.ConnectorId,Outbound to Office 365,SessionId,22,192.168.0.78:28252,172.167.38.36:25,*,,Negocjacje protokołu TLS nie powiodły się z powodu błędu NoCredentialsSprawdź stan
PrivateKey
właściwości certyfikatu, który został zidentyfikowany w kroku 2. W tym celu uruchom następujące polecenie cmdlet:Get-ChildItem -Path Cert:\LocalMachine\My | where {$_.Thumbprint -like 'Certificate thumbprint identified in step 2'} | Select-Object -Property thumbprint,hasprivatekey
Usuń certyfikat zidentyfikowany w kroku 2, uruchamiając następujące polecenie cmdlet:
Get-ChildItem -Path Cert:\LocalMachine\My | where {$_.Thumbprint -like 'Certificate thumbprint identified in step 2'} | remove-item
Uwaga
Przed usunięciem certyfikatu zidentyfikowanego w kroku 2 upewnij się, że nie istnieje zależność certyfikatu od żadnej innej aplikacji uruchomionej na serwerze z uruchomionym Microsoft Exchange Server. Jeśli istnieje zależność, wprowadź wymagane zmiany w aplikacji, aby aplikacja została uruchomiona przy użyciu certyfikatu wymienionego w kroku 5.
Zaimportuj prawidłowy certyfikat innej firmy przez zwykły proces importowania, a następnie sprawdź stan certyfikatu z powłoki zarządzania programu Exchange, uruchamiając następujące polecenie cmdlet.
Get-ExchangeCertificate | where {$_.rootca -eq 'third-party certificate'}
Uwaga
Powłoka zarządzania programu Exchange zawsze wyświetla listę certyfikatów, które mają prawidłowy klucz prywatny.
Włącz usługę SMTP na nowo zaimportowanym certyfikacie innej firmy, uruchamiając następujące polecenie cmdlet:
Enable-Exchangecertificate -thumbprint "Thumbprint of the new certificate" -services SMTP
Uwaga
Po wyświetleniu monitu o zastąpienie istniejącego certyfikatu przy użyciu nowego certyfikatu wpisz Nie.
Jeśli certyfikat innej firmy został już zaimportowany, Exchange Server uruchamiany przy użyciu nowego certyfikatu innej firmy.
Uruchom następujące polecenie cmdlet, aby wykonać ponawianie próby względem komunikatów w kolejce.
Get-queue -resultsize unlimited | where {$_.status -eq 'retry'} | retry-queue