外部ドメインへのメッセージが遅延されている場合、エラー NoCredentials エラーで TLS ネゴシエーションが失敗しました

元の KB 番号: 4495258

現象

外部ドメインに送信されるEmailメッセージは、オンプレミスのExchange Server (2016 または 2013) でキューに入れられます。 状態をチェックすると、次のエラー メッセージが表示されます。

421 4.4.1 接続がタイムアウトしました。代替ホストへのフェールオーバーが試行されましたが、成功しませんでした。 代替ホストがないか、すべての代替ホストへの配信に失敗しました。

さらに、送信コネクタ ログの次のエラー エントリは、トランスポート層セキュリティ (TLS) ネゴシエーションが失敗したことを示します。

エラー NoCredentials で TLS ネゴシエーションが失敗しました

原因

この問題は、以下の条件に該当する場合に発生します。

  • 送信 TLS に使用される証明書に秘密キーがありません。
  • 証明書の TLSCertificateNameIssuer 文字列と SubjectName 文字列を使用して、属性を設定します。 さらに、 属性は送信 <I>Issuer string<S>SubjectName string コネクタ内の送信 TLS に使用され、電子メール メッセージを外部ドメインにルーティングします。

解決方法

この問題を解決するには、次の手順を実行します。

  1. 電子メール メッセージを送信する権限がある送信コネクタでログ記録を有効にします。 これを行うには、管理者として次の PowerShell コマンドレットを実行します。

    Set-SendConnector "NameOfTheSendCconnector" -ProtocolLoggingLevel Verbose
    
  2. 送信コネクタ ログを確認して、送信 TLS 中に使用される証明書を特定します。 たとえば、ログ エントリは次のようになります。

    Date/Time.ConnectorId,outbound to Office 365,SessionId,16,192.168.0.78:28252,172.16.38.36:25,,,証明書の送信
    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,168.0.78:28252,172.38.36:25,,
    "CN=xxxxxx, OU=xxxxxx, O=xxxx, L=xxxx, S=xxxxx, C=xx",証明書発行者名
    Date/Time.ConnectorId,outbound to Office 365,SessionId,19,192.168.0.78:28252,172.16.38.36:25,,xxxxxxxxxxxxxxxxxxxx,Certificate シリアル番号
    Date/Time.ConnectorId,outbound to Office 365,SessionId,20,192.168.0.78:28252,172.16.38.36:25,
    ,xxxxxxxxxxxxxxxxxxxxxxxxx,Certificate 拇印
    Date/Time.ConnectorId,outbound to Office 365,SessionId,21,192.168.0.78:28252,172.16.38.36:25,,.xxxx.xxx.xx 代替名
    Date/Time.ConnectorId,outbound to Office 365,SessionId,22,192.168.0.78:28252,172.167.38.36:25,*,,TLS ネゴシエーションがエラー NoCredentials で失敗しました

  3. 手順 2 で識別された証明書のプロパティの状態 PrivateKey を確認します。 これを行うには、以下のコマンドレットを実行します。

    Get-ChildItem -Path Cert:\LocalMachine\My | where {$_.Thumbprint -like 'Certificate thumbprint identified in step 2'} | Select-Object -Property thumbprint,hasprivatekey
    
  4. 次のコマンドレットを実行して、手順 2 で識別された証明書を削除します。

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

    注:

    手順 2 で識別された証明書を削除する前に、Microsoft Exchange Serverを実行しているサーバーで実行されている他のアプリケーションに証明書の依存関係がないことを確認します。 依存関係がある場合は、手順 5 で説明されている証明書を使用してアプリケーションが開始されるように、アプリケーションで必要な変更を行います。

  5. 通常のインポート プロセスを使用して有効なサード パーティの証明書をインポートし、次のコマンドレットを実行して Exchange Management Shell から証明書の状態をチェックします。

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

    注:

    Exchange Management Shell では、有効な秘密キーを持つ証明書が常に一覧表示されます。

  6. 次のコマンドレットを実行して、新しくインポートされたサード パーティ証明書で SMTP サービスを有効にします。

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

    注:

    新しい証明書を使用して既存の証明書を置き換えるメッセージが表示されたら、「いいえ」と入力 します

  7. サード パーティの証明書が既にインポートされている場合、Exchange Serverは新しいサード パーティの証明書を使用することから始まります。

  8. キュー内のメッセージに対して再試行を実行するには、次のコマンドレットを実行します。

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