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.
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.