У моей компании есть сертификат для https://data.ddl.at, который, среди прочего, имеет SAN (Subject Alternative Name) для gitlab.ddl.at
.
Этот Gitlab-сервер является внутренним, и доменное имя разрешается только нашим внутренним DNS-сервером.
Для справки, есть также SAN https://sicher.ddl.at, который является публичным, и действителен в браузере.
Я настроил этот сертификат на сервере Gitlab, и когда я захожу на gitlab.ddl.at
, сертификат проверяется браузером и считается действительным.
Проблемы возникают, когда я пытаюсь использовать Gitlab-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
, разве это не должно сделать его действительным? Что я делаю не так?
Похоже на сервер по адресу gitlab.ddl.at
отсутствует сертификат эмитента.
Если у клиента и сервера нет надлежащих корневых и промежуточных сертификатов, вы можете столкнуться с ошибками проверки.
Я всегда устанавливаю на сервер полную цепочку, чтобы все клиенты могли получить все сертификаты в цепочке.
У вас есть несколько вариантов.
Экспортируйте всю цепочку из data.ddl.at
, а затем импортируйте ее в gitlab.ddl.at
.
Используйте такой инструмент, как OpenSSL, чтобы объединить цепочку в один сертификат, а затем установите на gitlab.ddl.at.
Установите все сертификаты в цепочке на сервер.