refactor: remove i18n support, revert to single language (en) per user request

This commit is contained in:
dyzulk
2026-01-09 11:31:57 +07:00
parent 10fd0c3a43
commit 522586590d
27 changed files with 26 additions and 955 deletions

View File

@@ -1,58 +1,27 @@
import { ArrowRight, Shield, Globe, Lock, Server, Zap, ChevronRight } from "lucide-react";
import Link from 'next/link';
import { useRouter } from 'next/router';
interface LandingPageProps {
locale?: string;
}
const translations = {
en: {
hero: {
badge: "v1.0 is Live",
title: "Secure Your",
highlight: "Private Network",
description: "TrustLab is the definitive Private Certificate Authority (CA) for your internal infrastructure. Issue military-grade SSL/TLS certificates for Intranets, IoT, and Dev environments.",
cta_primary: "Get Started",
cta_secondary: "Generate Certificate",
},
features: {
root_ca: { title: "Private Root CA", desc: "Your own sovereign Certificate Authority. Trusted by your devices, unreachable by the public internet." },
internal_domains: { title: "Internal Domains", desc: "Issue certificates for .local, .corp, and private IP addresses (192.168.x.x) that Public CAs reject." },
smime: { title: "S/MIME Encryption", desc: "Secure internal email communication with employee-to-employee encryption." },
infrastructure: { title: "Infrastructure", desc: "Seamless integration guides for Nginx, IIS, Apache, and containerized environments." },
instant: { title: "Instant Issuance", desc: "No validation delays. Certificates are issued instantly via our modern dashboard." },
start: { title: "Start Now", desc: "Follow the Setup Guide to install the Root CA and go green in minutes." },
learn_more: "Learn more"
}
hero: {
badge: "v1.0 is Live",
title: "Secure Your",
highlight: "Private Network",
description: "TrustLab is the definitive Private Certificate Authority (CA) for your internal infrastructure. Issue military-grade SSL/TLS certificates for Intranets, IoT, and Dev environments.",
cta_primary: "Get Started",
cta_secondary: "Generate Certificate",
},
id: {
hero: {
badge: "v1.0 Sudah Rilis",
title: "Amankan",
highlight: "Jaringan Pribadi Anda",
description: "TrustLab adalah Otoritas Sertifikat (CA) Pribadi definitif untuk infrastruktur internal Anda. Terbitkan sertifikat SSL/TLS kelas militer untuk Intranet, IoT, dan lingkungan Dev.",
cta_primary: "Mulai Sekarang",
cta_secondary: "Buat Sertifikat",
},
features: {
root_ca: { title: "Root CA Pribadi", desc: "Otoritas Sertifikat berdaulat Anda sendiri. Dipercaya oleh perangkat Anda, tidak terjangkau oleh internet publik." },
internal_domains: { title: "Domain Internal", desc: "Terbitkan sertifikat untuk .local, .corp, dan alamat IP pribadi (192.168.x.x) yang ditolak oleh CA Publik." },
smime: { title: "Enkripsi S/MIME", desc: "Amankan komunikasi email internal dengan enkripsi antar karyawan." },
infrastructure: { title: "Infrastruktur", desc: "Panduan integrasi mulus untuk Nginx, IIS, Apache, dan lingkungan container." },
instant: { title: "Penerbitan Instan", desc: "Tanpa penundaan validasi. Sertifikat diterbitkan secara instan melalui dashboard modern kami." },
start: { title: "Mulai Sekarang", desc: "Ikuti Panduan Pengaturan untuk menginstal Root CA dan aman dalam hitungan menit." },
learn_more: "Pelajari selengkapnya"
}
features: {
root_ca: { title: "Private Root CA", desc: "Your own sovereign Certificate Authority. Trusted by your devices, unreachable by the public internet." },
internal_domains: { title: "Internal Domains", desc: "Issue certificates for .local, .corp, and private IP addresses (192.168.x.x) that Public CAs reject." },
smime: { title: "S/MIME Encryption", desc: "Secure internal email communication with employee-to-employee encryption." },
infrastructure: { title: "Infrastructure", desc: "Seamless integration guides for Nginx, IIS, Apache, and containerized environments." },
instant: { title: "Instant Issuance", desc: "No validation delays. Certificates are issued instantly via our modern dashboard." },
start: { title: "Start Now", desc: "Follow the Setup Guide to install the Root CA and go green in minutes." },
learn_more: "Learn more"
}
};
export function LandingPage({ locale: propLocale }: LandingPageProps) {
const { locale: routerLocale, defaultLocale } = useRouter();
const currentLocale = (propLocale || routerLocale || defaultLocale || 'en') as 'en' | 'id';
console.log('LandingPage Final Locale:', currentLocale);
const t = translations[currentLocale] || translations.en;
export function LandingPage() {
const t = translations;
return (
<div className="flex flex-col gap-16 py-8">
@@ -82,7 +51,7 @@ export function LandingPage({ locale: propLocale }: LandingPageProps) {
<Link href="https://trustlab.dyzulk.com/signup" className="inline-flex items-center gap-2 px-6 py-3 rounded-xl bg-blue-600 hover:bg-blue-700 text-white font-semibold transition-all hover:scale-105 shadow-lg shadow-blue-500/20">
{t.hero.cta_primary} <ArrowRight className="w-4 h-4" />
</Link>
<Link href={locale === 'id' ? "/guide/certificates/request-new" : "/guide/certificates/request-new"} className="inline-flex items-center gap-2 px-6 py-3 rounded-xl bg-white dark:bg-neutral-800 text-neutral-900 dark:text-white border border-neutral-200 dark:border-neutral-700 font-semibold hover:bg-neutral-50 dark:hover:bg-neutral-700 transition-all">
<Link href="/guide/certificates/request-new" className="inline-flex items-center gap-2 px-6 py-3 rounded-xl bg-white dark:bg-neutral-800 text-neutral-900 dark:text-white border border-neutral-200 dark:border-neutral-700 font-semibold hover:bg-neutral-50 dark:hover:bg-neutral-700 transition-all">
{t.hero.cta_secondary}
</Link>
</div>
@@ -95,42 +64,42 @@ export function LandingPage({ locale: propLocale }: LandingPageProps) {
icon={<Shield className="w-6 h-6 text-emerald-500" />}
title={t.features.root_ca.title}
description={t.features.root_ca.desc}
link={locale === 'id' ? "/guide/concepts/pki-fundamentals" : "/guide/concepts/pki-fundamentals"}
link="/guide/concepts/pki-fundamentals"
learnMoreText={t.features.learn_more}
/>
<FeatureCard
icon={<Globe className="w-6 h-6 text-blue-500" />}
title={t.features.internal_domains.title}
description={t.features.internal_domains.desc}
link={locale === 'id' ? "/guide/certificates/request-new" : "/guide/certificates/request-new"}
link="/guide/certificates/request-new"
learnMoreText={t.features.learn_more}
/>
<FeatureCard
icon={<Lock className="w-6 h-6 text-violet-500" />}
title={t.features.smime.title}
description={t.features.smime.desc}
link={locale === 'id' ? "/guide/integrations/smime" : "/guide/integrations/smime"}
link="/guide/integrations/smime"
learnMoreText={t.features.learn_more}
/>
<FeatureCard
icon={<Server className="w-6 h-6 text-orange-500" />}
title={t.features.infrastructure.title}
description={t.features.infrastructure.desc}
link={locale === 'id' ? "/guide/integrations/web-servers" : "/guide/integrations/web-servers"}
link="/guide/integrations/web-servers"
learnMoreText={t.features.learn_more}
/>
<FeatureCard
icon={<Zap className="w-6 h-6 text-yellow-500" />}
title={t.features.instant.title}
description={t.features.instant.desc}
link={locale === 'id' ? "/guide/getting-started/access-dashboard" : "/guide/getting-started/access-dashboard"}
link="/guide/getting-started/access-dashboard"
learnMoreText={t.features.learn_more}
/>
<FeatureCard
icon={<ArrowRight className="w-6 h-6 text-neutral-500" />}
title={t.features.start.title}
description={t.features.start.desc}
link={locale === 'id' ? "/guide/getting-started/install-root-ca" : "/guide/getting-started/install-root-ca"}
link="/guide/getting-started/install-root-ca"
isAction
learnMoreText={t.features.learn_more}
/>

View File

@@ -4,10 +4,7 @@ const withNextra = require('nextra')({
})
module.exports = withNextra({
i18n: {
locales: ['en', 'id'],
defaultLocale: 'en',
},
images: {
unoptimized: true,
},

View File

@@ -1,15 +0,0 @@
{
"index": {
"title": "Beranda",
"type": "page",
"display": "hidden"
},
"guide": {
"title": "Panduan Pengguna",
"type": "page"
},
"developer": {
"title": "Developer API",
"type": "page"
}
}

View File

@@ -1,4 +0,0 @@
{
"index": "Dokumentasi API",
"endpoints": "Titik Akhir (Endpoints)"
}

View File

@@ -1,71 +0,0 @@
import { Tabs } from 'nextra/components'
import { Code, Terminal, Send, ShieldCheck } from 'lucide-react'
# Titik Akhir (Endpoints)
Gunakan titik akhir API berikut untuk melakukan integrasi programatik dengan layanan TrustLab.
## Dasar URL
Semua permintaan API dilakukan ke:
`https://trustlab.dyzulk.com/api`
---
## Pengambilan Sertifikat Publik
Endpoint ini digunakan untuk mengambil informasi publik mengenai sertifikat atau CA.
### 1. Unduh Root CA
Mengunduh sertifikat root pemegang kepercayaan utama.
- **Endpoint**: `GET /ca/root/download`
- **Output**: File `trustlab-root.crt`
### 2. Lihat Detail Sertifikat (via Serial)
Mendapatkan metadata sertifikat berdasarkan nomor serinya.
- **Endpoint**: `GET /certificates/detail/{serial_number}`
- **Respon Contoh**:
```json
{
"serial": "12345-ABCDE",
"common_name": "myserver.local",
"issuer": "TrustLab Intermediate CA",
"not_after": "2025-12-31T23:59:59Z",
"status": "VALID"
}
```
---
## Contoh Implementasi (cURL)
<Tabs items={['Unduh Root', 'Cek Status']}>
<Tabs.Tab>
```bash
curl -O https://trustlab.dyzulk.com/api/ca/root/download
```
</Tabs.Tab>
<Tabs.Tab>
```bash
curl https://trustlab.dyzulk.com/api/certificates/detail/99887766
```
</Tabs.Tab>
</Tabs>
---
## Status Respon API
TrustLab menggunakan kode status HTTP standar:
| Kode | Arti |
| :--- | :--- |
| `200 OK` | Permintaan berhasil. |
| `404 Not Found` | Sertifikat tidak ditemukan. |
| `500 Server Error` | Terjadi masalah pada database TrustLab. |
---
> [!IMPORTANT]
> Fitur manajemen sertifikat penuh (Create, Revoke, Renew) via API saat ini masih dalam tahap **Beta Tertutup**. Silakan hubungi admin untuk mendapatkan akses API Key jika Anda memerlukannya untuk otomatisasi infrastruktur.

View File

@@ -1,20 +0,0 @@
# Dokumentasi API Developer
Gunakan API TrustLab untuk mengotomatiskan manajemen siklus hidup sertifikat dalam alur kerja pengembangan atau infrastruktur Anda.
## Gambaran Umum
API kami berbasis REST dan mengembalikan respon dalam format JSON. Saat ini, API mendukung operasi dasar untuk pengambilan informasi sertifikat publik.
## Autentikasi
Saat ini, endpoint publik untuk pengambilan sertifikat tidak memerlukan autentikasi API Key khusus. Namun, penggunaan secara massal untuk endpoint manajemen akan segera hadir.
## Endpoint Utama
- **[Daftar Endpoint](/id/developer/endpoints)**: Lihat daftar lengkap fungsi API yang tersedia saat ini.
---
> [!NOTE]
> Dokumentasi API sedang dikembangkan lebih lanjut. Hubungi tim dukungan kami jika Anda memerlukan akses integrasi skala besar.

View File

@@ -1,8 +0,0 @@
{
"index": "Panduan Pengguna",
"getting-started": "Mulai Cepat",
"concepts": "Konsep Inti",
"certificates": "Operasi Sertifikat",
"integrations": "Integrasi",
"troubleshooting": "Pemecahan Masalah"
}

View File

@@ -1,7 +0,0 @@
{
"request-new": "Minta Sertifikat Baru",
"download-install": "Unduh & Format",
"view-details": "Lihat Detail",
"renewal": "Proses Perpanjangan",
"revocation": "Pencabutan (Revocation)"
}

View File

@@ -1,43 +0,0 @@
# Unduh & Format (PEM, PFX, JKS)
Setelah sertifikat Anda diterbitkan, Anda dapat mengunduhnya dalam berbagai format yang sesuai untuk server dan aplikasi yang berbeda.
## Format yang Tersedia
| Format | Ekstensi | Digunakan Untuk |
| :--- | :--- | :--- |
| **PEM (Nginx/Apache)** | `.crt`, `.key` | Server web Linux standar. Anda mendapatkan file Sertifikat dan Private Key terpisah. |
| **PFX / PKCS#12** | `.pfx`, `.p12` | IIS (Windows), Microsoft Exchange, Sertifikat Klien (S/MIME). Berisi key dan cert sekaligus. |
| **JKS (Java)** | `.jks` | Aplikasi Java (Tomcat, Spring Boot). |
## Cara Mengunduh (Salin & Simpan)
Dashboard memungkinkan Anda untuk menyalin data mentah sertifikat secara langsung.
1. Buka menu **"My Certificates"** dan klik tombol **View (Ikon Mata)** pada sertifikat Anda.
2. **Sertifikat:** Gulir ke bagian "Certificate (CRT)" dan klik **Ikon Salin** di pojok kanan atas. Simpan ke dalam file bernama `domain.crt` atau `domain.pem`.
3. **Private Key:** Gulir ke bagian "Private Key (KEY)", klik **Show**, lalu klik **Ikon Salin**. Simpan ke dalam file bernama `domain.key`.
> [!TIP]
> Gunakan editor teks murni (Notepad, VS Code, Nano) untuk menyimpan file-file ini. Jangan gunakan Word atau editor Rich Text.
> [!WARNING]
> **Private Key** dihasilkan secara aman secara lokal di browser/server. Jika Anda menghilangkannya, kunci tersebut **TIDAK BISA** dipulihkan. Anda harus melakukan revoke dan menerbitkan ulang sertifikat.
## Contoh Instalasi
### Nginx (PEM)
```nginx
server {
listen 443 ssl;
server_name internal.app;
ssl_certificate /etc/nginx/ssl/internal.app.crt;
ssl_certificate_key /etc/nginx/ssl/internal.app.key;
}
```
### Windows (PFX)
1. Klik dua kali file `.pfx` yang diunduh.
2. Ikuti "Certificate Import Wizard".
3. Saat diminta kata sandi, masukkan kata sandi yang Anda tetapkan saat mengunduh (atau kata sandi ekspor default yang disediakan di UI).

View File

@@ -1,7 +0,0 @@
# Pembaruan Sertifikat
Dokumentasi untuk pembaruan sertifikat sedang dalam proses penerjemahan. Silakan lihat versi [Bahasa Inggris](/guide/certificates/renewal) untuk saat ini.
<div className="mt-4 p-4 bg-orange-100 dark:bg-orange-900 border border-orange-200 dark:border-orange-800 rounded-lg text-sm text-orange-800 dark:text-orange-200">
⚠️ **Catatan**: Halaman ini belum diterjemahkan sepenuhnya.
</div>

View File

@@ -1,51 +0,0 @@
import { Steps, Callout, Cards, Card } from 'nextra/components'
import { FileBadge, ShieldCheck, Globe, Code, Save, AlertTriangle } from 'lucide-react'
# Menerbitkan Sertifikat Baru
TrustLab menyediakan wizard yang disederhanakan untuk menghasilkan sertifikat SSL/TLS pribadi untuk infrastruktur internal Anda.
## Prasyarat
Sebelum memulai, pastikan Anda memiliki:
* Akses akun TrustLab yang aktif.
* **Root CA** telah terinstal di perangkat Anda (agar mempercayai sertifikat yang diterbitkan).
---
<Steps>
### 1. Buka Menu Sertifikat
Akses halaman **Certificates**. Tampilan ini mencantumkan semua sertifikat aktif dan kedaluwarsa Anda. Klik tombol **"Generate New"** (atau "+") untuk memulai.
![Certificates List](/images/guide/certificates-screen.png)
### 2. Masukkan Detail Domain (Mode Default)
Secara default, Anda hanya perlu memberikan Identitas. Sistem akan mengisi otomatis metadata Organisasi & Lokasi.
![Default Generation Modal](/images/guide/certificates-generate-modal-default-metadata-screen.png)
* **Common Name (CN)**: Domain utama (misalnya, `app.internal`).
* **SANs**: Domain tambahan atau alamat IP.
* **Key Strength**: Pilih tingkat enkripsi.
![Key Strength Selector](/images/guide/certificates-generate-modal-key-strength-focused-screen.png)
* **2048-bit**: Standar industri, kompatibel dengan semua perangkat.
* **4096-bit**: Keamanan lebih tinggi, sedikit lebih intensif pada CPU.
### 3. Kustomisasi CSR (Kontrol Manual)
Aktifkan **"Manual Control"** jika Anda perlu menimpa bidang Identitas default (misalnya, untuk kantor cabang tertentu atau entitas hukum khusus).
![Manual Control Modal](/images/guide/certificates-generate-modal-manual-control-screen.png)
* **Organization (O)**: Ganti nama perusahaan default.
* **Locality (L) / State (ST)**: Atur data lokasi spesifik.
* **Country (C)**: Kode ISO Negara.
### 4. Terbitkan & Simpan
Klik **Generate**.
* **Certificate (.pem)** dan **Private Key (.key)** akan dihasilkan secara instan.
* Anda dapat menyalinnya segera atau mengaksesnya nanti dari halaman **Certificate Details**.
<Callout type="info" emoji={<Save className="w-5 h-5" />}>
**Penyimpanan:** Private Key Anda disimpan dengan aman di server (dienkripsi). Anda dapat melihatnya kapan saja dengan mengklik **"View Details"** pada daftar sertifikat.
</Callout>
</Steps>

View File

@@ -1,22 +0,0 @@
# Pencabutan (Revocation)
Pencabutan membatalkan validitas sertifikat sebelum tanggal kedaluwarsanya. Ini sangat penting jika Private Key Anda bocor atau hilang.
## Kapan Harus Mencabut?
- **Kebocoran Kunci (Key Compromise)**: Anda curiga seseorang telah mencuri Private Key Anda.
- **Perubahan Layanan**: Nama domain secara efektif tidak lagi menjadi milik layanan tersebut.
- **Kesalahan**: Sertifikat diterbitkan dengan detail yang salah.
## Cara Menghapus / Mencabut
Jika sertifikat bocor atau tidak lagi dibutuhkan, Anda dapat menghapusnya dari sistem.
1. Buka daftar **Certificates**.
2. Cari sertifikat yang ingin dihapus.
3. Klik **Ikon Tempat Sampah** (Delete) di sisi kanan baris.
4. **Konfirmasi**: Ketik `DELETE` di modal konfirmasi untuk menghapus sertifikat dan private key-nya secara permanen dari TrustLab.
![Delete Certificate Action](/images/guide/certificates_list_view_1767869137654.png)
## CRL (Certificate Revocation List)
Setelah dicabut, nomor seri sertifikat akan ditambahkan ke TrustLab CRL. Semua klien yang memeriksa CRL akan segera menolak sertifikat tersebut.

View File

@@ -1,42 +0,0 @@
import { Steps } from 'nextra/components'
import { Search, Eye, Clipboard, ShieldAlert } from 'lucide-react'
# Lihat Detail Sertifikat
Setiap sertifikat di TrustLab memiliki metadata lengkap yang bisa Anda audit kapan saja untuk memastikan kesesuaian identitas dan keamanan.
## Cara Melihat Detail
<Steps>
### Navigasi ke List
Di menu utama Dashboard, klik **"Manage Certificates"**. Anda akan melihat daftar semua sertifikat yang pernah diterbitkan.
### Klik Ikon Mata
Gunakan kolom pencarian untuk menemukan domain Anda. Klik tombol **"View Details"** (ikon mata 👁️) di sisi kanan baris sertifikat.
### Tinjau Tab Informasi
Anda akan melihat detail seperti:
- **Serial Number**: ID unik sertifikat Anda.
- **Validity period**: Tanggal mulai dan berakhir.
- **Issuer**: CA mana yang menandatangani (TrustLab Intermediate).
- **Public Key Info**: Algoritma yang digunakan (RSA 2048/4096).
</Steps>
---
## Audit Metadata
Penting untuk memeriksa detail berikut secara berkala:
- **Thumbprint (SHA-1/SHA-256)**: Gunakan fingerprint ini untuk memverifikasi apakah sertifikat yang terpasang di server benar-benar yang Anda terbitkan dari TrustLab.
- **Subject Alternative Names (SAN)**: Pastikan semua alias domain yang dibutuhkan sudah terdaftar di sini.
- **Status**: Pastikan statusnya **Valid** (hijau). Jika warnanya merah, berarti sertifikat telah kadaluarsa atau dicabut.
---
## Keamanan Data Detail
Meskipun detail sertifikat (Public) aman untuk dilihat, tim TrustLab menyarankan untuk membatasi akses ke dashboard hanya untuk admin sistem yang berkepentingan untuk mencegah kebocoran informasi topologi jaringan.
> [!TIP]
> Anda bisa menyalin (copy) Serial Number secara cepat melalui tombol clipboard di samping teks untuk keperluan dokumentasi internal atau konfigurasi firewall.

View File

@@ -1,4 +0,0 @@
{
"pki-fundamentals": "Dasar-Dasar PKI",
"trust-architecture": "Arsitektur Kepercayaan"
}

View File

@@ -1,58 +0,0 @@
import { Steps } from 'nextra/components'
import { Shield, Key, Lock, Globe } from 'lucide-react'
# Dasar-Dasar PKI
Memahami cara kerja **Public Key Infrastructure (PKI)** sangat penting untuk mengelola keamanan jaringan internal Anda. TrustLab menyederhanakan konsep kompleks ini menjadi alur kerja yang mudah dikelola.
## Apa itu PKI?
PKI adalah kerangka kerja yang terdiri dari peran, kebijakan, perangkat lunak, dan perangkat keras yang digunakan untuk membuat, mengelola, mendistribusikan, menggunakan, menyimpan, dan mencabut sertifikat digital.
---
## Komponen Utama TrustLab
TrustLab mengelola tiga pilar utama keamanan untuk Anda:
### 1. Root Certificate Authority (CA)
Akar dari kepercayaan di seluruh jaringan Anda. Root CA digunakan untuk menandatangani sertifikat lain di bawahnya. Jika perangkat mempercayai Root CA ini, mereka akan mempercayai semua sertifikat yang diterbitkannya.
### 2. Intermediate CA
Digunakan oleh TrustLab untuk operasional sehari-hari. Kami tidak menggunakan Root CA langsung untuk menandatangani sertifikat pengguna akhir (end-entity) demi alasan keamanan (isolasi).
### 3. Sertifikat Pengguna Akhir
Sertifikat SSL/TLS yang Anda pasang di server web, perangkat IoT, atau klien email. Inilah yang sebenarnya "mengamankan" koneksi Anda.
---
## Cara Kerja Kepercayaan (Trust)
Bagaimana browser Anda tahu bahwa sebuah situs web itu aman?
<Steps>
### Instalasi Akar
Administrator menginstal Root CA TrustLab ke sistem trust store Anda.
### Pengenalan Sertifikat
Saat Anda mengakses situs internal, server menyajikan sertifikatnya.
### Verifikasi Rantai
Browser memeriksa: "Apakah sertifikat ini ditandatangani oleh pemegang yang saya percayai (Root CA)?"
### Koneksi Aman
Jika rantai valid, gembok hijau muncul dan enkripsi data dimulai.
</Steps>
---
## Mengapa PKI Privat?
Mungkin Anda bertanya, kenapa tidak menggunakan CA publik seperti Let's Encrypt?
1. **Domain Non-Publik**: CA publik tidak bisa mengeluarkan sertifikat untuk `.local` atau `.internal`.
2. **Kontrol Penuh**: Anda menentukan masa berlaku, algoritma enkripsi, dan siapa yang berhak mendapatkan sertifikat.
3. **Tanpa Validasi DNS**: Karena ini internal, Anda tidak perlu membuktikan kepemilikan domain ke pihak luar.
> [!IMPORTANT]
> Keamanan PKI privat Anda bergantung sepenuhnya pada **kerahasiaan Private Key Root CA**. TrustLab menyimpan key ini dengan enkripsi kuat untuk memastikan integritas jaringan Anda.

View File

@@ -1,50 +0,0 @@
import { Steps } from 'nextra/components'
import { Shield, Lock, Server, Users } from 'lucide-react'
# Arsitektur Kepercayaan
Arsitektur TrustLab dibangun di atas prinsip isolasi dan keamanan berlapis. Kami menggunakan struktur otoritas bertingkat untuk memastikan integritas jaringan Anda tetap terjaga.
## Hirarki Otoritas Sertifikat
Untuk keamanan maksimal, TrustLab tidak menggunakan satu kunci untuk semua hal. Kami menggunakan hirarki berikut:
### 1. Root CA (Offline Root)
Ini adalah "Ayah" dari segala kepercayaan. Key ini sangat sensitif dan idealnya jarang digunakan. Dalam infrastruktur yang sangat ketat, Root CA biasanya tetap offline.
### 2. Intermediate CA (Issuing CA)
TrustLab secara otomatis membuat Intermediate CA yang menandatangani sertifikat pengguna Anda. Jika Intermediate CA disusupi, Root CA dapat mencabutnya tanpa merusak seluruh ekosistem keamanan Anda.
### 3. End-Entity Certificates
Aplikasi atau server Anda menggunakan sertifikat ini. Mereka memiliki masa berlaku yang lebih pendek (biasanya 1 tahun atau kurang) untuk meminimalkan risiko.
---
## Alur Penerbitan Sertifikat
Bagaimana data Anda berpindah dari dashboard hingga menjadi sertifikat sah?
<Steps>
### Permintaan Klien (CSR)
Dashboard membuat sepasang kunci (Public & Private). Public key dikirim dalam format Certificate Signing Request (CSR).
### Validasi Internal
Dashboard TrustLab memverifikasi identitas Anda dan hak akses Anda terhadap domain yang diminta.
### Penandatanganan CA
Intermediate CA menandatangani CSR tersebut menggunakan Private Key CA-nya sendiri.
### Pengiriman Sertifikat
Sertifikat hasil tanda tangan dikembalikan ke Dashboard untuk Anda unduh.
</Steps>
---
## Keamanan Kunci (Key Security)
- **Enkripsi saat Istirahat (Encryption at Rest)**: Semua Private Key disimpan dalam database menggunakan enkripsi tingkat tinggi (AES-256).
- **Isolasi Database**: Hanya layanan CA internal yang memiliki akses ke modul yang mendekripsi key tersebut.
- **Audit Logs**: Setiap aksi penandatanganan dicatat dalam log sistem yang tidak dapat diubah (immutable logs).
> [!TIP]
> Jangan pernah membagikan file Private Key (`.key`) Anda kepada siapapun. Siapapun yang memiliki key tersebut bisa menyamar sebagai server Anda.

View File

@@ -1,4 +0,0 @@
{
"install-root-ca": "Instal Root CA",
"access-dashboard": "Akses Dashboard"
}

View File

@@ -1,96 +0,0 @@
import { Callout, Steps, Cards, Card } from 'nextra/components'
import { Monitor, Smartphone, LayoutDashboard, Key, Shield, Info, Clock, AlertTriangle } from 'lucide-react'
# Mengakses Dashboard
**TrustLab Dashboard** adalah pusat kendali utama Anda untuk mengelola sertifikat. Di sini Anda dapat meminta sertifikat baru, mengunduh kunci, dan mengelola sertifikat yang sudah ada.
![Antarmuka Login TrustLab](/images/guide/login-screen.png)
## Metode Autentikasi
Kami mengutamakan keamanan dengan menawarkan opsi autentikasi modern tanpa kata sandi (passwordless).
<Cards>
<Card icon={<Shield className="w-6 h-6" />} title="SSO (Google / GitHub)" href="#1-single-sign-on-sso" arrow />
<Card icon={<Key className="w-6 h-6" />} title="Magic Link (Email)" href="#2-magic-link" arrow />
</Cards>
### 1. Single Sign-On (SSO)
Cara tercepat untuk masuk. Klik **Continue with Google** atau **Continue with GitHub**.
<Callout type="info" emoji={<Info className="w-5 h-5" />}>
**Perilaku SSO:**
* **Pengguna Lama:** Anda hanya dapat Masuk via SSO jika alamat email Anda sudah terdaftar.
* **Pengguna Baru:** Anda dapat **Mendaftar** akun baru secara instan dengan mengklik tombol Social Login pada halaman *Sign In* atau *Sign Up*.
</Callout>
### 2. Magic Link
Masuk yang aman dan tanpa kata sandi melalui email.
<Steps>
### Masukkan Email
Masukkan alamat email terdaftar Anda pada formulir login dan klik **"Continue with Email"**.
### Cek Kotak Masuk
Anda akan menerima email berisi tautan login unik yang sensitif terhadap waktu.
### Klik untuk Verifikasi
Klik tombol **"Sign in to TrustLab"** di dalam email tersebut. Anda akan langsung masuk ke dashboard secara instan.
</Steps>
<Callout type="warning" emoji={<Clock className="w-5 h-5" />}>
**Kedaluwarsa:** Tautan Magic Link hanya berlaku selama **15 menit**. Jika kedaluwarsa, cukup minta tautan baru dengan memasukkan email Anda kembali.
</Callout>
## Ikhtisar Dashboard
Setelah berhasil masuk, Anda akan mendarat di dashboard utama.
![Ikhtisar Dashboard TrustLab](/images/guide/dashboard-screen.png)
Hub pusat ini memungkinkan Anda untuk mengakses:
* **Active Certificates**: Lihat semua sertifikat valid yang diterbitkan untuk Anda.
* **Request Certificate**: Wizard untuk menghasilkan Private Key dan CSR baru.
* **Revocation**: Antarmuka untuk menandai sertifikat yang hilang atau bocor sebagai tidak valid.
## Registrasi
Pengguna baru dapat membuat akun untuk mulai mengelola sertifikat.
![Antarmuka Registrasi TrustLab](/images/guide/register-screen.png)
<Steps>
### Opsi A: Registrasi Sosial (Instan)
1. Klik **Continue with Google** atau **Continue with GitHub**.
2. **Atur Kata Sandi:** Pertama, pastikan Anda telah [**Menginstal Root CA**](/id/guide/getting-started/install-root-ca) di perangkat Anda.
![Layar Atur Kata Sandi](/images/guide/set-password-after-social-screen.png)
### Opsi B: Registrasi Email
1. Klik **"Sign up"** atau isi formulir.
2. Berikan detail dan kata sandi Anda.
3. **Verifikasi Email:** Klik tautan yang dikirim ke kotak masuk Anda untuk mengaktifkan.
</Steps>
## Pemulihan Kata Sandi
Jika Anda kehilangan akses ke akun, Anda dapat mengatur ulang kata sandi dengan aman.
![Antarmuka Lupa Kata Sandi TrustLab](/images/guide/forgot-password-screen.png)
1. Klik **"Forgot password?"** pada layar login.
2. Masukkan alamat email terdaftar Anda.
3. Cek kotak masuk Anda untuk tautan pengaturan ulang kata sandi.
4. Buat kata sandi baru dan masuk.
## Pemecahan Masalah
### Saya tidak menerima Magic Link
* **Cek Spam/Junk**: Seringkali masuk ke sana untuk domain perusahaan.
* **Tunggu 1-2 Menit**: Pengiriman email terkadang tertunda.
* **Whitelist Pengirim**: Tambahkan `@trustlab.dyzulk.com` ke daftar **Safe Senders** penyedia email Anda agar tidak diblokir.
### Akses Ditolak / Pengguna Tidak Ditemukan
* **Salah Ketik**: Periksa kembali alamat email Anda.
* **Belum Terdaftar**: Jika Anda belum membuat akun, silakan **Daftar** terlebih dahulu. Anda tidak dapat masuk via SSO jika email Anda belum ada di sistem kami (kecuali Anda menggunakan alur Pendaftaran).

View File

@@ -1,64 +0,0 @@
import { Tabs, Steps, Cards, Card, Callout } from 'nextra/components'
import { Monitor, Smartphone, AlertTriangle, Info } from 'lucide-react'
# Menginstal Root CA
Untuk memastikan browser Anda mempercayai sertifikat yang diterbitkan oleh TrustLab, Anda harus menginstal Root CA kami.
## Instalasi Cepat (Bundle)
Instal secara instan **SEMUA** sertifikat Root & Intermediate TrustLab menggunakan skrip bundle otomatis kami.
### Linux / Server (CLI)
Pilih distribusi Anda untuk mendapatkan perintah instalasi yang dioptimalkan:
<Tabs items={['Debian/Ubuntu', 'RHEL/CentOS', 'Arch Linux', 'Universal']}>
<Tabs.Tab>
```bash
sudo apt update && sudo apt install -y curl && curl -sL https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.sh | sudo bash
```
</Tabs.Tab>
<Tabs.Tab>
```bash
(sudo yum install -y curl || sudo dnf install -y curl) && curl -sL https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.sh | sudo bash
```
</Tabs.Tab>
<Tabs.Tab>
```bash
sudo pacman -Sy --noconfirm curl && curl -sL https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.sh | sudo bash
```
</Tabs.Tab>
<Tabs.Tab>
```bash
curl -sL https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.sh | sudo bash
```
</Tabs.Tab>
</Tabs>
### Ekosistem Windows & Apple
<Cards>
<Card icon={<Monitor className="w-6 h-6" />} title="Windows Bundle Installer (.bat)" href="https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.bat" arrow />
<Card icon={<Smartphone className="w-6 h-6" />} title="macOS / iOS Profile (.mobileconfig)" href="https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.mobileconfig" arrow />
</Cards>
<Callout type="warning" emoji={<AlertTriangle className="w-5 h-5" />}>
**Pengguna Windows:** Anda **WAJIB** klik kanan file `.bat` dan pilih **"Run as Administrator"**. Mengklik dua kali secara langsung kemungkinan besar akan gagal karena batasan izin.
</Callout>
<Callout type="info" emoji={<Info className="w-5 h-5" />}>
**Pengguna Apple:** Setelah mengunduh profil, buka **System Settings > Privacy & Security > Profiles** untuk menginstalnya. Untuk iOS, lihat bagian *Instalasi Sertifikat Individu* di bawah untuk langkah-langkah kepercayaan mendetail.
</Callout>
---
import { DynamicInstallationGuide } from '../../../components/DynamicInstallationGuide'
## Instalasi Sertifikat Individu
Jika Anda perlu menginstal sertifikat tertentu secara individu (misal: hanya Root, atau Intermediate tertentu), gunakan panduan langsung di bawah ini.
<DynamicInstallationGuide locale="id" />

View File

@@ -1,23 +0,0 @@
# Panduan Pengguna TrustLab
Selamat datang di dokumentasi resmi TrustLab. Panduan ini dirancang untuk membantu Anda memahami, menginstal, dan mengelola Otoritas Sertifikat (CA) privat Anda sendiri.
## Apa itu TrustLab?
TrustLab adalah solusi manajemen PKI (Public Key Infrastructure) yang disederhanakan untuk jaringan internal. Kami memungkinkan Anda untuk:
- **Mengeluarkan Sertifikat SSL/TLS** untuk domain internal seperti `.local`, `.corp`, atau alamat IP privat.
- **Mengamankan Komunikasi IoT** dan perangkat dalam jaringan lokal.
- **Enkripsi Email (S/MIME)** untuk kerahasiaan data karyawan.
- **Otomasi Integrasi** dengan web server modern seperti Nginx dan IIS.
## Langkah Cepat
1. **Instal Root CA**: Langkah pertama yang wajib dilakukan agar semua sertifikat Anda dipercaya oleh perangkat. [Baca selengkapnya](/id/guide/getting-started/install-root-ca)
2. **Akses Dashboard**: Masuk ke portal manajemen Anda untuk mulai menerbitkan sertifikat. [Baca selengkapnya](/id/guide/getting-started/access-dashboard)
3. **Terbitkan Sertifikat**: Pelajari cara membuat permintaan sertifikat baru dalam hitungan detik. [Baca selengkapnya](/id/guide/certificates/request-new)
---
> [!TIP]
> Mulailah dari bagian **Mulai Cepat** untuk mendapatkan Certificate Authority yang berfungsi penuh dalam waktu kurang dari 5 menit.

View File

@@ -1,4 +0,0 @@
{
"web-servers": "Konfigurasi Web Server",
"smime": "Keamanan Email S/MIME"
}

View File

@@ -1,77 +0,0 @@
import { Steps, Callout, Tabs } from 'nextra/components'
import { Mail, BadgeAlert, ShieldCheck } from 'lucide-react'
# Keamanan Email S/MIME
Secure/Multipurpose Internet Mail Extensions (S/MIME) memungkinkan Anda untuk **menandatangani** (membuktikan identitas) dan **mengenkripsi** (melindungi konten) pesan email.
<Callout type="warning" emoji={<BadgeAlert className="w-5 h-5" />}>
**Hanya untuk Penggunaan Internal:**
Sertifikat TrustLab bersifat pribadi. Jika Anda mengirim email bertanda tangan ke **Penerima Eksternal** (misal: Gmail, Yahoo), mereka akan melihat peringatan "Tanda Tangan Tidak Dipercaya/Tidak Valid" karena mereka tidak mempercayai Root CA TrustLab.
**Gunakan ini hanya untuk komunikasi internal perusahaan.**
</Callout>
## Panduan Pengaturan
## Konfigurasi Microsoft Outlook
<Tabs items={['Outlook Klasik (Desktop)', 'Outlook Baru (Web Style)']}>
<Tabs.Tab>
**Versi yang Didukung:** Outlook 365, 2019, 2016.
<Steps>
### 1. Buka Trust Center
Buka **File > Options > Trust Center > Trust Center Settings**.
### 2. Email Security
Pilih **Email Security** dari sidebar kiri.
### 3. Impor Sertifikat
Di bawah *Encrypted Email*, klik **Settings...**
* **Signing Certificate**: Klik 'Choose' dan pilih sertifikat TrustLab Anda.
* **Encryption Certificate**: Sama seperti di atas.
### 4. Simpan
Klik **OK** untuk menerapkan.
</Steps>
</Tabs.Tab>
<Tabs.Tab>
**Versi yang Didukung:** Outlook baru untuk Windows, OWA.
*Catatan: Memerlukan ekstensi S/MIME Control.*
<Steps>
### 1. Buka Pengaturan
Klik **Ikon Roda Gigi** (Settings) di pojok kanan atas.
### 2. Menu S/MIME
Navigasi ke **Mail > S/MIME**.
### 3. Aktifkan
Aktifkan **"Encrypt with S/MIME"** dan pilih sertifikat Anda.
</Steps>
</Tabs.Tab>
</Tabs>
## Konfigurasi Thunderbird
**Persyaratan Versi:** v115+ (Supernova) atau yang lebih baru.
<Steps>
### 1. Pengaturan Akun
Klik tombol **Menu (≡)** dan pilih **Account Settings**.
### 2. Enkripsi End-to-End
Pilih akun email Anda dari sidebar dan klik **End-to-End Encryption**.
### 3. Impor Sertifikat
Di bagian **S/MIME**, klik **Add** (atau Manager) untuk mengimpor file `.p12` Anda.
### 4. Terapkan Sertifikat
Di bawah *Select Certificate*, pilih file yang diimpor untuk keduanya:
* **Digital Signing**
* **Encryption**
</Steps>
## Cara Mengetes
Kirim email ke rekan kerja yang juga telah menginstal Root CA. Mereka seharusnya melihat ikon **Pita/Badge** terverifikasi yang menunjukkan bahwa email tersebut dipercaya dan tidak dimodifikasi.

View File

@@ -1,78 +0,0 @@
import { Tabs, Callout } from 'nextra/components'
import { Server, Globe, Shield } from 'lucide-react'
# Konfigurasi Web Server
Untuk mengaktifkan HTTPS pada layanan internal Anda, Anda perlu mengonfigurasi web server agar menggunakan sertifikat yang diterbitkan oleh TrustLab.
<Callout type="info" emoji={<Shield className="w-5 h-5" />}>
**Prasyarat:** Pastikan Anda telah mengunduh **PEM Bundle** (untuk Linux) atau **PFX** (untuk Windows) seperti yang dijelaskan dalam [Panduan Unduh](/id/guide/certificates/download-install).
</Callout>
## Contoh Konfigurasi
Pilih lingkungan web server Anda di bawah ini:
<Tabs items={['Nginx', 'Apache (httpd)', 'IIS (Windows)']}>
<Tabs.Tab>
### Pengaturan Nginx
File Target: `/etc/nginx/sites-available/default` atau `internal.app.conf`
```nginx
server {
listen 80;
server_name internal.app;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name internal.app;
# SSL Configuration
ssl_certificate /etc/ssl/trustlab/internal.app.crt;
ssl_certificate_key /etc/ssl/trustlab/internal.app.key;
# Recommended Security
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}
```
</Tabs.Tab>
<Tabs.Tab>
### Pengaturan Apache / HTTPD
File Target: `/etc/httpd/conf.d/ssl.conf` atau file VHost.
```apache
<VirtualHost *:443>
ServerName internal.app
DocumentRoot /var/www/html/internal
SSLEngine on
SSLCertificateFile "/path/to/internal.app.crt"
SSLCertificateKeyFile "/path/to/internal.app.key"
# Best Practice
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
</VirtualHost>
```
5. Pergi ke **Sites**, pilih situs Anda, dan klik **Bindings...**.
6. Tambahkan binding `https` dan pilih sertifikat TrustLab yang baru diimpor.
</Tabs.Tab>
</Tabs>
---
## Verifikasi Konfigurasi
Gunakan perintah `curl` dari terminal untuk memastikan sertifikat terdeteksi dengan benar:
```bash
curl -vI https://internal.yourcompany.local
```
Perhatikan baris `server certificate verification OK`. Jika muncul error, pastikan Anda telah menginstal Root CA di perangkat yang menjalankan perintah tersebut.
> [!NOTE]
> Sangat disarankan untuk selalu menggunakan file **BUNDLE/COMBINED** (Sertifikat + Intermediate) untuk menghindari masalah rantai sertifikat (Chain Error) di beberapa browser mobile.

View File

@@ -1,4 +0,0 @@
{
"browser-errors": "Kesalahan Umum Browser",
"developer-tools": "Masalah CLI & Bahasa"
}

View File

@@ -1,43 +0,0 @@
import { Callout, Cards, Card } from 'nextra/components'
import { AlertTriangle, Globe, Calendar, XCircle, HelpCircle } from 'lucide-react'
# Kesalahan Browser Umum
Saat menggunakan sertifikat internal, browser sangatlah ketat. Berikut adalah kode kesalahan yang paling umum dan cara mengatasinya.
### `NET::ERR_CERT_AUTHORITY_INVALID`
<Callout type="error" emoji={<AlertTriangle className="w-5 h-5" />}>
**Logikanya:** Browser sama sekali **tidak mengenal** "TrustLab Root CA" yang menandatangani sertifikat situs web Anda, sehingga ia menganggapnya palsu.
</Callout>
**Solusi:**
Anda belum menginstal Root CA di perangkat Anda.
* [**Panduan Instalasi Root CA**](/id/guide/getting-started/install-root-ca)
---
### `NET::ERR_CERT_COMMON_NAME_INVALID`
<Callout type="warning" emoji={<Globe className="w-5 h-5" />}>
**Logikanya:** Anda mengunjungi `app.local`, tetapi sertifikat hanya diterbitkan untuk `api.local`. Namanya **tidak cocok**.
</Callout>
**Solusi:**
Domain tersebut tidak ada dalam **SANs (Subject Alternative Names)** sertifikat.
1. Klik ikon **"Not Secure"** > **Certificate**.
2. Periksa bidang **DNS Name** atau SAN.
3. Jika tidak ada, Anda harus **[Menerbitkan Sertifikat Baru](/id/guide/certificates/request-new)** yang menyertakan domain yang benar.
---
### `NET::ERR_CERT_DATE_INVALID`
<Callout type="info" emoji={<Calendar className="w-5 h-5" />}>
**Logikanya:** Sertifikat telah kedaluwarsa, ATAU jam komputer Anda diatur ke tanggal yang salah (lampau/masa depan).
</Callout>
**Solusi:**
1. Periksa jam sistem Anda terlebih dahulu.
2. Jika jam sudah benar, berarti sertifikat benar-benar kedaluwarsa.
3. **[Perbarui Sertifikat](/id/guide/certificates/renewal)** segera.

View File

@@ -1,97 +0,0 @@
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>

View File

@@ -11,10 +11,7 @@ const config: DocsThemeConfig = {
</div>
),
logoLink: '/',
i18n: [
{ locale: 'en', text: 'English' },
{ locale: 'id', text: 'Bahasa Indonesia' }
],
project: {
link: 'https://github.com/dyzulk/trustlab-docs',
},