Freigeben über


Fehler bei der TLS-Aushandlung mit dem Fehler NoCredentials, wenn Nachrichten an externe Domänen zurückgestellt werden

Ursprüngliche KB-Nummer: 4495258

Symptome

Email Nachrichten, die an externe Domänen gesendet werden, werden in der lokalen Exchange Server (2016 oder 2013) in die Warteschlange gestellt. Wenn Sie die status überprüfen, erhalten Sie die folgende Fehlermeldung:

421 4.4.1 Verbindungstimeout." Es wurde versucht, ein Failover auf einen alternativen Host durchzuführen, aber dies war nicht erfolgreich. Entweder gibt es keine alternativen Hosts, oder die Übermittlung an alle alternativen Hosts ist fehlgeschlagen.

Darüber hinaus gibt der folgende Fehlereintrag in den Sendeconnectorprotokollen an, dass die TLS-Aushandlung (Transport Layer Security) fehlgeschlagen ist:

Fehler bei der TLS-Aushandlung mit dem Fehler NoCredentials

Ursache

Das Problem tritt auf, wenn die folgenden Bedingungen vorliegen:

  • Dem Zertifikat, das für ausgehende TLS verwendet wird, fehlt ein privater Schlüssel.
  • Sie füllen das TLSCertificateName Attribut mithilfe der Zeichenfolgen Issuer und SubjectName des Zertifikats auf. Darüber hinaus wird das <I>Issuer string<S>SubjectName string -Attribut für ausgehende TLS-Daten innerhalb des Sendeconnectors verwendet, um E-Mail-Nachrichten an externe Domänen weiterzuleiten.

Lösung

Gehen Sie folgendermaßen vor, um dieses Problem zu beheben:

  1. Aktivieren Sie die Protokollierung auf dem Sendeconnector, der für das Senden von E-Mail-Nachrichten autoritativ ist. Führen Sie hierzu das folgende PowerShell-Cmdlet als Administrator aus:

    Set-SendConnector "NameOfTheSendCconnector" -ProtocolLoggingLevel Verbose
    
  2. Überprüfen Sie die Sendeconnectorprotokolle, um das Zertifikat zu identifizieren, das bei ausgehendem TLS verwendet wird. Der Protokolleintrag kann beispielsweise wie folgt aussehen:

    Date/Time.ConnectorId,Ausgehend zu Office 365,SessionId,16,192.168.0.78:28252,172.16.38.36:25,,,Senden des Zertifikats
    Date/Time.ConnectorId,Outbound to Office 365,SessionId,17,192.168.0.78:28252,172.16.38.36:25,
    ,CN=.xxx.xxx.xxx,Certificate subject
    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",Zertifikatausstellername
    Date/Time.ConnectorId,Outbound to Office 365,SessionId,19,192.168.0.78:28252,172.16.38.38.36:25,,xxxxxxxxx
    Date/Time.ConnectorId,Outbound to Office 365,SessionId,20,192.168.0.78:28252,172.16.38.38.36:25,
    ,xxxxxxxx
    Date/Time.ConnectorId,Outbound to Office 365,SessionId,21,192.168.0.78:28252,172.16.38.38.36:25,,.xxxx.xxx.xx alternative Namen
    Date/Time.ConnectorId,Outbound to Office 365,SessionId,22,192.168.0.78:28252,172.167.38.36:25,*,,TLS negotiation failed with error NoCredentials

  3. Überprüfen Sie die status der PrivateKey Eigenschaft für das Zertifikat, das in Schritt 2 identifiziert wurde. Führen Sie dazu das folgenden Cmdlet aus:

    Get-ChildItem -Path Cert:\LocalMachine\My | where {$_.Thumbprint -like 'Certificate thumbprint identified in step 2'} | Select-Object -Property thumbprint,hasprivatekey
    
  4. Entfernen Sie das in Schritt 2 identifizierte Zertifikat, indem Sie das folgende Cmdlet ausführen:

    Get-ChildItem -Path Cert:\LocalMachine\My | where {$_.Thumbprint -like 'Certificate thumbprint identified in step 2'} | remove-item
    

    Hinweis

    Bevor Sie das in Schritt 2 identifizierte Zertifikat entfernen, stellen Sie sicher, dass keine Abhängigkeit des Zertifikats von einer anderen Anwendung besteht, die auf dem Server ausgeführt wird, auf dem Microsoft Exchange Server ausgeführt wird. Wenn eine Abhängigkeit vorhanden ist, nehmen Sie die erforderlichen Änderungen in der Anwendung vor, damit die Anwendung mit dem in Schritt 5 erwähnten Zertifikat beginnt.

  5. Importieren Sie ein gültiges Drittanbieterzertifikat über den üblichen Importvorgang, und überprüfen Sie dann die status des Zertifikats aus der Exchange-Verwaltungsshell, indem Sie das folgende Cmdlet ausführen.

    Get-ExchangeCertificate | where {$_.rootca -eq 'third-party certificate'}
    

    Hinweis

    Die Exchange-Verwaltungsshell listet immer Zertifikate auf, die über einen gültigen privaten Schlüssel verfügen.

  6. Aktivieren Sie den SMTP-Dienst für das neu importierte Drittanbieterzertifikat, indem Sie das folgende Cmdlet ausführen:

    Enable-Exchangecertificate -thumbprint "Thumbprint of the new certificate" -services SMTP
    

    Hinweis

    Wenn Sie aufgefordert werden, das vorhandene Zertifikat mithilfe eines neuen Zertifikats zu ersetzen, geben Sie Nein ein.

  7. Wenn das Drittanbieterzertifikat bereits importiert wurde, beginnt Exchange Server mit dem neuen Drittanbieterzertifikat.

  8. Führen Sie das folgende Cmdlet aus, um einen Wiederholungsversuch für die Nachrichten in der Warteschlange auszuführen.

    Get-queue -resultsize unlimited | where {$_.status -eq 'retry'} | retry-queue