Solución problema certificados SectiGo -- Reimportado con Core-Admin


#1

1. Introducción

El siguiente artículo explica cómo resolver el problema reciente causado por la emisión de certificados firmados por SectiGo por el cual, debido a certificados raíces no presentes en instalaciones antiguas, hace que el certificado no pueda ser importado/verificado correctamente.

A esto une el hecho de que la emisión de los certificados afectados por este problema incluyen dos raíces. Una nueva, disponible hasta el 2030 y otra antigua, disponible hasta el pasado 30/05/2020.

Resumiendo los detalles, el problema viene causado por dos motivos concurrentes:

  1. Software de verificación, como openssl, que afecta a apache2, nginx, curl, php, encuentra en la cadena de verificación un certificado expirado el 30/05/2020 (a pesar de tener en la cadena el certificado que podría ayudarle a completar la verificación, válido hasta el 2030). El certificado afectado es el siguiente:

    image

  2. El segundo problema es que algunos configuraciones antiguas, no incluyen el certificado raíz que permite aceptar (“validar”), a su vez, el nuevo certificado raíz, válido hasta 2030.

A continuación explicamos cómo resolver ambos problemas.

En cualquier caso, los síntomas de fallo son los mismos:

  1. Al verificar la web en cuestión, aparece la indicación de certificado expirado:

  2. Al mismo tiempo, aparecen indicaciones de fallo openssl con error concreto:

    Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

  3. SectiGo (la nueva Comodo), ha publicado un artículo explicando los detalles en:

    https://support.sectigo.com/articles/Knowledge/Sectigo-AddTrust-External-CA-Root-Expiring-May-30-2020

2. Cómo resolver el problema para tu sistema con Core-Admin

Actualización 05/05/2020:

Core-Admin, revisión 10420, incluye una actualización para detectar, y borrar certificados intermedios expirados asociados a esta incidencia. La actualización opera de manera totalmente automatizada.

A continuación nota histórica usada para resolver la incidencia:

Las siguientes indicaciones son para Core-Admin pero te ayudarán para tu sistema ya que son genéricas.
Básicamente, hay que retirar de la cadena presentada al cliente, el certificado raíz que está expirado. Para ello:

  1. Exporta el certificado afectado:

  2. Coge el resultado de la exportación, en especial el certificado y el “intermediate/chain certificate”.

    image

  3. Ahora, pincha a completar el certificado, reintroduciendo el certificado y el “intermediate/chain certificate”, pero quitando la segunda parte, la expirada, que sería la siguiente:

    …e introduces el certificado en “Crt. firmado” y el intermedio sin la segunda parte en “Ca intermedio”:

    …la segunda parte a eliminar es la siguiente:

    -----BEGIN CERTIFICATE-----
    MIIFdzCCBF+gAwIBAgIQE+oocFv07O0MNmMJgGFDNjANBgkqhkiG9w0BAQwFADBv
    MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
    ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
    eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow
    gYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK
    ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD
    VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjAN
    BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAgBJlFzYOw9sIs9CsVw127c0n00yt
    UINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NC
    tnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQf
    jtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM
    8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hm
    AUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiV
    Z4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9
    N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sF
    qV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9
    HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ
    +gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyX
    HAc/DVL17e8vgg8CAwEAAaOB9DCB8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTv
    A73gJMtUGjAdBgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/
    BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1Ud
    HwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4
    dGVybmFsQ0FSb290LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0
    dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggEBAJNl9jeD
    lQ9ew4IcH9Z35zyKwKoJ8OkLJvHgwmp1ocd5yblSYMgpEg7wrQPWCcR23+WmgZWn
    RtqCV6mVksW2jwMibDN3wXsyF24HzloUQToFJBv2FAY7qCUkDrvMKnXduXBBP3zQ
    YzYhBx9G/2CkkeFnvN4ffhkUyWNnkepnB2u0j4vAbkN9w6GAbLIevFOFfdyQoaS8
    Le9Gclc1Bb+7RrtubTeZtv8jkpHGbkD4jylW6l/VXxRTrPBPYer3IsynVgviuDQf
    Jtl7GQVoP7o81DgGotPmjw7jtHFtQELFhLRAlSv0ZaBIefYdgWOWnU914Ph85I6p
    0fKtirOMxyHNwu8=
    -----END CERTIFICATE-----
    
  4. Si al completar el certificado, aparece el siguiente mensaje de error, entonces el sistema está afectado por el segundo problema:

    )

3. Cómo resolver fallo de validación local del certificado

En el caso de que al completar el certificado obtengamos un error similar al siguiente:

>> openssl verify -verbose -purpose sslserver -CAfile /pth/to/certificate 
...
error 2 at 1 depth lookup: unable to get issuer certificate
Check system default certificates to be installed and accepted. In Debian/Ubuntu systems this includes installing and accepting ca-certificates package.

Este problema, como hemos indicado al principio, es debido a que no está presente un certificado raíz que completaría la cadena de este certificado. El certificado que falta se puede descargar desde:

https://support.sectigo.com/Com_KnowledgeDetailPage?Id=kA01N000000rfBO

En nuestro caso, hemos dejado una copia de este certificado público en la siguiente ruta:

http://www.aspl.es/downloads/USERTrustRSA-AAACA-xSign.crt

  1. En caso de que el sistema afectado sea una debian, ejecuta los siguientes pasos:

    >> cd /usr/share/ca-certificates/mozilla/
    >> wget http://www.aspl.es/downloads/USERTrustRSA-AAACA-xSign.crt
    >> dpkg-reconfigure ca-certificates
    
  2. A continuación aceptar la selección de certificado:

    …después confirmamos certificado instalado:

  3. Una vez llegados a este punto, intentar completar el certificado como se ha indicado en la sección anterior.

4. Cómo resolver el problema en el lado cliente

No es recomendable. Lo ideal es corregir la instalación del certificado en el lado servidor. Sin embargo, si por algún motivo no puedes contar con esta resolución en el lado servidor, puedes modificar tu cliente para que no haga verificación. A continuación algunos ejemplos:

  1. Para CakePHP, usar ssl_peer_verify = false:
    $HttpSocket = new HttpSocket(array('ssl_verify_peer' => false, 'ssl_verify_host' => false));