Skip to content
Project DevOps

Aurograf

By Romi Fadli, S.Kom. 10 min read v2 Security & Secrets
On this page
A purple root circle linked to a blue and an orange intermediate circle, which lead to a signed document with a green seal and to a clock.

Aurograf adalah platform tanda tangan digital Pemerintah Kota Tangerang Selatan. ASN menandatangani dokumen PDF langsung dari browser memakai sertifikat yang diterbitkan certificate authority milik platform itu sendiri, setiap tanda tangan membawa stempel waktu tepercaya, dan siapa pun bisa memverifikasi dokumen bertanda tangan tanpa akun. Platform ini berjalan di aurograf.tangerangselatankota.go.id.

Versi 2 dibangun ulang dari nol. Saya merancangnya sebagai solution architect dan memimpin tim yang membangun serta menjalankannya, dan intinya saya tulis sendiri: root certificate authority dan PDF signer yang menjadi jantung setiap tanda tangan.

Sekilas

KlienDiskominfo Kota Tangerang Selatan (Dinas Komunikasi dan Informatika)
PeranSolution architect yang memimpin tim — quality assurance, backend developer, UI developer, DevOps, dan DevSecOps — sekaligus backend developer utama yang mengerjakan sendiri module intinya: certificate authority PKI (root, document signing, dan timestamp) serta PDF signer
PeriodeVersi 2 sejak 15 September 2025; versi 1 September 2022 sampai Februari 2023
Versi2
StatusStabil, berjalan di production
StackLaravel dan PHP, Vue dan TypeScript, Rust, Python; PostgreSQL, Redis, storage kompatibel S3; OpenTelemetry, Elasticsearch, dan Kibana; Docker, dengan autoscaling Kubernetes yang sedang diuji di staging
Situsaurograf.tangerangselatankota.go.id
Untuk siapa, apa peran saya, dan di mana posisinya sekarang.

Peran saya sebagai solution architect

Di Aurograf, peran pertama saya adalah solution architect. Di kota ini, domain master untuk tanda tangan digital adalah Bidang Persandian, jadi dari sanalah pekerjaannya dimulai: saya mempelajari cara kerja dan aturan yang mereka pegang, mendengarkan kebutuhan serta keluhan mereka hari ini, lalu menerjemahkannya menjadi arsitektur.

  • Memilih teknologi yang menjadi dasar platform.
  • Merancang arsitektur modular dan memecah fungsinya ke beberapa module terpisah.
  • Merancang cara ia berjalan: stack Docker Compose di production hari ini, dan arsitektur Kubernetes dengan autoscaling yang sedang diuji di staging.
  • Membagi pekerjaan ke tim: quality assurance, backend developer, UI developer, DevOps, dan DevSecOps.
  • Meninjau temuan quality assurance dan DevSecOps, lalu memasukkan perbaikannya ke arsitektur dan ke alur kerja tim.

Selain itu, saya juga bagian dari tim sebagai backend engineer, di module yang paling mahal bila salah: certificate authority PKI — root CA, document signing CA, dan timestamp authority — serta PDF signer.

Tantangannya

Pemerintah kota menandatangani dokumen dalam jumlah besar, dan tanda tangan di atas kertas tak bisa berpindah semudah PDF. Kota butuh tanda tangan elektronik yang bisa dipakai pegawainya setiap hari dari browser mana pun, dan tetap membuktikan siapa yang menandatangani dan kapan, bahkan lama sesudah sertifikat penanda tangan kedaluwarsa.

Syarat terakhir itulah yang membentuk seluruh rancangan. Tanda tangan yang hanya bisa diperiksa selama sertifikatnya masih berlaku nyaris tak bernilai untuk arsip resmi. Karena itu platform harus menanamkan bukti keabsahan ke dalam dokumen itu sendiri, lengkap dengan waktu tepercaya, dan memegang sendiri otoritas yang menjamin bukti tersebut.

Yang dikerjakannya

A. Masuk dengan akun milik kota

Pegawai masuk memakai akun SSO Tangerang Selatan — akun yang sama untuk aplikasi pemkot lainnya — atau lewat Google dan alamat email. Autentikasi dua faktor bekerja dengan aplikasi authenticator apa pun.

Dashboard Aurograf dalam mode gelap, menampilkan jumlah dokumen yang belum ditandatangani, sudah ditandatangani, dan gagal, sertifikat, stempel, dan organisasi milik user, serta status pemeriksaan identitasnya.
Dashboard tiap penanda tangan: dokumennya, sertifikat dan stempelnya, serta pemeriksaan identitas mana yang sudah tuntas.

B. Membuktikan identitas sebelum sertifikat terbit

