Panduan Lengkap Integrasi Tanda Tangan Elektronik Tersertifikasi BSrE
N
Kembali ke Blog

Panduan Lengkap Integrasi Tanda Tangan Elektronik Tersertifikasi BSrE

Regulasi & Compliance
Nugroho Setiawan 22 May 2026 10 min baca 2,139 kata 73 views
Pelajari langkah demi langkah integrasi tanda tangan elektronik tersertifikasi BSrE ke dalam sistem Anda. Artikel ini membahas konsep, persiapan teknis, implementasi kode, penanganan error, dan best practices untuk memastikan kepatuhan dan efisiensi operasional.

Dalam era digital yang serba cepat ini, efisiensi dan keamanan operasional menjadi prioritas utama bagi setiap organisasi, terutama di sektor kesehatan seperti Rumah Sakit dan Klinik. Proses penandatanganan dokumen secara manual tidak hanya memakan waktu dan sumber daya, tetapi juga rentan terhadap risiko pemalsuan dan kehilangan dokumen fisik. Bayangkan tumpukan rekam medis, surat perintah kerja, atau persetujuan pasien yang harus ditandatangani satu per satu, memperlambat alur kerja vital. Di sinilah kebutuhan akan tanda tangan elektronik tersertifikasi menjadi sangat krusial. Regulasi seperti Undang-Undang Informasi dan Transaksi Elektronik (UU ITE) No. 11 Tahun 2008 jo. UU No. 19 Tahun 2016 serta Peraturan Pemerintah (PP) No. 71 Tahun 2019 tentang Penyelenggaraan Sistem dan Transaksi Elektronik, secara tegas mengakui legalitas tanda tangan elektronik, asalkan memenuhi standar keamanan dan keandalan tertentu. Balai Sertifikasi Elektronik (BSrE) dari Badan Siber dan Sandi Negara (BSSN) hadir sebagai otoritas sertifikasi yang memastikan standar tersebut terpenuhi, memberikan validitas hukum yang setara dengan tanda tangan basah. Artikel ini akan memandu Anda secara mendalam, mulai dari konsep dasar hingga implementasi teknis integrasi tanda tangan elektronik tersertifikasi BSrE ke dalam sistem informasi Anda, seperti SIMRS, SIM Klinik, atau E-Office, dengan contoh kode yang konkret dan best practices yang actionable.

Konsep Dasar Tanda Tangan Elektronik Tersertifikasi BSrE dan Validitas Hukumnya

Tanda tangan elektronik tersertifikasi yang dikeluarkan oleh BSrE adalah sebuah mekanisme digital untuk memastikan keaslian, integritas, dan non-repudiasi dari suatu dokumen elektronik. Berbeda dengan tanda tangan elektronik biasa yang mungkin hanya berupa gambar atau PIN sederhana, tanda tangan tersertifikasi menggunakan infrastruktur kunci publik (Public Key Infrastructure – PKI) yang kompleks dan dikeluarkan oleh Penyelenggara Sertifikasi Elektronik (PSrE) yang diakui, dalam hal ini BSrE. Menurut PP No. 71 Tahun 2019 Pasal 59, tanda tangan elektronik tersertifikasi memiliki kekuatan hukum dan akibat hukum yang sah sepanjang memenuhi persyaratan yang ditetapkan, yaitu dibuat menggunakan sertifikat elektronik, dibuat menggunakan perangkat pembuat tanda tangan elektronik tersertifikasi, dan dikelola oleh PSrE. Ini berarti setiap dokumen yang ditandatangani secara elektronik dengan sertifikat dari BSrE memiliki pembuktian yang kuat di mata hukum, sangat penting untuk dokumen legal seperti rekam medis elektronik, kontrak pengadaan, atau surat keputusan internal.

Proses kerjanya melibatkan beberapa komponen kunci. Pertama, dokumen yang akan ditandatangani akan diubah menjadi representasi digital unik yang disebut 'hash' menggunakan algoritma kriptografi seperti SHA-256. Hash ini adalah sidik jari digital dokumen; perubahan sekecil apa pun pada dokumen akan menghasilkan hash yang berbeda. Kedua, hash dokumen tersebut kemudian dienkripsi menggunakan kunci privat (private key) milik penandatangan, yang tersimpan aman dalam perangkat keras atau sistem yang dikelola BSrE. Hasil enkripsi inilah yang menjadi tanda tangan elektronik. Bersamaan dengan tanda tangan, disertakan juga sertifikat elektronik penandatangan yang berisi kunci publik (public key) dan informasi identitas penandatangan, yang telah diverifikasi oleh BSrE. Sertifikat ini berfungsi sebagai KTP digital yang tak dapat dipalsukan. Ketika dokumen dengan tanda tangan elektronik diverifikasi, kunci publik dari sertifikat akan digunakan untuk mendekripsi tanda tangan dan membandingkan hash yang dihasilkan dengan hash dokumen saat ini. Jika cocok, integritas dokumen dan identitas penandatangan terjamin. BSrE juga menyediakan layanan timestamping untuk memastikan kapan tepatnya dokumen tersebut ditandatangani, menambah lapisan bukti yang tak terbantahkan.

