TLS — Full Current Functional Flow

Dokumen ini memetakan implementasi TLS/SSL yang benar-benar ada pada source shifraud-core: listener dinamis Reactor Netty untuk Transaction HTTP, ISO20022 XML HTTP, ISO20022 JSON HTTP, dan ISO8583 TCP, serta TLS untuk pengiriman SMTP. Ini adalah baseline current, bukan desain target. Walaupun dokumen rilis menyebut TLS 1.3, source tidak memaksa TLSv1.3; versi TLS yang akhirnya dinegosiasikan bergantung pada default Netty/JDK dan tidak diverifikasi saat runtime.

Status Verifikasi

Area Status Batas verifikasi
Dynamic Netty listener dan branch ssl SOURCE-TRACED Ditelusuri dari entity, service, event, dan ServerInit aktif.
Persistensi konfigurasi dan seed SOURCE-TRACED Ditelusuri dari entity dan Liquibase changelog.
SMTP TLS SOURCE-TRACED Ditelusuri dari EmailServiceImpl dan parameter DB seed.
Negosiasi protocol/cipher/certificate di jaringan NOT RUNTIME-VERIFIED Tidak menjalankan listener atau TLS handshake.
Konfigurasi/sertifikat produksi NOT PRODUCTION-VERIFIED Tidak memeriksa database serta deployment/terminating proxy produksi.

Peta Komponen Utama

Concern Komponen current Tanggung jawab
Config Transaction HTTP Transaction.Logic.NetworkConfig.NetworkConfig / NetworkConfigServiceImpl Menyimpan ssl, memulai/menghentikan listener lewat ServerInitEvent.
Config ISO20022 XML/JSON Masing-masing SpringLogic.NetworkConfig.NetworkConfig / NetworkConfigServiceImpl Menyimpan ssl; XML menerbitkan START ketika SERVER dibuat/diubah, JSON baru memulai saat bootstrap/restart.
Config ISO8583 IsoNetworkConfig / IsoNetworkConfigServiceImpl Menyimpan ssl; menerbitkan TcpServerInitEvent.
TLS listener Empat ServerInit yang memiliki cabang TLS (Transaction, XML, JSON, ISO8583 TcpServerInit) Membuat SelfSignedCertificate, lalu memasang Http11SslContextSpec atau TcpSslContextSpec bila ssl == true.
Listener tanpa cabang TLS ISO20022XLSX.ServerInit Tidak membaca isSsl(); listener selalu plaintext (lihat Flow 2).
Proses payload setelah handshake ServerHandler sesuai protokol Menangani POST HTTP atau stream TCP; TLS hanya membungkus transport, tidak mengubah handler.
SMTP TLS EmailServiceImpl.validateEmailConfig Membaca parameter aplikasi dan membentuk JavaMail Properties.

[!DANGER] Tidak ada konfigurasi server.ssl, keystore/truststore TLS server, mutual TLS (client certificate), protocol TLS, cipher suite, atau sertifikat dari file/secret manager pada jalur listener. LocalKeyService/HSMKeyService adalah penyimpanan key AES aplikasi dan tidak dipanggil oleh empat TLS listener.

Ringkasan End-to-End

[Diagram]

Flow 1 — Sumber Konfigurasi ssl dan Endpoint Pengelolaan

Setiap domain listener memiliki boolean persisted ssl, default false. Flag ini dikirim utuh melalui request body entity dan tidak divalidasi khusus sebagai konfigurasi TLS.

[Diagram]
Modul Table/field authoritative Endpoint family Perilaku START current
Transaction HTTP T_NETWORK_CONFIG.ssl /network-config add/update SERVER dan restart menerbitkan START.
ISO20022 XML HTTP t_iso20022xml_network_config.ssl /iso20022-xml/network-config add/update SERVER dan restart menerbitkan START.
ISO20022 JSON HTTP t_iso20022json_network_config.ssl /iso20022-json/network-config add/update hanya save; restart menerbitkan START. Bootstrap memuat SERVER.
ISO8583 TCP T_ISO8583_NETWORK_CONFIG.ssl /iso/network-config add/update SERVER dan restart/reload menerbitkan TCP START.

[!NOTE] Config ISO20022 XLSX juga memiliki field ssl (seed port 23023), tetapi tidak masuk tabel di atas karena ISO20022XLSX.ServerInit tidak membaca flag tersebut. Lihat Flow 2.

