首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Tomcat + Axis2 配置雙向憑證認證 Web Service 供 C# 客戶端呼叫

     編輯:關於C#

架構概覽

  • Server:Tomcat 7 + Axis2 發布 Web Service
  • Client:C# (WCF) 呼叫 HTTPS + Client Certificate 驗證
  • 認證模式:雙向 TLS (Server 驗證 Client Cert,Client 驗證 Server Cert)

步驟 1:產生憑證 (JDK keytool)


# 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

步驟 2:Tomcat server.xml 配置 HTTPS




關鍵:clientAuth="false" 先關閉客戶端驗證,讓 C# 能順利新增服務參考;部署完成後再改為 true。

步驟 3:Tomcat web.xml 強制 HTTPS (可選)




  CLIENT-CERT
  Client Cert Users-only Area


  
    SSL
    /*
  
  
    CONFIDENTIAL
  

步驟 4:Axis2 transports 配置




  8080


  8443

步驟 5:Windows 客戶端安裝憑證

  1. 雙擊 lpClient.p12 → 匯入至「個人」存儲,輸入密碼
  2. 雙擊 lpServer.cer → 匯入至「受信任的根憑證發佈機構」存儲
  3. 驗證:certmgr.msc 查看兩個存儲是否正確

步驟 6:C# WCF 客戶端配置 (App.config)



  
    
      
        
          
            
          
            
        
      
    
    
      
    
    
      
        
          
          
            
            
               
              
            
          
        
      
    
  

步驟 7:啟用雙向驗證並測試

  1. 修改 Tomcat server.xml:clientAuth="true"
  2. 重啟 Tomcat
  3. 瀏覽器訪問服務 WSDL,應提示選擇客戶端憑證
  4. C# 客戶端呼叫測試,成功即配置完成
  5. 移除客戶端憑證或修改配置,應呼叫失敗,驗證安全性生效

常見問題排查

現象可能原因解決
C# 新增服務參考失敗clientAuth=true 導致 WSDL 無法匿名存取先設 false,完成參考後再改 true
SSL 連線失敗Server 憑證不受信任確認 lpServer.cer 在 Client「受信任的根憑證」中
403 Forbidden / Client Cert RequiredClient 憑證未送出或不被 Server 信任確認 lpClient.p12 在 Client「個人」存儲,CA 在 Server truststore
WCF 找不到客戶端憑證findValue/x509FindType/storeLocation/storeName 不匹配用 certmgr.msc 確認憑證屬性,調整配置
Soap 版本不匹配Axis2 預設 Soap11,C# 用 Soap12統一雙端 Soap 版本,或配置多端點

安全性最佳實踐

  • 生產環境 certificateValidationMode="ChainTrust" 或 PeerTrust
  • 定期輪換憑證,建立自動化部署流程
  • 私鑰儲存於 HSM 或 Windows 憑證存儲 (非檔案)
  • 啟用 WCF 訊息記錄僅限除錯期,生產關閉
  • 考慮改用 WS-Security (UsernameToken/X.509) 而非純傳輸層安全

雙向憑證認證提供傳輸層面的強身分驗證,配合 WCF 強型別代理,是 Java/C# 異構系統整合的經典方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved