# 1. Server 金鑰庫 (含 Server 私鑰/公鑰)
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\tomcat.keystore -validity 36500
# 2. Client 金鑰庫 (PKCS12 格式,供 Windows 匯入)
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore D:\lpClient.p12 -validity 36500
# 3. 匯出 Client 公鑰憑證
keytool -export -alias mykey -keystore D:\lpClient.p12 -storetype PKCS12 -storepass password -rfc -file D:\lpClient.cer
# 4. 將 Client 公鑰匯入 Server 信任庫
keytool -import -v -file D:\lpClient.cer -keystore D:\tomcat.keystore
# 5. 匯出 Server 公鑰憑證 (供 Client 信任)
keytool -export -alias tomcat -keystore D:\tomcat.keystore -file D:\lpServer.cer
# 產出檔案:tomcat.keystore, lpClient.p12, lpServer.cer
關鍵:clientAuth="false" 先關閉客戶端驗證,讓 C# 能順利新增服務參考;部署完成後再改為 true。
CLIENT-CERT
Client Cert Users-only Area
SSL
/*
CONFIDENTIAL
8080
8443
lpClient.p12 → 匯入至「個人」存儲,輸入密碼lpServer.cer → 匯入至「受信任的根憑證發佈機構」存儲certmgr.msc 查看兩個存儲是否正確
server.xml:clientAuth="true"| 現象 | 可能原因 | 解決 |
|---|---|---|
| C# 新增服務參考失敗 | clientAuth=true 導致 WSDL 無法匿名存取 | 先設 false,完成參考後再改 true |
| SSL 連線失敗 | Server 憑證不受信任 | 確認 lpServer.cer 在 Client「受信任的根憑證」中 |
| 403 Forbidden / Client Cert Required | Client 憑證未送出或不被 Server 信任 | 確認 lpClient.p12 在 Client「個人」存儲,CA 在 Server truststore |
| WCF 找不到客戶端憑證 | findValue/x509FindType/storeLocation/storeName 不匹配 | 用 certmgr.msc 確認憑證屬性,調整配置 |
| Soap 版本不匹配 | Axis2 預設 Soap11,C# 用 Soap12 | 統一雙端 Soap 版本,或配置多端點 |
certificateValidationMode="ChainTrust" 或 PeerTrust雙向憑證認證提供傳輸層面的強身分驗證,配合 WCF 強型別代理,是 Java/C# 異構系統整合的經典方案。