Banyak situs korporasi yang mewajibkan untuk menggunakan mTLS untuk bisa mengakses API/Website mereka. Dalam contoh kasus ini kita akan membuat contoh sederhana penggunakan Python untuk bisa mengakses situs tersebut. mTLS adalah mutual TLS authentication, yang bisa diartikan client dan server perlu menggunakan certificate agar bisa saling terkoneksi, tanpa sertifikat handshake akan gagal.

mtls client server handshake

Persiapan
– Client + Private Certificate dan Root CA yang diberikan oleh penyedia jasa

Code Python

import urllib3
response = http.request('GET', 'https://website.with.mTLS.DOMAIN.com')
print(response.status)
print(response.data.decode())

bila kita menjalankan code tersebut akan muncul error code 400

400
<html>
<head><title>400 No required SSL certificate was sent</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>No required SSL certificate was sent</center>
<hr><center>nginx/1.27.5</center>
</body>
</html>

Client certificate yang diberikan harus sama dengan Root CA (atau Intermediate CA) harus di sign oleh Root CA yang sama yang digunakan di server.

Dengan menggunakan root CA, client certificate dan private key yang diberikan kita bisa merubah code Python tersebut menjadi

import urllib3
 
client_cert_file = "/home/jaranguda/certs/client.crt"
client_key_file = "/home/jaranguda/certs/client.key"
ca_cert_file = "/home/jaranguda/certs/ca.crt"
 
# mTLS setting
http = urllib3.PoolManager(
    cert_file=client_cert_file,
    key_file=client_key_file,
    ca_certs=ca_cert_file,
    cert_reqs='REQUIRED'
)
 
response = http.request('GET', 'https://website.with.mTLS.DOMAIN.com')
 
print(response.status)
print(response.data.decode())

Bila private key menggunakan password, tambahkan baris baru key_password='PASSWORD' di PoolManager()

Jalankan kembali code Python tersebut

python mtls-connection.py
# OUTPUT
200
mTLS connected.

mtls connection works
sukses berhasil terhubung ke server dibalik mTLS.

Leave a comment

Your email address will not be published. Required fields are marked *