[!DANGER] ssl hanya boolean. Tidak ada field certificate path, private-key path, password, truststore, protocol, cipher, ataupun client-auth pada entity; oleh karena itu API tidak dapat memasok sertifikat TLS tertentu.

[!INFO] Seed Liquibase listener yang ditemukan semuanya memasang ssl=false (Transaction 5555/4545, XML 22022, JSON 24024, XLSX 23023, ISO8583 8583). Nilai database runtime dapat berbeda dan tidak diperiksa.

Flow 2 — TLS untuk Dynamic HTTP Listener

Tiga listener HTTP (Transaction, ISO20022 XML, ISO20022 JSON) memakai Http11SslContextSpec; semuanya hanya memasuki cabang TLS ketika NetworkConfig.isSsl() bernilai true. Listener ISO20022 XLSX juga HTTP, tetapi tidak memiliki cabang TLS sama sekali.

[Diagram]
Listener Bootstrap Route current TLS branch Connected state
Transaction ServerInit @PostConstruct; semua scheme kecuali nama mengandung ISO; hanya state SERVER POST setiap MessageType.value SelfSignedCertificate + Http11SslContextSpec.forServer Disimpan di runningServers; tidak ada setConnectedNetwork setelah bind bootstrap.
ISO20022 XML ServerInit @PostConstruct; config dari fetchServerConnectionBySchemeId Semua request POST ke ServerHandler Sama ServerCollection; lalu setConnectedNetwork(netConfig).
ISO20022 JSON ServerInit @PostConstruct; config dari fetchServerConnectionBySchemeId POST per MessageType.value, path dinormalisasi dengan / Sama, via configureSsl runningServers; sesudah bind, connected=true lalu setConnectedNetwork.
ISO20022 XLSX ServerInit Tidak diuraikan pada dokumen ini Tidak diuraikan pada dokumen ini Tidak ada; isSsl() tidak dibaca, listener selalu plaintext Tidak diuraikan pada dokumen ini.

[!DANGER] SelfSignedCertificate dibuat setiap serverRegistration. Certificate dan private key tidak dipersist oleh aplikasi; Netty menulis file temporer yang ditandai hapus saat JVM exit (bisa tertinggal di temp dir bila proses dimatikan paksa). Restart menghasilkan identitas TLS baru, sehingga client yang melakukan pinning atau trust terhadap certificate sebelumnya akan gagal sampai trust diperbarui.

[!DANGER] Source tidak memanggil API untuk membatasi protocol ke TLS 1.3. Klaim "TLS 1.3" pada dokumentasi/release tidak cukup untuk membuktikan TLS 1.3 dipakai; library/JDK dapat menegosiasikan versi lain yang tersedia.

[!DANGER] wiretap(..., AdvancedByteBufFormat.TEXTUAL) aktif pada listener HTTP (DEBUG/INFO bergantung modul), termasuk branch TLS. Source tidak membuktikan apakah log melihat plaintext setelah dekripsi; pemeriksaan runtime/log configuration diperlukan karena ini berpotensi merekam payload sensitif.

Flow 3 — TLS untuk ISO8583 TCP

TcpServerInit dimulai pada ApplicationReadyEvent, memilih konfigurasi yang memiliki schemeConfig dan state SERVER. Saat ssl true, TLS dipasang sebelum stream diserahkan ke TcpServerHandler.

[Diagram]

[!DANGER] ISO8583 mengaktifkan wiretap(..., HEX_DUMP) tanpa membedakan ssl; source tidak menunjukkan redaksi payload. Bila Netty merekam bytes setelah TLS decrypt, log dapat berisi ISO8583 plaintext. Ini NOT RUNTIME-VERIFIED.

[!DANGER] Listener TLS tetap menggunakan self-signed certificate dan tidak memiliki mekanisme client certificate/mTLS maupun truststore.

Flow 4 — TLS SMTP untuk Notifikasi Email

TLS SMTP tidak terkait NetworkConfig.ssl. Pada setiap panggilan pengiriman, EmailServiceImpl mengambil semua ApplicationParameters, membentuk map berdasarkan paramName, lalu validateEmailConfig menentukan properties JavaMail.

