傳統 WS-Security 依賴雙向 X.509 憑證 (非對稱加密),雖提供強身份驗證,但帶來效能開銷與憑證管理負擔。本文介紹基於 客戶端產生對稱金鑰 的 WS-Security/WS-SecureConversation 方案,僅需伺服器憑證即可實現訊息加密簽名,大幅簡化部署並提升效能。
<xenc:EncryptedKey> 標記置於請求訊息中此機制隱含於 <sp:SymmetricBinding> 搭配 <sp:X509Token sp:IncludeToken="Never"> 的政策斷言中。
<sp:SymmetricBinding>
<sp:ProtectionToken>
<sp:X509Token sp:IncludeToken="Never"> <!-- 僅用於保護金鑰傳輸 -->
<sp:RequireDerivedKeys/>
<sp:RequireThumbprintReference/>
<sp:WssX509V3Token10/>
</sp:X509Token>
</sp:ProtectionToken>
<sp:AlgorithmSuite><sp:Basic128Rsa15/></sp:AlgorithmSuite>
<sp:Layout><sp:Strict/></sp:Layout>
</sp:SymmetricBinding>
<sp:EncryptedParts><sp:Body/></sp:EncryptedParts>
關鍵點:IncludeToken="Never" 表示憑證不隨訊息傳輸,僅以指紋 (Thumbprint) 參考;RequireDerivedKeys 強制衍生金鑰增強安全。
將 BootstrapPolicy 內的 <sp:AsymmetricBinding> 替換為上述 <sp:SymmetricBinding>,實現 STS 握手階段同樣無需客戶端憑證。完整政策巢狀結構見原文清單 2。
| 框架 | WS-Security 對稱加密 | WS-SecureConversation 對稱 Bootstrap |
|---|---|---|
| CXF 2.1.8 | ✅ 正常 | ✅ 正常 |
| Metro 2.0 | ✅ 正常 (需加 <wsap:UsingAddressing>) | ✅ 正常 (需加 <wsap:UsingAddressing>) |
| Axis2 1.5.1 + Rampart 1.5 | ⚠️ 效能嚴重退化 (隨請求增長線性變慢) | ❌ STS 響應處理拋出異常 |
Axis2 對稱加密實現存在嚴重效能缺陷 (疑為金鑰處理線性查找),且無法通過對稱 Bootstrap 的 WS-SecureConversation 測試。


下一篇將總結三大框架安全效能與互操作性最佳實踐指南,敬請期待。