Sebelum memegang sertifikat penanda tangan, seseorang melengkapi data identitasnya dan menjalani tantangan wajah langsung: menghadap kamera lalu menoleh, untuk menunjukkan bahwa yang hadir orang sungguhan, bukan foto. Peninjau manusia menyetujui permohonannya, dan baru sesudah itu certificate authority platform menerbitkan sertifikat X.509 yang dilindungi passphrase yang hanya diketahui penanda tangan.

Daftar tiga sertifikat penanda tangan, dua disetujui dan satu dicabut, masing-masing menampilkan pemegang, organisasi dan unitnya, nomor serial, dan sisa masa berlakunya.
Satu penanda tangan bisa memegang sertifikat di beberapa organisasi dan unit, masing-masing dengan status dan masa berlakunya sendiri.

C. Menandatangani PDF dengan tanda tangan yang tetap bisa diverifikasi

Dokumen di-upload, diberi penanda tangan dalam tahap berurutan, lalu ditandatangani satu per satu. Penanda tangan meletakkan stempel — QR code yang unik untuk tiap tanda tangan, atau tanda tangan yang digambar maupun di-upload sendiri — tepat di posisinya pada halaman. Hasilnya tanda tangan PAdES B-LTA: sertifikat, bukti pencabutan, dan stempel waktu arsip tertanam di dalam PDF, sehingga ia tetap bisa diverifikasi lama sesudah sertifikatnya kedaluwarsa.

Halaman PDF dengan stempel tanda tangan QR di bagian bawah, di samping panel yang memuat dua kelompok penanda tangan, sertifikat dan stempel yang dipilih, serta tombol Finish.
Penanda tangan meletakkan stempel di halaman, memilih sertifikat dan stempel, lalu menandatangani; tahap berikutnya menunggu gilirannya.
Animasi alur tanda tangan di Aurograf: meng-upload dokumen, menetapkan penanda tangan dalam dua tahap, memilih sertifikat dan stempel, meletakkan stempel, mengisi detail tanda tangan, lalu mengirim tanda tangan.
Seluruh alur tanda tangan, dari upload sampai tanda tangan terkirim. Data pribadi dalam rekaman disamarkan.

D. Membuka verifikasi untuk siapa saja

Halaman verifikasi publik menerima PDF bertanda tangan apa pun tanpa akun, lalu melaporkan setiap tanda tangan dan stempel waktu di dalamnya, sah atau tidaknya masing-masing, serta apakah dokumen itu memenuhi syarat PAdES, B-LTA, dan validasi jangka panjang.

Halaman publik Verify PDF Document yang menampilkan dokumen bertanda tangan di samping hasil verifikasi: validasi jangka panjang tersedia, kepatuhan PAdES, B-LTA, dan LTV, serta empat tanda tangan dan stempel waktu yang sah.
Verifikasi publik: setiap tanda tangan dan stempel waktu di dokumen, masing-masing dinilai sah, beserta standar yang dipenuhinya.

E. Melayani organisasi dan sistem lain

Organisasi memuat unit dan anggota, dan satu penanda tangan boleh menjadi anggota beberapa organisasi. Aplikasi pemerintah lain bisa mengintegrasikan tanda tangan lewat client API dengan kredensial sendiri, izin per client, dan origin yang diizinkan, lalu menerima callback saat dokumen selesai ditandatangani. Akses bagi sistem client diberikan oleh administrator platform.

Standar yang dipatuhi

StandarYang dijaminnya di siniTempatnya
X.509 v3setiap penanda tangan memegang sertifikat dari rantai kepercayaan milik platform sendiriDocument Signing CA, Root CA Publisher
PAdES B-LTAtanda tangan tetap bisa diverifikasi lama sesudah sertifikatnya kedaluwarsaPDF Signer
RFC 3161setiap tanda tangan membawa waktu tepercayaTimestamp Authority
OCSP (RFC 6960) dan CRL (RFC 5280)siapa pun bisa memeriksa apakah sertifikat sudah dicabutDocument Signing CA, Timestamp Authority, Root CA Publisher
PKCS#12key penanda tangan berpindah sebagai satu bundel yang hanya bisa dibuka passphrase miliknyaDocument Signing CA, PDF Signer
OAuth 2.0 dan OpenID Connectmasuk lewat SSO Tangerang Selatan dan GoogleCore API, Web App
JSON Web Token (RFC 7519)satu format token yang bisa diverifikasi tiap service secara mandiriCore API
TOTP (RFC 6238)autentikasi dua faktor dengan aplikasi authenticator apa punCore API, Web App
Standar yang dipatuhi Aurograf, apa yang dijamin masing-masing, dan module yang mengembannya.

