外部ドメインへのメッセージが遅延している場合にエラー NoCredentials エラーが発生して TLS ネゴシエーションが失敗する

元の KB 番号:   4495258

現象

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

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

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

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

原因

この問題は、次の条件が当てはまる場合に発生します。

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

解決方法

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

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

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

    日付/時刻. コネクタ Id、Office 365 への送信、SessionId、16、192.168.0.78: 28252、172.16.38.36:25、、、送信証明書の日付/時刻。コネクタ id、Office 365 の送信、SessionId、17、192.168.0.78: 28252, 172.16.38.36:25,, CN =. id, Office 365、セッション id、18, 192.168.0.78: 28252、172.16.38.36:25,、"CN = xxxxxx,! = xxxxxx, O = xxxx, L = xxxx, S = xxxxx, C = Xx", 証明書発行者の名前を指定します。
    日付/時刻. コネクタ Id、Office 365、SessionId、19、192.168.0.78: 28252、172.16.38.36:25、、xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx、証明書シリアル番号の日付/時刻. コネクタ id、Office 365 の送信、セッション id、20、192.168.0.78: 28252、172.16.38.36:25、、Xxxxxxxxxxxxxxxxxxxxxxxxxxxx、Certificate thumbprint
    日付/時刻. コネクタ Id、Office 365 への送信、SessionId、21、192.168.0.78: 28252、172.16.38.36:25、 代替名
    日付/時刻. コネクタ Id、Office 365 の送信、SessionId、22、192.168.0.78: 28252、172.167.38.36:25、*、TLS ネゴシエーションがエラー NoCredentials で失敗しました

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

    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 管理シェルから証明書の状態を確認します。

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

    注意

    Exchange 管理シェルは、有効な秘密キーを持つ証明書を常に一覧表示します。

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

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

    注意

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

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

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

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