[Diagram]
Input/field Transformasi current Hasil
TLS_ENABLED Dibandingkan memakai emailConfig.get(TLS_ENABLED).equals("false") Hanya string persis "false" mematikan setting TLS; nilai lain (termasuk true) mengaktifkan setting TLS; null melempar NPE dan tidak masuk cabang mana pun.
TLS enabled Set mail.smtp.starttls.enable = string "true"; set mail.smtp.ssl.enable = boolean true STARTTLS dan implicit SSL diminta bersamaan.
SSL_PROTOCOLS / TLSV_1_2 constants Dideklarasikan tetapi tidak dipakai Tidak ada protocol SMTP TLS yang dipaksa oleh source.
Seed TLS_ENABLED=true, EMAIL_PORT=465 Mengarah ke jalur yang menyetel dua property TLS; kompatibilitas server tidak runtime-verified.

[!DANGER] Jalur TLS_ENABLED=true mengaktifkan mail.smtp.starttls.enable sekaligus mail.smtp.ssl.enable; source tidak memilih satu mode berdasarkan port atau kemampuan SMTP server. Hasil handshake aktual bergantung implementasi JavaMail/server dan NOT RUNTIME-VERIFIED.

[!NOTE] Catatan perilaku JavaMail (bukan hasil trace source): mail.smtp.ssl.enable=true berarti implicit TLS (SMTPS), yang cocok dengan port 465 pada seed. Pada koneksi yang sudah SSL, starttls.enable umumnya tidak berpengaruh. Bila EMAIL_PORT diubah ke server STARTTLS (misalnya 587) dengan TLS_ENABLED=true, handshake berpotensi gagal.

[!DANGER] TLS_ENABLED null menyebabkan emailConfig.get(TLS_ENABLED).equals(FALSE) melempar NullPointerException sebelum Transport.send; tidak ada validasi parameter eksplisit.

[!DANGER] Password SMTP disediakan oleh seed Liquibase dalam plaintext. Ini bukan material TLS server, tetapi state credential TLS SMTP current berada di database seed, bukan secret manager.

Matriks Skenario Operasional

Scenario Hasil transport State lain Next step
HTTP/TCP config SERVER, ssl=false Listener plaintext ter-bind Map/collection server terisi; sebagian modul menulis connected=true Client memakai HTTP/TCP biasa.
HTTP/TCP config SERVER, ssl=true Listener memakai context dari self-signed certificate baru Certificate tidak dipersist aplikasi; Netty menulis file temporer yang dihapus saat JVM exit Client harus menerima self-signed certificate untuk handshake.
TLS client tidak mempercayai cert Handshake gagal sebelum handler Tidak ada response bisnis Trust cert sementara atau gunakan terminasi/cert production di luar source.
Config di-restart, ssl=true Server lama dihentikan lalu certificate baru dibuat connected diset menurut service tertentu Client perlu reconnect dan kemungkinan trust ulang.
ISO20022 JSON add/update SERVER tanpa restart Entity tersimpan; tidak ada event START dari add/update DB dapat berkata connected sesuai request sebelumnya Bootstrap aplikasi atau /restart/{id} diperlukan untuk bind.
XLSX config ssl=true Tetap plaintext Field ada di table/entity tetapi ISO20022XLSX.ServerInit tidak membaca isSsl() Tidak ada TLS pada listener XLSX current.
SMTP TLS_ENABLED="false" Authenticated SMTP tanpa properti TLS Tidak ada protocol choice Transport.send.
SMTP TLS_ENABLED="true" JavaMail diberi STARTTLS dan SSL enable Protocol tidak dipaksa Keberhasilan bergantung server SMTP.
SMTP TLS_ENABLED null NPE sebelum Transport.send Email tidak terkirim Isi parameter TLS_ENABLED di T_APPLICATION_PARAMETERS.

State Ownership Current

State Authoritative source Projection/consumer
Flag TLS listener Transaction T_NETWORK_CONFIG.ssl Transaction...ServerInit.serverRegistration.
Flag TLS listener XML/JSON Masing-masing table t_iso20022xml_network_config.ssl / t_iso20022json_network_config.ssl ISO20022XML/JSON...ServerInit.
Flag TLS listener ISO8583 T_ISO8583_NETWORK_CONFIG.ssl TcpServerInit.createTcpServer.
Flag ssl config XLSX Field ssl pada config XLSX Tidak dibaca oleh ISO20022XLSX.ServerInit; tidak berefek pada listener.
Status connection Field connected pada masing-masing network config UI/API dan beberapa setConnectedNetwork; bukan bukti TLS handshake.
Server process handle runningServers map atau ServerCollection in-memory START/STOP/restart/shutdown.
Certificate/private key listener Instance SelfSignedCertificate per registration Http11SslContextSpec / TcpSslContextSpec; tidak dipersist aplikasi (file temporer Netty dihapus saat JVM exit).
TLS SMTP toggle T_APPLICATION_PARAMETERS row TLS_ENABLED EmailServiceImpl.validateEmailConfig.