Bagaimana ia dibangun

Aurograf bukan satu aplikasi. Core API memegang aturan dan data platform lalu mengatur service-service khusus, masing-masing dengan versi dan siklus rilisnya sendiri: infrastruktur kunci publik berisi tiga otoritas, signer, tantangan wajah, perender, storage file, dan data wilayah. Beberapa di antaranya module yang juga saya pakai di project lain.

User masuk lewat web app, sistem klien langsung ke core API, dan core API tersambung ke delapan service dalam tiga kelompok: infrastruktur kunci publik berisi CA penanda tangan, timestamp, dan root CA; PDF signer, face liveness, dan thumbnailer; serta storage file dan wilayah.
Satu inti, delapan service khusus dalam tiga kelompok: rantai kepercayaan, kerja dokumen dan identitas, serta data.

Core API: user, organisasi, sistem client, dokumen, stempel, dan sertifikat, plus pengaturan setiap service di bawahnya.

Aplikasi web tempat penanda tangan dan administrator bekerja.

Certificate authority penerbit yang memberi tiap penanda tangan sertifikatnya dan menjawab pemeriksaan pencabutan.

Timestamp authority di balik tanggal setiap tanda tangan.

Penerbit akar kepercayaan, yang key-nya tak pernah meninggalkan host offline.

Signer yang menghasilkan setiap tanda tangan PAdES B-LTA.

Tantangan wajah langsung yang dipakai saat verifikasi identitas.

Perender yang memberi thumbnail untuk setiap dokumen yang di-upload.

Service storage yang dilewati setiap dokumen dan stempel.

Service data wilayah di balik setiap alamat di platform.

Bagaimana ia dirilis dan dioperasikan

Platform ini berjalan di tiga environment yang terpisah penuh: development di laptop, serta staging dan production di server. Setiap stack service-nya lahir dari template saya sendiri, bukan disalin dari project terdahulu, dan setiap rilis menempuh jalur yang sama dari development ke production, digladi dulu di staging dengan data production yang dipulihkan.

Production saat ini berjalan di atas Docker Compose. Langkah berikutnya sudah dimulai: memindahkan platform ke Kubernetes dengan autoscaling, supaya service seperti penandatanganan bisa bertambah sendiri saat dokumen datang bergelombang. Cluster Kubernetes dengan horizontal pod autoscaling sedang diuji lebih dulu di staging; belum ada service production yang pindah.

Cara setiap stack baru platform ini disiapkan dari template.

Cara setiap rilis berpindah dari development ke production.

Di sekitar jalur itu ada tools yang saya tulis supaya setiap langkah bisa diulang dan aman.

Membuktikan storage dan login siap sebelum aplikasi bergantung padanya.

Membangun dan memberi versi setiap image, serta membuat salinan penuh production untuk tiap rilis.

Mempromosikan rilis yang sudah teruji ke production, dan menjaga alamat tiap environment tetap terpisah.

Mem-backup platform yang sedang berjalan, dan merotasi kredensialnya.

Memindahkan data platform dari susunan lama ke susunan baru melintasi versi mayor, dan menjaga dokumentasi operasional tetap terbaca secara offline.

Keputusan kunci

Platform memegang rantai kepercayaannya sendiri. Ketimbang bergantung pada penyedia sertifikat luar untuk setiap tanda tangan, Aurograf menjalankan root, otoritas penerbit, dan timestamp authority miliknya sendiri. Key root tinggal di host offline, dan yang diterbitkan hanya sertifikat serta daftar pencabutannya, sehingga key paling berharga di sistem ini tak pernah terjangkau dari jaringan.

Setiap tanggung jawab adalah service tersendiri. Menandatangani, memberi stempel waktu, menerbitkan sertifikat, memeriksa wajah, merender, dan menyimpan masing-masing milik service yang dibangun untuk tugas itu, dengan siklus rilisnya sendiri. Mengubah cara dokumen ditandatangani tak pernah menuntut antarmuka di-deploy ulang, dan otoritas-otoritasnya bisa di-backup, dirotasi, dan di-upgrade menurut jadwalnya sendiri.

File tak pernah melewati inti. Browser meng-upload langsung ke storage lewat link berumur pendek, dan service-service membaca serta menulis dokumen dengan cara yang sama. Inti memutuskan siapa boleh berbuat apa; ia tidak mengangkut byte-nya.

Menandatangani tak pernah membuat orang menunggu. Setiap tanda tangan berjalan sebagai background job, jadi permintaan langsung diterima dan kerja kriptografinya berlangsung di belakang. Web server dan worker antreannya dikirim dalam satu image container, sehingga keduanya selalu menjalankan code yang sama.