Penerapan tanda tangan elektronik tersertifikasi BSrE sangat relevan di berbagai sektor. Dalam konteks SIMRS atau SIM Klinik, ini memungkinkan dokter untuk menandatangani rekam medis elektronik, persetujuan tindakan medis, atau resep digital dengan kekuatan hukum penuh. Manajer operasional dapat menandatangani surat keputusan, laporan keuangan, atau kontrak pengadaan barang dan jasa tanpa perlu mencetak dan memindai. Bahkan untuk sistem E-Office, tanda tangan elektronik BSrE memungkinkan otorisasi dokumen internal seperti surat edaran, memo, atau laporan proyek secara efisien dan aman. Kepatuhan terhadap regulasi seperti Permenkes No. 24 Tahun 2022 tentang Rekam Medis yang mewajibkan penggunaan tanda tangan elektronik untuk rekam medis elektronik menjadi sangat mudah dicapai dengan integrasi BSrE. Dengan demikian, investasi dalam integrasi BSrE bukan hanya tentang efisiensi, tetapi juga tentang legalitas, keamanan, dan modernisasi tata kelola dokumen digital.

Persiapan Teknis dan Arsitektur Integrasi Sistem dengan BSrE

Sebelum memulai implementasi kode, ada beberapa persiapan teknis krusial yang harus dilakukan untuk memastikan integrasi yang mulus dengan layanan BSrE. Pertama, Anda harus memiliki akun dan kredensial akses API dari BSrE. Proses pendaftaran biasanya melibatkan verifikasi identitas individu atau organisasi, yang dapat dilakukan melalui portal resmi BSrE. Setelah terdaftar dan diverifikasi, Anda akan mendapatkan API Key atau token akses yang unik serta informasi endpoint API yang akan digunakan untuk berinteraksi dengan layanan BSrE. Pastikan untuk menyimpan kredensial ini dengan aman, idealnya di environment variables atau Key Management System (KMS), bukan hardcode dalam kode sumber.

Untuk lingkungan pengembangan, artikel ini akan berfokus pada ekosistem Node.js (direkomendasikan versi 20 LTS atau lebih baru) karena popularitasnya dalam pengembangan backend dan ketersediaan pustaka yang kaya. Namun, konsep yang sama dapat diterapkan pada platform lain seperti Python (v3.10+) dengan Flask/Django atau PHP (v8.2+) dengan Laravel/Symfony. Sebagai database, PostgreSQL (versi 16 atau lebih baru) adalah pilihan yang sangat baik untuk menyimpan metadata dokumen, status tanda tangan, dan log transaksi, berkat keandalannya dan dukungan JSONB yang kuat. Untuk web framework, Express.js (v4.x) akan digunakan untuk membangun API backend yang akan berkomunikasi dengan BSrE. Pustaka HTTP client seperti axios (v1.x) akan menjadi alat utama untuk melakukan panggilan API ke endpoint BSrE.

Arsitektur integrasi yang umum melibatkan backend service Anda sebagai perantara antara aplikasi frontend (misalnya, UI SIMRS atau E-Office) dan layanan BSrE. Ketika pengguna ingin menandatangani dokumen, frontend akan mengirimkan permintaan ke backend Anda. Backend kemudian akan melakukan beberapa langkah: (1) Menerima dokumen (atau ID dokumen) dari frontend. (2) Menghasilkan hash kriptografi dari dokumen tersebut. (3) Memanggil API BSrE dengan hash dokumen dan identitas penandatangan. (4) Menerima tanda tangan elektronik (biasanya berupa hash yang ditandatangani atau token) dari BSrE. (5) Menyimpan informasi tanda tangan dan status ke database Anda, lalu mengembalikan respons ke frontend. Untuk dokumen PDF, pustaka seperti pdf-lib (v1.x) untuk Node.js atau PyPDF2 (v3.x) untuk Python dapat digunakan untuk membaca, memanipulasi, dan menyematkan tanda tangan ke dalam dokumen PDF secara langsung setelah mendapatkan respons dari BSrE. Penting untuk dicatat bahwa BSrE biasanya hanya memproses hash, bukan dokumen utuh, untuk menjaga privasi dan efisiensi. Oleh karena itu, kemampuan aplikasi Anda untuk menghasilkan hash dokumen secara konsisten dan aman adalah kunci.

