Încerc să rulez programul de instalare omnibus al GitLab și să folosesc certificatul SSL al organizației mele, dar clienții SSL se plâng că emitentul certificatului este necunoscut. Cum ar trebui să configurez certificatele intermediare în lanțul de încredere?
Configurarea mea începe cu rularea celei mai recente versiuni de GitLab, expunând porturile pentru HTTPS și HTTP, printre altele:
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
Asta creează o mulțime de configurații implicite în /srv/gitlab/config
, așa că merg și setez adresa URL a serverului gitlab.rb
:
external_url „https://myserver.myorg.org”
Am primit un fișier de certificat și un fișier cheie de la organizația mea, așa că le-am copiat în /srv/gitlab/config/ssl
director ca myserver.myorg.org.crt
și myserver.myorg.org.key
. Apoi reconfigurez serverul GitLab:
sudo docker exec -it gitlab1 bash -c "gitlab-ctl reconfigure"
Acum încerc să validez configurația SSL:
ecou | gnutls-cli -p1443 myserver.myorg.org
Primesc o grămadă de erori în rezultat, inclusiv acestea:
...
S-au procesat 129 certificat(e) CA.
Se rezolvă „myserver.myorg.org:1443”...
Se conectează la „127.0.0.1:1443”...
- Tip certificat: X.509
- Am o listă de certificate de 1 certificate.
...
- Stare: certificatul NU este de încredere. Emitentul certificatului este necunoscut.
*** Verificarea PKI a certificatului serverului a eșuat...
*** Eroare fatală: Eroare în certificat.
Se pare că nu am lanțul de încredere complet. Emitentul certificatului organizației noastre este „CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US”. Le-am găsit certificatele pe site-ul lor, și l-am descărcat pe acel anume:
wget https://cacerts.digicert.com/DigiCertTLSRSASHA2562020CA1-1.crt.pem
Am extras versiunea text a certificatului:
openssl x509 -in DigiCertTLSRSASHA2562020CA1-1.crt.pem -text
...
-----ÎNCEPE CERTIFICAT-----
MIIEvjCCA6agAwIBAgIQBtjZBNVYQ0b2ii+nVCJ+xDANBgkqhkiG9w0BAQsFADBh
...
A7sKPPcw7+uvTPyLNhBzPvOk
-----CERTIFICAT FINAL-----
Am atașat asta la certificatul organizației mele în /srv/gitlab/config/ssl/myserver.myorg.org.crt
deci acum are mai întâi certificatul organizației, apoi certificatul Digicert.
-----ÎNCEPE CERTIFICAT-----
... certificatul organizației noastre...
-----CERTIFICAT FINAL-----
-----ÎNCEPE CERTIFICAT-----
... Certificat Digicert pe care tocmai l-am descărcat
-----CERTIFICAT FINAL-----
Acesta este pasul în care sunt cel mai puțin încrezător. Mă bazez pe Instrucțiuni GitLab:
Asigurați-vă că utilizați întregul lanț de certificate pentru a preveni erorile SSL atunci când clienții se conectează. Ordinea completă a lanțului de certificate ar trebui să conțină mai întâi certificatul de server, urmat de toate certificatele intermediare, cu CA rădăcină în ultimul rând.
Asta înseamnă doar să lipiți cele două certificate împreună în același fișier?
Oricum, am condus reconfigura
comandă și testat din nou:
sudo docker exec -it gitlab1 bash -c "gitlab-ctl reconfigure"
...
ecou | gnutls-cli -p1443 myserver.myorg.org
Primesc în continuare aceleași erori, inclusiv „Am primit o listă de certificate de 1 certificate”. Asta mă face să cred că nu am adăugat corect certificatul Digicert în lanț. De asemenea, am încercat să pun certificatul Digicert înaintea certificatului organizației noastre.
Doar ca să mă asigur că certificatele sunt valabile, am urmat acest post. The openssl s_server
și openssl s_client
au funcționat bine împreună, așa că cred că problema este configurația mea GitLab.