
У моей компании есть сертификатhttps://data.ddl.at, который имеет, среди прочего, SAN (Subject Alternative Name) для gitlab.ddl.at
. Этот Gitlab-сервер является внутренним, и доменное имя разрешается только нашим внутренним DNS-сервером. Для справки, есть также SANhttps://sicher.ddl.at, который является общедоступным и действителен в браузере.
Я настроил этот сертификат на Gitlab-Server, и когда я захожу на gitlab.ddl.at
, сертификат проверяется браузером и считается действительным.
Проблемы возникают, как только я пытаюсь использовать Gitlab-Runner. У меня есть один установленный и зарегистрированный на другой машине, и после некоторых проблем поначалу я смог подключить его к основному экземпляру, но задания по-прежнему не могут извлечь подмодули, runner получает server certificate verification failed
.
Теперь о том, что я считаю основным симптомом проблемы: если я запускаю openssl s_client -connect data.ddl.at:443
, я получаю:
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
[...]
И в конце:Verify return code: 0 (ok)
Теперь, когда я запускаю openssl s_client -connect gitlab.ddl.at:443
, я получаю:
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
[...]
Первая ошибка — unable to get local issuer certificate
.
Я также попробовал это с общедоступным файлом sicher.ddl.at
, с той же ошибкой, что и gitlab.ddl.at
.
Сертификат, который он получает, предназначен для data.ddl.at
, но у него есть SAN gitlab.ddl.at
, разве это не должно сделать его действительным? Что я делаю не так?
решение1
Похоже, на сервере gitlab.ddl.at
отсутствует сертификат эмитента.
Если у клиента и сервера нет соответствующих корневых и промежуточных сертификатов, вы можете столкнуться с ошибками проверки.
Я всегда устанавливаю на сервер полную цепочку, чтобы все клиенты могли получить все сертификаты в цепочке.
У вас есть несколько вариантов.
Экспортируйте полную цепочку из
data.ddl.at
и затем импортируйте ее вgitlab.ddl.at
.Используйте такой инструмент, как OpenSSL, чтобы объединить цепочку в один сертификат, а затем установите его.
gitlab.ddl.at
Установите все сертификаты в цепочке на сервер.