# WS-Security Requirement and Implementation Suggestion ## Overview WS-Security adalah standar untuk mengamankan _SOAP message_ dan fungsinya adalah untuk memastikan integritas (_SOAP message_ tidak pernah diubah) dan _authenticity_ (dibuat oleh pengirim yg sebenarnya). ## Requirement - _Authentication Method / Token Profile_: X.509Certificate Token Profile - _Header Attributes_: soapenv:mustUnderstand="1" harus ada di header. - _Canonicalization_: dibutuhkan _Exclusive XML Canonicalization Omit/Without Comment_ - _KeyIdentifier_: apa saja dari ISSUER_SERIAL, ISSUER_SERIAL_QUOTE_FORMAT, BST_DIRECT_REFERENCE, X509_KEY_IDENTIFIER, THUMBPRINT_IDENTIFIER, SKI_KEY_IDENTIFIER (dilarang pakai KEY_VALUE) (disarankan, saat ini biasa yg dipakai BST_DIRECT_REFERENCE) - _Signature Algorithms_: apa saja dari RSA_SHA1, RSA_SHA256, RSA_SHA512 - _Digest Algorithms_: apa saja dari SHA1, SHA256, SHA384, SHA512 - _Signature Scope_: hanya dibutuhkan di _SOAP Body_ - _Timestamp_: tidak dibutuhkan - Enkripsi: jangan ## Sample WS-Security Ini dibuat pakai WSS4J dengan Crypto Provider Merlin dan opsi: - SigCanonicalization: C14N_EXCL_OMIT_COMMENTS - KeyIdentifierType: BST_DIRECT_REFERENCE - SignatureAlgorithm: RSA_SHA1 - DigestAlgo: SHA256 ```xml MII...base64-cert... U2VsYW1hdC4uLiBBbmRhIG1lbmVtdWthbiBzYXlh4nE= SGVsbG8gdGhlcmUuIEhvdydzIGxpZmU/IC0tc2tyYW1kNGogZGV2ZWxvcGVyy7+RjD9xM1naWNTuekorKgW4f5UTcLhFGPh81RqrXvbsWspjqUMLCS/7xQU1ipQLjVFfAG+S2/72S9OiILhz9ei6hIIJCodkf96PmaldSSNgKgw= Meow kucing ``` # Implementation Suggestion Pakai ini (atau yg lebih baik, yg disupport): - SigCanonicalization: C14N_EXCL_OMIT_COMMENTS - KeyIdentifierType: BST_DIRECT_REFERENCE - SignatureAlgorithm: RSA_SHA256 - DigestAlgo: SHA256 Lihat [sign example](./sign-example). ## Caveats - **Pastikan Body dan SignedInfo tidak berubah setelah proses signing**. Proses signing mengunci keaslian data dengan cara membubuhkan bukti hashing kriptografi untuk mendeteksi adanya perubahan. Jadikan proses signing hal yg sangat terakhir dari _workflow_ anda. Silahkan atur data sesuai keinginan namun jangan ubah sama sekali setelah proses signing. (beda spasi saja akan merusak signing). - **Disarankan gunakan [implementation suggestion](#implementation-suggestion)** apabila bingung. - **_Selftest_ terlebih dahulu jika ingin memastikan**. Sign data anda lalu verify secara mandiri.