Při pokusu o propojení oficiálního rozšíření GitLab Workflow ve VS Code s instancí GitLabu (např. univerzitní gitlab.tul.cz) často narazíte na chybu:
FetchError: request to https://gitlab.example.com/api/v4/personal_access_tokens/self failed,
reason: unable to verify the first certificate;
if the root CA is installed locally, try running Node.js with --use-system-ca
- Node.js certifikační store: VS Code i jeho rozšíření běží na Node.js/Electronu, který ve výchozím nastavení nepoužívá certifikační úložiště operačního systému, ale vlastní vestavěný bundle důvěryhodných kořenových autorit.
- Chybějící intermediate CA: Pokud server neposílá kompletní řetězec certifikátů (intermediate CA, např. GEANT / HARICA / CESNET), Node.js si jej neumí automaticky stáhnout a ověření TLS spojení selže na prvním skoku (
unable to verify the first certificate).
Vypínat kontrolu certifikátů (ignoreCertificateErrors: true nebo proxyStrictSSL: false) je bezpečnostní riziko, protože tím otevíráte prostor pro MITM útoky. Správné řešení spočívá v sestavení kompletního řetězce a jeho předání Node runtime.
Nejprve stáhneme koncový (leaf) certifikát konkrétního GitLab serveru:
openssl s_client -showcerts -connect gitlab.tul.cz:443 </dev/null 2>/dev/null | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.tul-leaf.crtOvěříme vystavitele certifikátu a URL adresu, kde se nachází chybějící intermediate autorita:
openssl x509 -in ~/.tul-leaf.crt -noout -text | grep -A 2 "Authority Info Access"Výstup obvykle obsahuje odkaz na CA emitenta. Certifikát stáhneme a převedeme z binárního DER formátu do PEM:
curl -s http://crt.harica.gr/HARICA-GEANT-TLS-R1.cer | openssl x509 -inform DER -out ~/.intermediate-ca.crtSpojíme koncový certifikát i intermediate autoritu do jednoho souboru:
cat ~/.tul-leaf.crt ~/.intermediate-ca.crt > ~/.tul-fullchain.crtNode.js nativně podporuje proměnnou prostředí NODE_EXTRA_CA_CERTS, která přidá uvedené certifikáty k vestavěnému bundlu, aniž by vypínala TLS validaci:
NODE_EXTRA_CA_CERTS="$HOME/.tul-fullchain.crt" codeNyní stačí ve VS Code otevřít Command Palette (Ctrl + Shift + P), spustit GitLab: Add Account to VS Code, zadat URL a Personal Access Token. Ověření projde bez chyb.
Abyste nemuseli proměnnou zadávat ručně při každém spuštění z terminálu:
Přidání do systémového/uživatelského profilu. Přidejte export do souboru ~/.profile nebo ~/.bashrc:
echo 'export NODE_EXTRA_CA_CERTS="$HOME/.tul-fullchain.crt"' >> ~/.profile