Known Current Gaps

Gap current Dampak
Tidak ada protocol TLS dipaksa Tidak ada bukti TLS 1.3; negosiasi bergantung runtime.
Self-signed cert baru pada tiap registration Identitas server berubah setiap restart dan tidak layak sebagai trust production stabil.
Tidak ada truststore/mTLS/cipher configuration Tidak ada kontrol source untuk trust client atau hardening TLS.
server.ssl.* tidak ditemukan REST API Spring Boot utama tidak memperoleh TLS dari source ini; mungkin plaintext atau diterminasi proxy di luar repo.
XLSX mengabaikan ssl Flag config memberi kesan TLS tersedia, tetapi listener selalu plaintext.
JSON add/update tidak start listener Perubahan TLS dapat tersimpan tanpa diterapkan sampai restart/bootstrap.
Wiretap HTTP/TCP aktif Ada risiko observabilitas mencatat data plaintext; perlu verifikasi runtime.
SMTP SSL + STARTTLS bersamaan; protocol constants tak dipakai Mode dan versi TLS SMTP tidak tegas.
TLS_ENABLED null pada SMTP NPE tanpa validasi eksplisit; email gagal terkirim.

Endpoint Surface

Surface Endpoint family Capability
Transaction network config /network-config Search, add, update, restart, delete, export/import konfigurasi termasuk ssl.
ISO20022 XML network config /iso20022-xml/network-config Search/find/add/update/restart/delete konfigurasi termasuk ssl.
ISO20022 JSON network config /iso20022-json/network-config Search/find/add/update/restart/delete konfigurasi termasuk ssl.
ISO8583 network config /iso/network-config Search/add/update/reload/restart/delete konfigurasi termasuk ssl.
SMTP setting Tidak ada endpoint TLS khusus yang ditemukan Parameter TLS_ENABLED dibaca sebagai application parameter saat email dikirim.

Source Trace

Flow/Area Primary source
Transaction HTTP config/event/TLS Transaction/Logic/NetworkConfig/NetworkConfig.java; Transaction/Logic/NetworkConfig/NetworkConfigServiceImpl.java; Transaction/Core/Server/HTTP/ServerInit.java
ISO20022 XML config/event/TLS ISO20022XML/SpringLogic/NetworkConfig/NetworkConfig.java; ISO20022XML/SpringLogic/NetworkConfig/NetworkConfigServiceImpl.java; ISO20022XML/Core/Server/HTTP/ServerInit.java
ISO20022 JSON config/event/TLS ISO20022JSON/SpringLogic/NetworkConfig/NetworkConfig.java; ISO20022JSON/SpringLogic/NetworkConfig/NetworkConfigServiceImpl.java; ISO20022JSON/Core/Server/ServerInit.java
ISO8583 config/event/TLS ISO8583/Logic/IsoNetworkConfig/IsoNetworkConfig.java; ISO8583/Logic/IsoNetworkConfig/IsoNetworkConfigServiceImpl.java; ISO8583/Server/TCP/TcpServerInit.java
XLSX non-implementation TLS ISO20022XLSX/Core/Server/ServerInit.java
Config API Transaction/Logic/NetworkConfig/NetworkConfigController.java; ISO20022XML/SpringLogic/NetworkConfig/NetworkConfigController.java; ISO20022JSON/SpringLogic/NetworkConfig/NetworkConfigController.java; ISO8583/Logic/IsoNetworkConfig/IsoNetworkConfigController.java
SMTP TLS NotificationModule/Logic/EmailNotification/EmailServiceImpl.java; NotificationModule/Constant/EmailConfigValueConstant.java
DB defaults/seeds db/changelog/Interface Protocol/20260406100017_fadhiilabiyyi_create_t_network_config.xml; db/changelog/ISO20022/Create/20260709000001_goy_create_tables.xml; db/changelog/ISO20022/Create/20260724000001_goy_create_iso20022json_tables.xml; db/changelog/AppConfigSequence/Seed/20260406100017_fadhiilabiyyi_seed_t_application_parameters.xml

Catatan Verifikasi Lanjutan