Struktur data dalam PostgreSQL untuk menyimpan informasi terkait tanda tangan dapat mencakup tabel `documents` dengan kolom seperti `id`, `filename`, `original_hash`, `signed_hash`, `status` (e.g., 'PENDING', 'SIGNED', 'FAILED'), `signed_by_user_id`, `signed_at`, dan `bse_transaction_id`. Tabel `users` juga perlu memiliki kolom yang mengidentifikasi pengguna BSrE, seperti `bse_user_id` atau `nik` yang terdaftar di BSrE. Dengan persiapan dan arsitektur yang matang, proses integrasi akan menjadi lebih terstruktur dan mengurangi potensi masalah di kemudian hari.

Implementasi Kode: Menghasilkan Hash dan Memanggil API BSrE

Bagian ini akan menyajikan contoh kode konkret menggunakan Node.js (v20 LTS) dengan Express.js (v4.x) dan axios (v1.x) untuk berinteraksi dengan BSrE. Asumsikan Anda memiliki file PDF yang perlu ditandatangani. Pertama, kita perlu menghasilkan hash dari dokumen tersebut. Hash ini akan menjadi 'sidik jari' digital dokumen yang akan kita kirimkan ke BSrE.

// app.js atau signatureService.js
const express = require('express');
const axios = require('axios');
const crypto = require('crypto');
const fs = require('fs/promises');
const path = require('path');

const app = express();
app.use(express.json());

// Konfigurasi dari environment variables
const BSE_API_BASE_URL = process.env.BSE_API_BASE_URL || 'https://api.bsre.go.id';
const BSE_API_KEY = process.env.BSE_API_KEY || 'YOUR_BSE_API_KEY'; // Ganti dengan API Key Anda
const SIGNER_BSRE_ID = process.env.SIGNER_BSRE_ID || '1234567890123456'; // ID pengguna BSrE/NIK

// Fungsi untuk menghasilkan SHA256 hash dari file
async function generateFileHash(filePath) {
try {
const fileBuffer = await fs.readFile(filePath);
const hashSum = crypto.createHash('sha256');
hashSum.update(fileBuffer);
return hashSum.digest('hex');
} catch (error) {
console.error('Error generating file hash:', error);
throw new Error('Failed to generate file hash.');
}
}

// Endpoint untuk membuat hash dokumen (contoh)
app.post('/api/document/hash', async (req, res) => {
const { documentPath } = req.body; // Asumsikan path file ada di server
if (!documentPath) {
return res.status(400).json({ message: 'documentPath is required.' });
}

const absolutePath = path.join(__dirname, 'uploads', documentPath); // Sesuaikan path

try {
const hash = await generateFileHash(absolutePath);
res.json({ hash });
} catch (error) {
res.status(500).json({ message: error.message });
}
});

Kode di atas menunjukkan cara membuat server Express sederhana untuk menerima permintaan dan menghasilkan hash SHA256 dari sebuah file yang ada di server. Fungsi generateFileHash membaca file secara asinkron dan menggunakan modul crypto bawaan Node.js untuk menghitung hash. Ini adalah langkah pertama yang esensial sebelum mengirim data ke BSrE. Pastikan path file yang Anda berikan valid dan server memiliki izin untuk membaca file tersebut. Hash yang dihasilkan akan menjadi representasi unik dari dokumen Anda. Selanjutnya, kita akan menggunakan hash ini untuk memanggil API penandatanganan BSrE.

// Lanjutan dari app.js atau signatureService.js

// Endpoint untuk memanggil API penandatanganan BSrE
app.post('/api/document/sign', async (req, res) => {
const { documentHash, userId } = req.body; // userId bisa NIK atau ID pengguna BSrE

if (!documentHash || !userId) {
return res.status(400).json({ message: 'documentHash and userId are required.' });
}

try {
const bseResponse = await axios.post(`${BSE_API_BASE_URL}/api/v1/signature/sign-document`, {
hash: documentHash,
signerId: userId, // ID pengguna BSrE atau NIK yang terdaftar
// ... parameter lain sesuai dokumentasi BSrE (misal: reason, location)
}, {
headers: {
'Content-Type': 'application/json',
'X-Api-Key': BSE_API_KEY, // Menggunakan API Key untuk otentikasi
},
});

// Proses respons dari BSrE
if (bseResponse.data && bseResponse.data.status === 'success') {
// Simpan bseResponse.data.signature atau bseResponse.data.signedHash ke database Anda
// Update status dokumen di database
res.json({
message: 'Document signed successfully.',
signatureData: bseResponse.data,
});
} else {
// Tangani kasus ketika BSrE mengembalikan status non-sukses
res.status(400).json({
message: 'BSrE signing failed.',
bseError: bseResponse.data,
});
}
} catch (error) {
console.error('Error calling BSrE API:', error.response ? error.response.data : error.message);
res.status(500).json({
message: 'Failed to sign document via BSrE.',
error: error.response ? error.response.data : error.message,
});
}
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});

