GitLab은 1개의 인증서로 구성된 인증서 목록을 제공합니다.

GitLab은 1개의 인증서로 구성된 인증서 목록을 제공합니다.

GitLab의 omnibus 설치 프로그램을 실행하고 조직의 SSL 인증서를 사용하려고 하는데 SSL 클라이언트에서 인증서 발급자를 알 수 없다고 불평합니다. 신뢰 체인에서 중간 인증서를 어떻게 구성해야 합니까?

내 설정은 최신 버전의 GitLab을 실행하여 HTTPS 및 HTTP용 포트를 노출하는 것으로 시작됩니다.

sudo docker run --detach --hostname myserver.myorg.org --publish 1443:443 --publish 1080:80 \
--publish 2222:22 --publish 5005:5005 --name gitlab1 \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:14.2.3-ce.0

그러면 에 여러 가지 기본 구성이 생성되므로 /srv/gitlab/config다음에서 서버의 URL을 설정합니다 gitlab.rb.

external_url 'https://myserver.myorg.org'

소속 기관으로부터 인증서 파일과 키 파일을 받았으므로 이를 /srv/gitlab/config/sslmyserver.myorg.org.crt. myserver.myorg.org.key그런 다음 GitLab 서버를 재구성합니다.

sudo docker exec -it gitlab1 bash -c "gitlab-ctl reconfigure"

이제 SSL 구성의 유효성을 검사해 보겠습니다.

echo | gnutls-cli -p1443 myserver.myorg.org

출력에 다음을 포함하여 많은 오류가 발생합니다.

...
Processed 129 CA certificate(s).
Resolving 'myserver.myorg.org:1443'...
Connecting to '127.0.0.1:1443'...
- Certificate type: X.509
- Got a certificate list of 1 certificates.
...
- Status: The certificate is NOT trusted. The certificate issuer is unknown. 
*** PKI verification of server certificate failed...
*** Fatal error: Error in the certificate.

완전한 신뢰 체인이 없는 것 같습니다. 우리 조직의 인증서 발급자는 "CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US"입니다. 나는 그들의 인증서를 찾았습니다그들의 웹사이트, 특정 항목을 다운로드했습니다.

wget https://cacerts.digicert.com/DigiCertTLSRSASHA2562020CA1-1.crt.pem

인증서의 텍스트 버전을 추출했습니다.

openssl x509 -in DigiCertTLSRSASHA2562020CA1-1.crt.pem -text
...
-----BEGIN CERTIFICATE-----
MIIEvjCCA6agAwIBAgIQBtjZBNVYQ0b2ii+nVCJ+xDANBgkqhkiG9w0BAQsFADBh
...
A7sKPPcw7+uvTPyLNhBzPvOk
-----END CERTIFICATE-----

이를 내 조직의 인증서에 추가했으므로 /srv/gitlab/config/ssl/myserver.myorg.org.crt이제 조직의 인증서가 먼저 있고 그 다음 Digicert 인증서가 있습니다.

-----BEGIN CERTIFICATE-----
... our organization's certificate ...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
... Digicert certificate I just downloaded
-----END CERTIFICATE-----

이 단계는 제가 가장 자신이 없는 단계입니다. 나는 그것을 기반으로하고있다.GitLab 지침:

클라이언트가 연결할 때 SSL 오류를 방지하려면 전체 인증서 체인을 사용해야 합니다. 전체 인증서 체인 순서는 먼저 서버 인증서, 모든 중간 인증서, 루트 CA 순으로 구성되어야 합니다.

이는 두 인증서를 동일한 파일에 함께 저장한다는 의미입니까?

어쨌든 명령을 실행 reconfigure하고 다시 테스트했습니다.

sudo docker exec -it gitlab1 bash -c "gitlab-ctl reconfigure"
...
echo | gnutls-cli -p1443 myserver.myorg.org

"1개의 인증서로 구성된 인증서 목록을 얻었습니다."를 포함하여 동일한 오류가 계속 발생합니다. 그래서 Digicert 인증서를 체인에 제대로 추가하지 않았나 하는 생각이 듭니다. 또한 우리 조직의 인증서 앞에 Digicert 인증서를 넣어 보았습니다.

인증서가 유효한지 확인하기 위해 따랐습니다.이 게시물. 와 함께 잘 작동 openssl s_server했기 openssl s_client때문에 문제는 내 GitLab 구성인 것 같습니다.

답변1

내가 읽을 때GitLab 문서reconfigure자세히 보니 와 의 차이를 오해하고 있었다는 걸 깨달았습니다 hup nginx.

SSL 인증서의 내용이 업데이트되었지만 gitlab.rb의 구성이 변경되지 않은 경우 gitlab-ctl 재구성은 NGINX에 영향을 미치지 않습니다. 대신 sudo gitlab-ctl hup nginx를 실행하여 NGINX가 기존 구성과 새 인증서를 정상적으로 다시 로드하도록 하세요.

나는 모든 것을 훨씬 더 많이 reconfigure할 것이라고 생각했습니다. 파일에서 아무것도 변경하지 않은 경우 인증서 파일의 변경 사항을 알 수 없는 hup nginx것으로 나타났습니다 .reconfigure/srv/gitlab/config/gitlab.rb

중간 인증서를 다음에 추가한 후 이 명령을 실행하여 문제를 해결했습니다 /srv/gitlab/config/ssl/myserver.myorg.org.crt.

sudo docker exec -it gitlab1 bash -c "gitlab-ctl hup nginx"

관련 정보