Orang membuktikan kehadirannya, dan orang pula yang memutuskan. Tantangan wajah memastikan bahwa orang hidup ikut serta; peninjau manusia tetap menyetujui setiap identitas sebelum sertifikat diterbitkan.

Setiap permintaan bisa dilacak dari ujung ke ujung. Satu trace mengikuti tanda tangan dari klik user, melewati inti, signer, dan otoritas-otoritasnya, lalu terkumpul di satu tempat, sehingga pertanyaan tentang dokumen apa pun bisa dijawab dari bukti.

Riwayat

Versi pertama, dibangun antara September 2022 dan Februari 2023, melayani tujuan yang sama dalam bentuk lebih sederhana: satu aplikasi monolitik. Versi 2, yang saya bangun bersama tim sejak 15 September 2025, membangun ulang setiap bagian dari nol sebagai service-service terpisah — infrastruktur kunci publik sendiri, PDF signer jangka panjang, inti Laravel, antarmuka Vue, dan module yang bisa dipakai ulang bersama pekerjaan saya yang lain.

Status

Aurograf berjalan di production dan dirawat secara aktif, dengan rilis baru yang selalu menempuh jalur teruji yang sama dari development ke production.

Istilah

Certificate authority
Service yang menerbitkan dan menjamin sertifikat digital, yang menunjukkan siapa pembuat tanda tangan.
Timestamp authority
Service yang menandatangani waktu keberadaan dokumen, sehingga tanda tangan bisa dibuktikan lebih dulu ada ketimbang perubahan atau kedaluwarsa apa pun sesudahnya.
Infrastruktur kunci publik
Himpunan certificate authority, sertifikat, dan daftar pencabutan yang bersama-sama membuat tanda tangan digital bisa diverifikasi.
PAdES B-LTA
Level arsip jangka panjang dari standar tanda tangan PDF, yang menanamkan semua yang dibutuhkan untuk memverifikasi tanda tangan bertahun-tahun kemudian.
Single sign-on
Satu akun yang membuat orang bisa masuk ke banyak aplikasi tanpa password terpisah untuk masing-masing.

Technologies covered

  • Python
  • Rust
  • Laravel
  • Vue
  • Docker
  • Kubernetes
  • OCSP
  • PAdES
  • X.509

About the author

Photo of Romi Fadli

Romi Fadli, S.Kom.

Solution Architect · Backend Engineer · Embedded Systems

In my day job I work as a solution architect. I design the system, lead the team that builds it — quality assurance, backend developers, a UI developer, DevOps and DevSecOps — and write the most critical modules myself, such as a certificate authority, a long-term PDF signer, and the core API of a personnel system.

I work across the whole stack that a running system actually needs. On the hardware side that means PCB design, microcontrollers, and embedded firmware — including RISC-V boards running FreeRTOS and Embassy, speaking MQTT over mutually authenticated TLS on a microcontroller with 64 KB of SRAM.

Most of my day-to-day work is software: Rust backends and API modules built on Clean Architecture, an OAuth2/OpenID Connect authorization server written from scratch, PAdES document signing, and certificate authorities — root CAs, timestamping authorities, and OCSP responders. I also build the frontends that sit on top of them.

Running all of that means infrastructure: Docker Compose stacks, networking, Mikrotik and RADIUS, observability with OpenTelemetry, and a steady habit of writing command-line tools and utilities for Linux when the existing ones do not fit.

Share

Enjoyed this?

Get an email when a new article is published.

Referenced by

Employees and administrators use the Web App, which talks to the Core API; the Core API uses storage, regions, face and preview services, sends documents to the Aurograf signing platform, sends logs and traces to the log stack, and imports from the old system

SIMPEG

Programming

Sistem informasi kepegawaian Pemerintah Kota Tangerang Selatan: pegawai mengurus record-nya sendiri dan mengikuti layanannya, admin bekerja tepat pada bagian organisasinya, dan setiap aturan berasal dari peraturan yang menetapkannya. Saya pimpin dan bangun sejak 2023.

10 min read Read more →

Related Articles

Three stages in a row — development, staging and production — with an image passing from development to staging, configuration promoted from staging to production, staging fed with real data restored from a production backup, and production marked done once its core function is proven

Release Workflow: Development to Production adalah prosedur yang ditempuh tiap perubahan saya dari laptop sampai production — langkah mana yang saya otomatiskan, mana yang sengaja saya serahkan ke manusia, kenapa tiap langkah berada di tempatnya, cara saya mendiagnosis rilis yang gagal, dan cara pulihnya.

9 min read Read more →