import { Callout, Steps } from 'nextra/components'
import { Terminal, Code, Server, Download } from 'lucide-react'

# Masalah CLI & Bahasa Pemrograman

Bahkan jika Anda sudah menginstal Root CA di sistem operasi Anda, banyak alat pengembang dan bahasa pemrograman yang **mengabaikan penyimpanan sistem (system store)** dan menggunakan penyimpanan mereka sendiri.

<Callout type="info" emoji={<Download className="w-5 h-5" />}>
  **Prasyarat:**
  Anda harus memiliki file **`trustlab-root.crt`** yang sudah diunduh di mesin Anda.
  [Unduh di sini](/id/guide/getting-started/install-root-ca).
</Callout>

Jika kode atau skrip Anda gagal dengan kesalahan sertifikat, periksa solusi di bawah ini.

## 1. cURL & Wget

Alat baris perintah standar sering kali mencari file bundle tertentu.

### cURL
<Callout type="error" emoji={<Terminal className="w-5 h-5" />}>
  `curl: (60) SSL certificate problem: unable to get local issuer certificate`
</Callout>

**Solusi:**
Teruskan Root CA secara eksplisit:
```bash
curl --cacert /jalur/ke/trustlab-root.crt https://domain-anda.local
```

### Wget
**Solusi:**
```bash
wget --ca-certificate=/jalur/ke/trustlab-root.crt https://domain-anda.local
```

---

## 2. Node.js / JavaScript

Node.js tidak menggunakan Root CA Sistem secara default.

<Callout type="error" emoji={<Server className="w-5 h-5" />}>
  `Error: self signed certificate in certificate chain`
</Callout>

**Solusi (Variabel Lingkungan):**
Atur variabel ini sebelum menjalankan aplikasi Anda. Ini berfungsi untuk sebagian besar aplikasi Node.js (npm, yarn, skrip kustom).

```bash
export NODE_EXTRA_CA_CERTS="/jalur/ke/trustlab-root.crt"
node server.js
```

---

## 3. Python (Requests/Pip)

Pustaka `requests` di Python (dan `pip`) menggunakan paket sertifikatnya sendiri (`certifi`), mengabaikan penyimpanan sistem Windows/macOS/Linux.

<Callout type="error" emoji={<Code className="w-5 h-5" />}>
  `SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed'))`
</Callout>

**Solusi:**
Arahkan ke Root CA Anda menggunakan variabel lingkungan.

```bash
export REQUESTS_CA_BUNDLE="/jalur/ke/trustlab-root.crt"
python script.py
```

---

## 4. Aplikasi Java

Java menggunakan "Keystore" (JKS) milik sendiri dan biasanya **mengabaikan** Windows Certificate Store.

<Callout type="error" emoji={<Code className="w-5 h-5" />}>
  `sun.security.validator.ValidatorException: PKIX path building failed`
</Callout>

**Solusi:**
Anda harus mengimpor Root CA TrustLab ke dalam Java Keystore (cacerts).

<Steps>
### Lokasi standar cacerts
Biasanya di `$JAVA_HOME/lib/security/cacerts`.

### Impor dengan keytool
```bash
keytool -import -trustcacerts -alias trustlab-root \
  -file trustlab-root.crt \
  -keystore "$JAVA_HOME/lib/security/cacerts"
```
*Kata sandi default biasanya adalah `changeit`.*
</Steps>
