Llevo missing tiempo, pero es que ha pasado mucho! Y este post es una muestra de ello.
Ultimamente estamos metiendo todo en contenedores, migrando todo lo que corria en VMs y
la verdad que me he encontradados como para agregar rootCA, puesto que lo que vamos a hacer, es agregar este rootCA del nexus como un CA.o con varios problemas, este es uno de ellos:
Error response from daemon: Get https://nexus.evil.company:18444/v2/: x509: certificate signed by unknown authority

Y este tiene miga, porque los servers usan CentOS y nuestros equipos Ubuntu, asi que todo lo que tenemos en #Ansible scripteado, no vale. Ya ni que decir de Mac.
Asi es como lo he solucionado en Ubuntu/Debian

Segun varios post, muchos inciden en que este problema viene por usar certificados auto-firmados. Lo cual si bien es cierto, tambien puede ser ( como es nuestro caso ) que tengas tu propio CA para tus certificados y que seas su un root CA de un monton de cosas. Si tienes que estar comprando certificados para esto, te puedes arruinar.
Solucion, agrega tu CA como root y ya puedes hacer lo que te de la gana.

En este caso, el Nexus corre con un autofirmado, pero es igual. Puedes usar este tutorial para autofirmados como para agregar rootCA, puesto que lo que vamos a hacer, es agregar este certificado del nexus como un CA.

  1. Valida que estas teniendo este problema
    Ejecutad openssl s_client -showcerts -connect nexus.evil.company:18444
    Os tendra que salir alguna linea donde ponga self signed certificate
    Ejemplo:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    CONNECTED(00000003)
    depth=0 C = ES, ST = Unspecified, L = Unspecified, O = evilcorp, CN = nexus.evil.company
    verify return:1
    ---
    Certificate chain
    0 s:/C=ES/ST=Unspecified/L=Unspecified/O=evil/CN=nexus.evil.company
    i:/C=ES/ST=Unspecified/L=Unspecified/O=evil/CN=nexus.evil.company
    -----BEGIN CERTIFICATE-----

    REDACTADO

    -----END CERTIFICATE-----
    ---
    Server certificate
    subject=/C=ES/ST=Unspecified/L=Unspecified/O=evil/CN=nexus.evil.company
    issuer=/C=ES/ST=Unspecified/L=Unspecified/O=evil/CN=nexus.evil.company
    ---
    No client certificate CA names sent
    Peer signing digest: SHA512
    Server Temp Key: ECDH, P-256, 256 bits
    ---
    SSL handshake has read 1491 bytes and written 358 bytes
    Verification: OK
    ---
    New, TLSv1.2, Cipher is ECDHE-RSA-AES256-SHA384
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    SSL-Session:
    Protocol : TLSv1.2
    Cipher : ECDHE-RSA-AES256-SHA384
    Session-ID: REDACTADO
    Session-ID-ctx:
    Master-Key: REDACTADO
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1557921550
    Timeout : 7200 (sec)
    Verify return code: 18 (self signed certificate)
    Extended master secret: no
    ---
    closed
  2. Copiamos / copiamos el certificado y cambiamos de PEM (en nuestro caso ) a CRT. Si no, no lo pilla
    mv /tmp/nexus.evil.company.pem /usr/local/share/ca-certificates/nexus.evil.company.crt

  3. Recargamos los ca-trusts
    update-ca-certificates
  4. Aqui puede ser que os salga este error:
    keytool error: java.io.IOException: Illegal header: -----BEGIN CERTIFICATE----
    En mi caso, era que al final tenia 4 dash - en vez de los 5. Pero puede ser espacios tambien.
  5. Mirad a ver si se ha creado el simlink por casualidad en /etc/ssl/certs y eliminarlo con unlink antes de volver a intentarlo

    1
    2
    3
    lrwxrwxrwx 1 root root     62 may 15 13:24  nexus.evil.company.pem -> /usr/local/share/ca-certificates/nexus.evil.company.crt
    -rw-r--r-- 1 root root 208780 may 15 13:24 ca-certificates.crt
    lrwxrwxrwx 1 root root 29 may 15 13:24 d1b64eb2.0 -> nexus.evil.company.pem
  6. Ejecutad el update-ca-certificates hasta que veais que lo agrega y nos os da error

    1
    2
    Updating certificates in /etc/ssl/certs... 2 added, 0 removed; done.
    Running hooks in /etc/ca-certificates/update.d....done.
  7. Volved a probar con openssl > openssl s_client -showcerts -connect nexus.evil.company:18444

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    CONNECTED(00000003)
    depth=0 C = ES, ST = Unspecified, L = Unspecified, O = knockout, CN = nexus.evil.company
    verify return:1
    ---
    Certificate chain
    0 s:/C=ES/ST=Unspecified/L=Unspecified/O=evil/CN=nexus.evil.company
    i:/C=ES/ST=Unspecified/L=Unspecified/O=evil/CN=nexus.evil.company
    -----BEGIN CERTIFICATE-----

    REDACTADO

    -----END CERTIFICATE-----
    ---
    Server certificate
    subject=/C=ES/ST=Unspecified/L=Unspecified/O=evil/CN=nexus.evil.company
    issuer=/C=ES/ST=Unspecified/L=Unspecified/O=evil/CN=nexus.evil.company
    ---
    No client certificate CA names sent
    Peer signing digest: SHA512
    Server Temp Key: ECDH, P-256, 256 bits
    ---
    SSL handshake has read 1491 bytes and written 358 bytes
    Verification: OK
    ---
    New, TLSv1.2, Cipher is ECDHE-RSA-AES256-SHA384
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    SSL-Session:
    Protocol : TLSv1.2
    Cipher : ECDHE-RSA-AES256-SHA384
    Session-ID: REDACTADO
    Session-ID-ctx:
    Master-Key: REDACTADO
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1557921550
    Timeout : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    ---
    closed
  8. Ahora podeis hacer el docker login y luego el push/pull de las imagenes del registry de nexus

    1
    2
    3
    4
    5
    6
    7
    root@neurona:~# docker login -u LOGIN -p PASSWORD nexus.evil.company:18444
    WARNING! Using --password via the CLI is insecure. Use --password-stdin.
    WARNING! Your password will be stored unencrypted in /home/nico/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store

    Login Succeeded

Saludos!

Comentários

⬆︎TOP