
Minha empresa possui um certificado parahttps://data.ddl.at, que possui, entre outros, um SAN (nome alternativo do assunto) para gitlab.ddl.at
. Este servidor Gitlab é interno e o nome de domínio só é resolvido pelo nosso servidor DNS interno. Para referência, existe também o SANhttps://sicher.ddl.at, que é público e válido em um navegador.
Configurei este certificado no Gitlab-Server, e quando vou para gitlab.ddl.at
, o certificado é validado pelo navegador e considerado válido.
Os problemas surgem quando tento usar um Gitlab-Runner. Tenho um instalado e cadastrado em outra máquina, e depois de ter alguns problemas no início, consegui conectar na instância principal, mas os jobs ainda não conseguem fazer check-out dos submódulos, o runner está recebendo server certificate verification failed
.
Agora, aqui está o que acredito ser o sintoma raiz do problema: se eu executar openssl s_client -connect data.ddl.at:443
, obtenho:
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
[...]
E no final:Verify return code: 0 (ok)
Agora, quando corro openssl s_client -connect gitlab.ddl.at:443
, recebo:
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
[...]
Com o primeiro erro sendo unable to get local issuer certificate
.
Eu também tentei isso com o acesso público sicher.ddl.at
, com o mesmo erro que o gitlab.ddl.at
.
O certificado obtido é para data.ddl.at
, mas possui SAN gitlab.ddl.at
, isso não deveria torná-lo válido? O que estou fazendo de errado?
Responder1
Parece que gitlab.ddl.at
falta o certificado do emissor no servidor.
Se o cliente e o servidor não tiverem os certificados raiz e intermediários adequados, você poderá encontrar erros de validação.
Sempre certifico-me de instalar a cadeia completa no servidor para garantir que todos os clientes possam obter todos os certificados da cadeia.
Você tem algumas opções.
Exporte a cadeia completa de
data.ddl.at
e importe-a paragitlab.ddl.at
.Use uma ferramenta como OpenSSL para combinar a cadeia em um certificado e instale em
gitlab.ddl.at
Instale todos os certificados da cadeia no servidor.