El viernes pasado comencé a ver problemas (en un entorno que ha estado activo durante meses) este problema en Ruby en esta imagen acoplable :
RestClient::SSLCertificateNotVerified: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed Luego procedí a intentar agregar un PEM personalizado ( wget https://curl.se/ca/cacert.pem ) para vincular la variable de entorno SSL_CERT_FILE (como se explica en muchas otras preguntas de desbordamiento de pila).
pero obtengo:
bash-4.4# wget https://curl.se/ca/cacert.pem Connecting to curl.se (151.101.2.49:443) ssl_client: curl.se: certificate verification failed: certificate has expired wget: error getting response: Connection reset by peer Intenté guardar el archivo en mi máquina local y luego docker cp al contenedor, pero eso tampoco ayudó.
Intenté ejecutar la consola con:
bash-4.4# SSL_CERT_FILE=/cacert.pem bundle exec rails c irb(main):001:0> RestClient.get('https://curl.se/ca/cacert.pem', headers={}) RestClient.get "https://curl.se/ca/cacert.pem", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate", "User-Agent"=>"rest-client/2.0.2 (linux-musl x86_64) ruby/2.3.8p459" RestClient::SSLCertificateNotVerified: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed Intenté ejecutar update-ca-certificates tanto manualmente en la consola como en el dockerfile, pero obtengo:
bash-4.4# update-ca-certificates WARNING: ca-certificates.crt does not contain exactly one certificate or CRL: skipping Cuando probé esto con cacert.pem copiado en el contenedor como se indicó anteriormente, update-ca-certificates también agregó una advertencia a ese archivo, similar a ca-certificates.crt.
el problema no parece mejorar con nada.
corriendo
curl -Lks 'https://git.io/rg-ssl' | rubydecir que todo está bien, y todos los (3) cheques verdes
¿algunas ideas?
Gracias.
Creo que este problema podría estar relacionado con el hecho de que permite cifrar la caducidad de su certificado raíz. Probé la primera solución que recomendaron, eliminando el archivo en un contenedor y también eliminándolo en el dockerfile, luego ejecuté update-ca-certificates esto no lo hizo ayuda tampoco. No estoy seguro de cómo proceder con las otras dos soluciones.
Una forma de solucionar el problema sería ejecutar en la consola del contenedor:
apt update && apt install ca-certificatesSin embargo, esto sería un antipatrón de Docker, ya que los cambios se perderían al eliminar el contenedor.
La mejor manera sería reconstruir la imagen del Dockerfile que ha vinculado en su pregunta (con docker build ), luego eliminar y volver a crear el contenedor a partir de la nueva imagen.
Si está en Debian 9, le recomendaría que lo actualice. De lo contrario, esta es mi solución alternativa para mi imagen.
# Temporarily fix wrong let's encrypt R3 chain because it's chained to an expired old root CA (DST Root CA X3) on debian 9 RUN sed -i -E 's/(.*DST_Root_CA_X3.*)/!\1/' /etc/ca-certificates.conf ADD https://letsencrypt.org/certs/isrgrootx1.pem /usr/local/share/ca-certificates/isrgrootx1.pem RUN update-ca-certificatesFYI: hay un error en OpenSSL 1.0.2g que causa el problema https://www.openssl.org/blog/blog/2021/09/13/LetsEncryptRootCertExpire/ algunas plataformas han lanzado la solución alternativa y solo necesita actualizar los últimos certificados de CA y las últimas libgnutls30. Sería mejor si puede actualizar a un OpenSSL más reciente.