Compartir a través de


Error en la negociación tls con error NoCredentials si los mensajes a dominios externos se aplazan

Número de KB original: 4495258

Síntomas

Email mensajes que se envían a dominios externos se ponen en cola en Exchange Server locales (2016 o 2013). Al comprobar el estado, recibirá el siguiente mensaje de error:

421 4.4.1 Se agotó el tiempo de espera de la conexión." Intentó conmutar por error a un host alternativo, pero eso no se realizó correctamente. No hay hosts alternativos o no se pudo entregar a todos los hosts alternativos.

Además, la siguiente entrada de error en los registros de Send Connector indica que se ha producido un error en la negociación de seguridad de la capa de transporte (TLS):

Error en la negociación tls con el error NoCredentials

Causa

Este problema ocurre si se cumplen las siguientes condiciones:

  • Falta una clave privada en el certificado que se usa para TLS de salida.
  • El atributo se TLSCertificateName rellena mediante las cadenas Issuer y SubjectName del certificado. Además, el <I>Issuer string<S>SubjectName string atributo se usa para TLS saliente dentro del conector de envío para enrutar mensajes de correo electrónico a dominios externos.

Solución

Para resolver este problema, siga estos pasos:

  1. Habilite el registro en el conector de envío que sea autoritativo para enviar mensajes de correo electrónico. Para ello, ejecute el siguiente cmdlet de PowerShell como administrador:

    Set-SendConnector "NameOfTheSendCconnector" -ProtocolLoggingLevel Verbose
    
  2. Revise los registros de Send Connector para identificar el certificado que se usa durante tls de salida. Por ejemplo, la entrada de registro puede ser similar a la siguiente:

    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,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",Certificate issuer name
    Date/Time.ConnectorId,Outbound to Office 365,SessionId,19,192.168.0.78:28252,172.16.38.36:25,,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,Certificate serial number
    Date/Time.ConnectorId,Outbound to Office 365,SessionId,20,192.168.0.78:28252,172.16.38.36:25,
    ,xxxxxxxxxxxxxxxxxxxxxxxxxxxx,Certificate thumbprint
    Date/Time.ConnectorId,Outbound to Office 365,SessionId,21,192.168.0.78:28252,172.16.38.36:25,,.xxxx.xxx.xx nombres alternativos
    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. Compruebe el estado de la PrivateKey propiedad para el certificado identificado en el paso 2. Para ello, ejecute el siguiente cmdlet:

    Get-ChildItem -Path Cert:\LocalMachine\My | where {$_.Thumbprint -like 'Certificate thumbprint identified in step 2'} | Select-Object -Property thumbprint,hasprivatekey
    
  4. Quite el certificado identificado en el paso 2 mediante la ejecución del siguiente cmdlet:

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

    Nota:

    Antes de quitar el certificado que se identifica en el paso 2, asegúrese de que no haya ninguna dependencia del certificado en ninguna otra aplicación que se ejecute en el servidor que ejecuta Microsoft Exchange Server. Si hay una dependencia, realice los cambios necesarios en la aplicación para que la aplicación se inicie mediante el certificado que se menciona en el paso 5.

  5. Importe un certificado de terceros válido a través del proceso de importación habitual y, a continuación, compruebe el estado del certificado desde el Shell de administración de Exchange mediante la ejecución del siguiente cmdlet.

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

    Nota:

    El Shell de administración de Exchange siempre enumera los certificados que tienen una clave privada válida.

  6. Habilite el servicio SMTP en el certificado de terceros recién importado mediante la ejecución del siguiente cmdlet:

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

    Nota:

    Cuando se le pida que reemplace el certificado existente mediante un nuevo certificado, escriba No.

  7. Si el certificado de terceros ya se importó, Exchange Server comienza con el nuevo certificado de terceros.

  8. Ejecute el siguiente cmdlet para realizar un reintento en los mensajes de la cola.

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