El certificado para Gitlab-Server no es válido para el nombre alternativo del sujeto

El certificado para Gitlab-Server no es válido para el nombre alternativo del sujeto

Mi empresa tiene un certificado parahttps://data.ddl.at, que tiene, entre otros, un SAN (Subject Alternative Name) para gitlab.ddl.at. Este servidor Gitlab es interno y el nombre de dominio solo lo resuelve nuestro servidor DNS interno. Como referencia, también está la SANhttps://sicher.ddl.at, que es público y válido en un navegador.

He configurado este certificado en Gitlab-Server y cuando voy a gitlab.ddl.at, el navegador valida el certificado y lo considera válido.

Los problemas surgen una vez que intento usar un Gitlab-Runner. Tengo uno instalado y registrado en otra máquina, y después de tener algunos problemas al principio, logré conectarlo a la instancia principal, pero los trabajos aún no pueden verificar los submódulos, el ejecutor está obteniendo server certificate verification failed.

Ahora veamos lo que creo que es el síntoma raíz del problema: si ejecuto openssl s_client -connect data.ddl.at:443, obtengo:

CONNECTED(00000005)
depth=2 OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Extended Validation CA - SHA256 - G3
verify return:1
depth=0 businessCategory = Private Organization, serialNumber = FN 374566h, jurisdictionC = AT, jurisdictionL = Wels, jurisdictionST = Oberoesterreich, C = AT, ST = Oberoesterreich, L = Ruestorf, street = Erwin Greiner-Str. 4, OU = GIS, O = DDL GmbH, CN = data.ddl.at
verify return:1
---
Certificate chain
 0 s:businessCategory = Private Organization, serialNumber = FN 374566h, jurisdictionC = AT, jurisdictionL = Wels, jurisdictionST = Oberoesterreich, C = AT, ST = Oberoesterreich, L = Ruestorf, street = Erwin Greiner-Str. 4, OU = GIS, O = DDL GmbH, CN = data.ddl.at
   i:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Extended Validation CA - SHA256 - G3
 1 s:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Extended Validation CA - SHA256 - G3
   i:OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
---
Server certificate
[...]

Y al final:Verify return code: 0 (ok)

Ahora cuando ejecuto openssl s_client -connect gitlab.ddl.at:443, obtengo:

CONNECTED(00000005)
depth=0 businessCategory = Private Organization, serialNumber = 374566h, jurisdictionC = AT, jurisdictionL = Wels, jurisdictionST = Oberoesterreich, C = AT, ST = Oberoesterreich, L = Ruestorf, street = Erwin Greiner-Stra\C3\9Fe 4, OU = GIS, O = DDL GmbH, CN = data.ddl.at
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 businessCategory = Private Organization, serialNumber = 374566h, jurisdictionC = AT, jurisdictionL = Wels, jurisdictionST = Oberoesterreich, C = AT, ST = Oberoesterreich, L = Ruestorf, street = Erwin Greiner-Stra\C3\9Fe 4, OU = GIS, O = DDL GmbH, CN = data.ddl.at
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:businessCategory = Private Organization, serialNumber = 374566h, jurisdictionC = AT, jurisdictionL = Wels, jurisdictionST = Oberoesterreich, C = AT, ST = Oberoesterreich, L = Ruestorf, street = Erwin Greiner-Stra\C3\9Fe 4, OU = GIS, O = DDL GmbH, CN = data.ddl.at
   i:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Extended Validation CA - SHA256 - G3
---
Server certificate
[...]

Siendo el primer error unable to get local issuer certificate.

También probé esto con el archivo de acceso público sicher.ddl.at, con el mismo error que gitlab.ddl.at.

El certificado que obtiene es para data.ddl.at, pero tiene SAN gitlab.ddl.at, ¿no debería esto hacerlo válido? ¿Qué estoy haciendo mal?

Respuesta1

Parece que al servidor gitlab.ddl.atle falta el certificado del emisor.

Si el cliente y el servidor no tienen los certificados raíz e intermedios adecuados, puede encontrarse con errores de validación.

Siempre me aseguro de instalar la cadena completa en el servidor para asegurarme de que todos los clientes puedan obtener todos los certificados de la cadena.

Tienes unas cuantas opciones.

  1. Exporte la cadena completa data.ddl.aty luego impórtela a gitlab.ddl.at.

  2. Utilice una herramienta como OpenSSL para combinar la cadena en un certificado y luego instálela engitlab.ddl.at

  3. Instale todos los certificados de la cadena en el servidor.

información relacionada