Kode ini menunjukkan bagaimana memanggil API penandatanganan BSrE. Fungsi ini menerima documentHash yang telah dihasilkan sebelumnya dan userId (yang harus sesuai dengan ID penandatangan yang terdaftar di BSrE). Permintaan HTTP POST dibuat ke endpoint yang relevan di BSrE, dengan X-Api-Key di header untuk otentikasi. Payload permintaan mencakup hash dokumen dan ID penandatangan. Setelah mendapatkan respons dari BSrE, Anda harus memeriksa statusnya. Jika sukses, data tanda tangan (misalnya, signatureData atau signedHash) akan dikembalikan, yang kemudian dapat Anda simpan di database dan/atau sematkan ke dalam dokumen asli. Penting untuk mengelola potensi kesalahan, baik dari sisi BSrE maupun masalah jaringan, dengan penanganan try-catch yang komprehensif. Pastikan untuk mengganti placeholder YOUR_BSE_API_KEY dan SIGNER_BSRE_ID dengan kredensial Anda yang sebenarnya.

Penanganan Respon, Error, dan Contoh Payload API BSrE

Interaksi dengan API eksternal seperti BSrE memerlukan penanganan respons yang cermat, terutama dalam skenario sukses dan gagal. Memahami struktur payload yang dikirim dan diterima sangat penting untuk debugging dan membangun alur kerja yang robust. Berikut adalah contoh payload yang mungkin Anda kirim ke API penandatanganan BSrE dan respons yang diharapkan.

Contoh Payload Permintaan ke BSrE (JSON)

Ketika Anda mengirimkan permintaan penandatanganan ke BSrE, payload JSON akan berisi informasi kunci seperti hash dokumen dan identitas penandatangan. Struktur ini dapat bervariasi sedikit tergantung pada versi API BSrE yang Anda gunakan, jadi selalu merujuk pada dokumentasi resmi terbaru.

POST /api/v1/signature/sign-document HTTP/1.1
Host: api.bsre.go.id
Content-Type: application/json
X-Api-Key: YOUR_BSE_API_KEY

{
"hash": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2",
"signerId": "1234567890123456",
"documentType": "PDF",
"reason": "Persetujuan Medis",
"location": "Jakarta",
"timestamp": true
}

Dalam contoh di atas, hash adalah SHA256 dari dokumen, signerId adalah NIK atau ID unik pengguna yang terdaftar di BSrE, documentType menunjukkan jenis dokumen, dan parameter lain seperti reason, location, dan timestamp memberikan konteks tambahan pada tanda tangan. BSrE akan menggunakan informasi ini bersama dengan kunci privat penandatangan untuk menghasilkan tanda tangan elektronik.

Contoh Respon Sukses dari BSrE (JSON)

Jika proses penandatanganan berhasil, BSrE akan mengembalikan respons yang menunjukkan status sukses beserta data tanda tangan yang relevan. Data ini mungkin termasuk hash yang telah ditandatangani, sertifikat yang digunakan, dan informasi timestamp.

HTTP/1.1 200 OK
Content-Type: application/json

{
"status": "success",
"code": 200,
"message": "Document signed successfully.",
"data": {
"signedHash": "e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2",
"certificateId": "CERT-XYZ-12345",
"timestamp": "2023-10-27T10:30:00Z",
"transactionId": "BSE-TXN-987654321"
}
}

Respons sukses ini berisi signedHash yang merupakan hasil dari proses penandatanganan, certificateId yang mengacu pada sertifikat yang digunakan, timestamp kapan tanda tangan dibuat, dan transactionId untuk referensi di sistem BSrE. Anda harus menyimpan informasi ini ke database Anda sebagai bukti penandatanganan yang sah.

Contoh Pesan Error dan Cara Penanganannya

Tidak semua permintaan akan berakhir dengan sukses. Penting untuk mengantisipasi dan menangani berbagai jenis kesalahan. Berikut adalah contoh pesan error yang mungkin Anda temui dan strategi penanganannya:

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
"status": "error",
"code": 401,
"message": "Unauthorized: Invalid API Key or missing credentials.",
"details": "Please ensure your X-Api-Key header is correct and valid."
Terakhir diperbarui 22 May 2026

Komentar

Komentar ditinjau sebelum tampil.

Belum ada komentar. Jadilah yang pertama!