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.
| 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. |
| 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/HSMKeyServiceadalah penyimpanan key AES aplikasi dan tidak dipanggil oleh empat TLS listener.
ssl dan Endpoint PengelolaanSetiap domain listener memiliki boolean persisted ssl, default false. Flag ini dikirim utuh melalui request body entity dan tidak divalidasi khusus sebagai konfigurasi TLS.
| 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 karenaISO20022XLSX.ServerInittidak membaca flag tersebut. Lihat Flow 2.
[!DANGER]
sslhanya 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.
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.
| 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]
SelfSignedCertificatedibuat setiapserverRegistration. 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.
TcpServerInit dimulai pada ApplicationReadyEvent, memilih konfigurasi yang memiliki schemeConfig dan state SERVER. Saat ssl true, TLS dipasang sebelum stream diserahkan ke TcpServerHandler.
[!DANGER] ISO8583 mengaktifkan
wiretap(..., HEX_DUMP)tanpa membedakanssl; 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.
TLS SMTP tidak terkait NetworkConfig.ssl. Pada setiap panggilan pengiriman, EmailServiceImpl mengambil semua ApplicationParameters, membentuk map berdasarkan paramName, lalu validateEmailConfig menentukan properties JavaMail.
| 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=truemengaktifkanmail.smtp.starttls.enablesekaligusmail.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=trueberarti implicit TLS (SMTPS), yang cocok dengan port 465 pada seed. Pada koneksi yang sudah SSL,starttls.enableumumnya tidak berpengaruh. BilaEMAIL_PORTdiubah ke server STARTTLS (misalnya 587) denganTLS_ENABLED=true, handshake berpotensi gagal.
[!DANGER]
TLS_ENABLEDnull menyebabkanemailConfig.get(TLS_ENABLED).equals(FALSE)melemparNullPointerExceptionsebelumTransport.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.
| 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 | 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. |
| 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. |
| 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. |
| 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 |
openssl s_client) pada setiap listener dengan ssl=true untuk mengetahui version/cipher yang benar-benar dinegosiasikan.application*.yml tidak mendefinisikan server.ssl.ssl=false.EmailServiceImpl menyetel mail.smtp.ssl.trust / mail.smtp.ssl.checkserveridentity, karena ini menentukan verifikasi sertifikat SMTP server dari sisi client.