Create HTTPS for VS Code Server¶
Overview¶
code-server memungkinkan Visual Studio Code dijalankan melalui browser.
Secara default, code-server dapat berjalan menggunakan HTTP.
Untuk environment yang membutuhkan HTTPS dan Secure Context, code-server dapat dikonfigurasi menggunakan SSL/TLS Certificate.
Dokumen ini menggunakan certificate yang dibuat menggunakan OpenSSL Private Certificate Authority (CA).
Certificate dibuat menggunakan prosedur:
Architecture¶
Internal Root CA
β
β Signs
βΌ
Server Certificate
β
βΌ
code-server
β
β HTTPS
βΌ
Browser
β
βΌ
VS Code Web
Prerequisites¶
Pastikan software berikut tersedia:
| Software | Purpose |
|---|---|
| code-server | Menjalankan VS Code melalui browser |
| OpenSSL | Membuat dan memverifikasi certificate |
| systemd | Mengelola code-server service |
Verify code-server¶
Periksa versi code-server:
Contoh:
Verify OpenSSL¶
Pastikan OpenSSL tersedia:
Contoh:
SSL/TLS Certificate¶
Certificate Files¶
Dokumen ini menggunakan Server Certificate yang telah dibuat menggunakan OpenSSL.
Contoh struktur:
~/ssl/
βββ ca/
β βββ ca.key
β βββ ca.crt
β βββ ca.srl
β
βββ server/
βββ server.key
βββ server.csr
βββ server.crt
βββ server.ext
Certificate yang digunakan oleh code-server:
Private Key:
Certificate Authority:
Verify Server Certificate¶
Sebelum digunakan oleh code-server, verify certificate:
openssl x509 \
-in ~/ssl/server/server.crt \
-noout \
-subject \
-issuer \
-dates \
-ext subjectAltName
Contoh:
subject=C = ID, O = Internal, CN = edkas-pc1
issuer=C = ID, O = Internal CA, CN = Internal Root CA
X509v3 Subject Alternative Name:
DNS:edkas-pc1
DNS:localhost
IP Address:127.0.0.1
Verify Certificate Chain¶
Verify certificate menggunakan CA:
Expected:
Verify Private Key¶
Pastikan Private Key tersedia:
Protect Private Key:
Verify:
Expected:
code-server Configuration¶
Configuration Directory¶
Default configuration code-server berada pada:
Periksa:
Configuration File¶
File configuration:
Periksa:
Example HTTP Configuration¶
Sebelum menggunakan HTTPS, konfigurasi dapat berupa:
Backup Configuration¶
Sebelum melakukan perubahan configuration, buat backup terlebih dahulu.
Create Backup Directory¶
Backup Configuration¶
Tampilkan lokasi backup:
Contoh:
Verify Backup¶
Tidak adanya output menunjukkan bahwa file current dan backup identik.
Configure HTTPS¶
Update Configuration¶
Ubah:
menjadi path certificate:
Kemudian tambahkan:
HTTPS Configuration¶
Contoh konfigurasi lengkap:
bind-addr: 0.0.0.0:8787
auth: password
password: <password>
cert: /home/<username>/ssl/server/server.crt
cert-key: /home/<username>/ssl/server/server.key
Contoh menggunakan user eddywiyatno:
bind-addr: 0.0.0.0:8787
auth: password
password: <password>
cert: /home/eddywiyatno/ssl/server/server.crt
cert-key: /home/eddywiyatno/ssl/server/server.key
Configuration Parameters¶
| Parameter | Description |
|---|---|
bind-addr |
Address dan port code-server |
auth |
Authentication method |
password |
Password authentication |
cert |
Path SSL/TLS Certificate |
cert-key |
Path SSL/TLS Private Key |
Verify Configuration¶
Pastikan konfigurasi HTTPS terdapat:
code-server Service¶
Check Service¶
code-server dapat dijalankan menggunakan systemd template service.
Periksa:
Contoh:
Restart code-server¶
Restart service:
Verify Service Status¶
Expected:
Verify HTTPS¶
Verify Listening Port¶
Periksa port code-server:
Expected:
Verify TLS Certificate¶
Periksa certificate yang benar-benar disajikan oleh code-server:
openssl s_client \
-connect edkas-pc1:8787 \
-servername edkas-pc1 \
</dev/null 2>/dev/null |
openssl x509 \
-noout \
-subject \
-issuer \
-dates \
-ext subjectAltName
Pastikan certificate yang ditampilkan sesuai dengan:
Verify Certificate Chain¶
Gunakan CA untuk melakukan verification:
openssl s_client \
-connect edkas-pc1:8787 \
-servername edkas-pc1 \
-CAfile ~/ssl/ca/ca.crt \
</dev/null
Cari bagian:
Access VS Code Server¶
Buka browser menggunakan:
Kemudian login menggunakan authentication yang telah dikonfigurasi:
Certificate Trust¶
Browser harus mempercayai Certificate Authority yang menerbitkan Server Certificate.
Dalam konfigurasi ini:
Server menggunakan:
Client hanya perlu mempercayai:
Certificate Trust Architecture¶
Internal Root CA
β
β Trust
βΌ
Client
β
β HTTPS
βΌ
code-server
β
βββββββ΄ββββββ
β β
server.crt server.key
Client Certificate Trust¶
Apabila code-server diakses dari perangkat lain seperti:
- Laptop
- Desktop
- Tablet
- Mobile Device
maka perangkat tersebut harus mempercayai:
Jangan memindahkan:
ke client.
VS Code Webview¶
VS Code Server menggunakan Webview untuk beberapa fitur dan extension.
Webview membutuhkan browser environment yang mendukung Secure Context.
HTTP:
HTTPS:
Codex Extension¶
Extension seperti OpenAI Codex menggunakan Webview untuk menyediakan interface pada VS Code.
Architecture:
Browser
β
β HTTPS
βΌ
code-server
β
βΌ
VS Code Webview
β
βΌ
Codex Extension
β
βΌ
Codex App Server
Webview Service Worker¶
VS Code Webview menggunakan Service Worker untuk beberapa fungsi internal.
Browser akan melakukan validasi certificate ketika resource Webview diakses.
Browser
β
βΌ
VS Code Webview
β
βΌ
Service Worker
β
βΌ
TLS Certificate Validation
β
βββ Trusted
β β
β βΌ
β Webview Loaded
β
βββ Not Trusted
β
βΌ
Webview Failed
Troubleshooting¶
Error Loading Webview¶
Salah satu error yang dapat muncul:
Contoh error:
atau:
Certificate Not Trusted¶
Periksa certificate yang disajikan:
openssl s_client \
-connect edkas-pc1:8787 \
-servername edkas-pc1 \
</dev/null 2>/dev/null |
openssl x509 \
-noout \
-subject \
-issuer \
-dates \
-ext subjectAltName
Pastikan:
- Certificate masih valid.
- Hostname terdapat pada SAN.
- Certificate diterbitkan oleh CA yang benar.
- Client mempercayai
ca.crt.
Hostname Does Not Match¶
Jika code-server diakses:
maka certificate harus memiliki:
Periksa:
Expected:
Certificate Expired¶
Periksa validity:
Jika notAfter telah melewati waktu saat ini, certificate harus diperbarui.
Wrong Certificate Served¶
Periksa certificate pada filesystem:
Kemudian periksa certificate yang disajikan code-server:
openssl s_client \
-connect edkas-pc1:8787 \
-servername edkas-pc1 \
</dev/null 2>/dev/null |
openssl x509 \
-noout \
-subject \
-issuer \
-dates
Kedua output harus sesuai.
Verify HTTPS with curl¶
Test HTTPS:
Jika CA belum tersedia pada system trust store:
Untuk troubleshooting saja, certificate verification dapat dilewati menggunakan:
-khanya digunakan untuk troubleshooting. Jangan digunakan sebagai konfigurasi normal.
Verify TLS Connection¶
Gunakan:
Perintah tersebut menampilkan:
- TLS handshake
- Certificate
- Certificate chain
- Cipher
- Verification result
Keluar dari session:
Verify Port¶
Periksa code-server:
Expected:
HTTPS Architecture¶
Internal Root CA
β
β Sign
βΌ
server.crt
β
β
server.key
β
βΌ
ββββββββββββββββ HTTPS ββββββββββββββββββββ
β Client β ββββββββββββββββββββββΊ β code-server β
β β β β
β Browser β β VS Code Server β
β Tablet β β Port 8787 β
ββββββββββββββββ ββββββββββ¬ββββββββββ
β
βΌ
VS Code Webview
β
βΌ
VS Code Extension
β
βΌ
Codex
Backup and Recovery¶
Setiap perubahan configuration harus didahului backup.
Backup¶
BACKUP_DIR="$HOME/backup/code-server/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp -a \
"$HOME/.config/code-server/config.yaml" \
"$BACKUP_DIR/config.yaml"
echo "Backup: $BACKUP_DIR"
Restore Configuration¶
Apabila konfigurasi HTTPS menyebabkan masalah:
Restart:
Verify:
Verification Checklist¶
| Check | Expected Result |
|---|---|
| code-server installed | β |
| OpenSSL installed | β |
| CA available | β |
| Server Certificate available | β |
| Server Private Key available | β |
| Certificate SAN correct | β |
| Certificate chain valid | β |
| Private Key protected | β |
| Configuration backed up | β |
config.yaml configured |
β |
| code-server restarted | β |
Port 8787 listening |
β |
| HTTPS accessible | β |
| CA trusted by client | β |
| VS Code Webview working | β |
| VS Code Extensions working | β |
| Codex Webview working | β |
Final Configuration¶
Example:
bind-addr: 0.0.0.0:8787
auth: password
password: <password>
cert: /home/<username>/ssl/server/server.crt
cert-key: /home/<username>/ssl/server/server.key
Access:
Final Architecture¶
Internal Root CA
β
β
βΌ
server.crt
β
β
server.key
β
βΌ
code-server
β
β HTTPS
βΌ
Browser
β
βΌ
VS Code Webview
β
βΌ
Codex Extension
β
βΌ
Codex
Summary¶
Create Internal CA
β
βΌ
Create Server Private Key
β
βΌ
Create SAN Configuration
β
βΌ
Create CSR
β
βΌ
Sign CSR with CA
β
βΌ
Create Server Certificate
β
βΌ
Verify Certificate
β
βΌ
Backup code-server Configuration
β
βΌ
Configure HTTPS
β
βΌ
Restart code-server
β
βΌ
Verify HTTPS
β
βΌ
Trust CA on Client
β
βΌ
VS Code Webview
β
βΌ
VS Code Extensions
β
βΌ
Codex