A. 如何發布https的webservice
首先你要申請一張SSL證書,然後安裝部署到伺服器上就可以開啟https訪問了。可以去GDCA購買SSL證書,Symantec、GeoTrust、GlobalSign等國際品牌的證書都有,還有免費安裝部署服務。
B. WebService繞過https證書認證方法
主要就是調用兩個方法:
trustAllHttpsCertificates();
HttpsURLConnection.setDefaultHostnameVerifier(hv);
將這兩個方法放到開始連接url的前面就可以。
具體實現如下面:直接復制就可以/**
publicbooleanisClientTrusted(
java.security.cert.X509Certificate[]certs){
publicbooleanisServerTrusted(}
java.security.cert.X509Certificate[]certs){returntrue;
.net.ssl.TrustManager,
}
javax.net.ssl.X509TrustManager{returnnull;
publicjava.security.cert.X509Certificate[]getAcceptedIssuers(){()throwsException{}
javax.net.ssl.TrustManager[]trustAllCerts=newjavax.net.ssl.TrustManager[1];javax.net.ssl.TrustManagertm=newmiTM();trustAllCerts[0]=tm;
javax.net.ssl.SSLContextsc=javax.net.ssl.SSLContext
.getInstance();
sc.init(null,trustAllCerts,null);
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
.getSocketFactory());
*跳過https訪問webserivce的方法start*/
HostnameVerifierhv=newHostnameVerifier(){};
publicbooleanverify(StringurlHostName,SSLSessionsession){}
System.out.println(+urlHostName+
+session.getPeerHost());
returntrue;
}
}
returntrue;
publicvoidcheckServerTrusted(}
publicvoidcheckClientTrusted(}
java.security.cert.X509Certificate[]certs,StringauthType)throwsjava.security.cert.CertificateException{
java.security.cert.X509Certificate[]certs,StringauthType)throwsjava.security.cert.CertificateException{
return;
return;
/**
*跳過https訪問webserivce的方法end*/
視圖
C. java 調用WebService如何跳過安全證書驗證的問題
請問樓主解決了么,我剛好也遇到了這個問題。
D. webservice 怎麼使用證書認證,說的詳細一點 謝謝
cxf 可以在配置文件<simple:inInterceptors>
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor" >
<property name="properties">
<map>
<entry key="action" value="Signature"></entry>
<entry key="signaturePropFile" value="<!--證書路徑與密碼配置文件-->"> </entry>
</map>
</property>
</bean>
</simple:inInterceptors>
<simple:outInterceptors>
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor" >
<property name="properties">
<map>
<entry key="action" value="Signature"></entry>
<entry key="signaturePropFile" value="<--證書路徑與密碼配置文件-->"> </entry>
<entry key="user" value="server"></entry>
<entry key="signatureKeyIdentifier" value="IssuerSerial"> </entry>
<entry key="passwordCallbackClass" value="<--密碼回調類-->"> </entry>
</map>
</property>
</bean>
</simple:outInterceptors>
java客戶端
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(service);
Map<String, Object> outProp = new HashMap<String, Object>();
outProp.put(WSHandlerConstants.ACTION, WSHandlerConstants.SIGNATURE);
outProp.put(WSHandlerConstants.SIG_PROP_FILE,"<--證書路徑與密碼配置文件-->"); outProp.put(WSHandlerConstants.USER, "client");
outProp.put(WSHandlerConstants.PW_CALLBACK_CLASS,密碼);
outProp.put(WSHandlerConstants.SIG_KEY_ID, "IssuerSerial");
client.getOutInterceptors().add(new WSS4JOutInterceptor(outProp));
Map<String, Object> inProp = new HashMap<String, Object>();
inProp.put(WSHandlerConstants.ACTION, WSHandlerConstants.SIGNATURE);
inProp.put(WSHandlerConstants.SIG_PROP_FILE,"<--證書路徑與密碼配置文件-->");
client.getInInterceptors().add(new WSS4JInInterceptor(inProp));
E. 如何使用CXF發布HTTPS,且接受所有證書
https是什麼?
HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協議 .
它是由Netscape開發並內置於其瀏覽器中,用於對數據進行壓縮和解壓操作,並返回網路上傳送回的結果。HTTPS實際上應用了Netscape的完全套接字層(SSL)作為HTTP應用層的子層。(HTTPS使用埠443,而不是象HTTP那樣使用埠80來和TCP/IP進行通信。)SSL使用40 位關鍵字作為RC4流加密演算法,這對於商業信息的加密是合適的。HTTPS和SSL支持使用X.509數字認證,如果需要的話用戶可以確認發送者是誰。
為 Web 伺服器配置 SSL
要在 IIS 中啟用 SSL,首先必須獲得用於加密和解密通過網路傳輸的信息的證書。IIS 具有自己的證書請求工具,您可以使用此工具向證書頒發機構發送證書請求。此工具簡化了獲取證書的過程。如果您使用的是 Apache,則必須手動獲取證書。
在 IIS 和 Apache 中,您都會收到來自證書頒發機構的證書文件,此文件必須配置在計算機上。Apache 使用 SSLCACertificateFile 指令讀取其源文件中的證書。而在 IIS 中,您可以使用網站或文件夾屬性的目錄安全性選項卡來配置和管理證書。
您可以將證書從 Apache 遷移到 IIS;但是 Microsoft 建議您重新創建或獲取一個新的 IIS 證書。
此過程假定您的站點已經具備了證書。
1. 以管理員身份登錄到 Web 伺服器計算機。
2. 單擊開始,指向設置,然後單擊控制面板。
3. 雙擊管理工具,然後雙擊 Internet 服務管理器。
4. 從左窗格中的不同服務站點的列表中選擇網站。
5. 右鍵單擊希望為其配置 SSL 通信的網站、文件夾或文件,然後單擊屬性。
6. 單擊目錄安全性選項卡。
7. 單擊編輯。
8. 如果希望網站、文件夾或文件要求 SSL 通信,請單擊需要安全通道 (SSL)。
9. 單擊需要 128 位加密以配置 128 位(而不是 40 位)加密支持。
10. 要允許用戶不必提供證書就可以連接,請單擊忽略客戶證書。
或者,如果要讓用戶提供證書,請使用接受客戶證書。
11. 要配置客戶端映射,請單擊啟用客戶證書映射,然後單擊編輯將客戶證書映射到用戶。
如果配置了此功能,可以將客戶證書分別映射到 Active Directory 中的每個用戶。可以使用此功能以根據用戶訪問網站時提供的證書自動識別用戶。可以將用戶一對一映射到證書(一個證書標識一個用戶),或者將許多證書映射到一個用戶(根據特定的規則,對照證書列表來匹配特定的用戶。第一個有效的匹配項成為映射。)
12. 單擊確定。
參考地址:http://www.cnblogs.com/lotsbug/articles/1018626.html
F. 如何在WebService中使用SSL證書
你好,使用方法如下:
web service在企業應用中常常被用作不同系統之間的介面方式。但是如果沒有任何安全機制的話,顯然是難以委以重任的。比較直接的web service加密方式就是使用HTTPS方式(SSL證書加密)加密連接,並且只允許持有信任證書的客戶端連接,即SSL雙向認證。這樣就保證了連接來源的可信度以及數據在傳輸過程中沒有被竊取或篡改。通過HTTPS加密方式訪問web service具體方法如下:
【准備工作】
(1)檢查JDK的環境變數是否正確。本文使用JDK 1.6
(2)准備web伺服器,這里選用TOMCAT 6.0
(3)准備web service服務端和客戶端。
【生成證書】
這里用到的文件,這里存放在D:/SSL/文件夾內,其中D:/SSL/server/內的文件是要交給伺服器用的,D:/SSL/client/內的文件是要交給客戶端用的。
1生成服務端證書
開始-運行-CMD-在dos窗口執行下執行命令:
keytool -genkey -v -aliastomcat -keyalg RSA -keystore D:/SSL/server/tomcat.keystore -dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" -validity 3650-storepass zljzlj -keypass zljzlj
說明:
keytool 是JDK提供的證書生成工具,所有參數的用法參見keytool –help
-genkey 創建新證書
-v 詳細信息
-alias tomcat 以」tomcat」作為該證書的別名。這里可以根據需要修改
-keyalg RSA 指定演算法
-keystoreD:/SSL/server/tomcat.keystore 保存路徑及文件名
-dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" 證書發行者身份,這里的CN要與發布後的訪問域名一致。但由於這里是自簽證書,如果在瀏覽器訪問,仍然會有警告提示。真正場景中建議申請CA機構(wosign)簽發的SSL證書更安全。
-validity 3650證書有效期,單位為天
-storepass zljzlj 證書的存取密碼
-keypass zljzlj 證書的私鑰
2 生成客戶端證書
執行命令:
keytool ‐genkey ‐v ‐aliasclient ‐keyalg RSA ‐storetype PKCS12 ‐keystore D:/SSL/client/client.p12 ‐dname"CN=client,OU=zlj,O=zlj,L=bj,ST=bj,C=CN" ‐validity 3650 ‐storepassclient ‐keypass client
說明:
參數說明同上。這里的-dname 證書發行者身份可以和前面不同,到目前為止,這2個證書可以沒有任何關系。下面要做的工作才是建立2者之間的信任關系。
3 導出客戶端證書
執行命令:
keytool ‐export ‐aliasclient ‐keystore D:/SSL/client/client.p12 ‐storetype PKCS12 ‐storepass client‐rfc ‐file D:/SSL/client/client.cer
說明:
-export 執行導出
-file 導出文件的文件路徑
4 把客戶端證書加入服務端證書信任列表
執行命令:
keytool ‐import ‐aliasclient ‐v ‐file D:/SSL/client/client.cer ‐keystoreD:/SSL/server/tomcat.keystore ‐storepass zljzl
說明:
參數說明同前。這里提供的密碼是服務端證書的存取密碼。
5 導出服務端證書
執行命令:
keytool -export -aliastomcat -keystore D:/SSL/server/tomcat.keystore -storepass zljzlj -rfc -fileD:/SSL/server/tomcat.cer
說明:
把服務端證書導出。這里提供的密碼也是服務端證書的密碼。
6 生成客戶端信任列表
執行命令:
keytool -import -fileD:/SSL/server/tomcat.cer -storepass zljzlj -keystoreD:/SSL/client/client.truststore -alias tomcat –noprompt
說明:
讓客戶端信任服務端證書
【 配置服務端為只允許HTTPS連接】
1 配置Tomcat 目錄下的/conf/server.xml
Xml代碼:
<Connectorport="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"clientAuth="true"
sslProtocol="TLS"keystoreFile="D:/SSL/server/tomcat.keystore"
keystorePass="zljzlj"truststoreFile="D:/SSL/server/tomcat.keystore"
truststorePass="zljzlj" />
說明:
在server.xml裡面這段內容本來是被注釋掉的,如果想使用https的默認埠443,請修改這里的port參數。其中的clientAuth="true" 指定了雙向證書認證。
2 配置服務端項目web.xml
在<welcome-file-list>之後增加Xml代碼:
<!-- 強制SSL配置,即普通的請求也會重定向為SSL請求 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/service/*</url-pattern><!--全站使用SSL <url-pattern>/*</url-pattern>-->
</web-resource-collection>
<user-data-constraint>
<description>SSL required</description>
<!-- CONFIDENTIAL: 要保證伺服器和客戶端之間傳輸的數據不能夠被修改,且不能被第三方查看到 -->
<!-- INTEGRAL: 要保證伺服器和client之間傳輸的數據不能夠被修改 -->
<!-- NONE: 指示容器必須能夠在任一的連接上提供數據。(即用HTTP或HTTPS,由客戶端來決定)-->
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
說明:
這里限制了WEB service服務地址的訪問必須為https連接。<url-pattern>要根據你的web service服務地址配置。
【修改客戶端代碼】
在執行訪問之前,增加Java代碼:
System.setProperty("javax.net.ssl.trustStore","D:/SSL/client/client.truststore");
System.setProperty("javax.net.ssl.trustStorePassword","zljzlj");
System.setProperty("javax.net.ssl.keyStoreType","PKCS12");
System.setProperty("javax.net.ssl.keyStore","D:/SSL/client/client.p12");
System.setProperty("javax.net.ssl.keyStorePassword","client");
StringendPoint="https://127.0.0.1:8443/easbCut/services/ApplyFormService";
...
通過設置參數來指定客戶端連接時所使用的客戶端證書,這里還可以採用修改JVM啟動參數的的方式來執行,但出於不影響其他功能的考慮,這里採用System.setProperty的方式來設置這些參數,在使用結束後,可以還原這些參數配置。做為客戶端的開發者,可以把拿到的證書文件後,只執行步驟3。
G. 通過https訪問webservice時如何忽略掉服務端證書的驗證不通過
最好不要取消瀏覽器自帶的驗證伺服器證書的功能。。 瀏覽器的Internet選項——高級裡面可以關閉一些驗證
H. webservice怎麼安全驗證
眾所周知,WebService訪問API是公開的,知道其URL者均可以研究與調用。那麼,在只允許注冊用戶的WebService應用中,如何確保API訪問和通信的安全性呢?本文所指的訪問與通信安全性包括:
訪問安全性:當前訪問者是注冊合法用戶
通信安全性:客戶端與伺服器之間的消息即使被第三方竊取也不能解密
本文安全的基本思路是:
注冊用戶登錄時使用RSA加密
Web API調用參數使用DES加密(速度快)
Web API調用中包含一個身份票據Ticket
Web伺服器保存當前Ticket的Session,包括:Ticket、DES加密矢量、注冊用戶基本信息
1 WebService身份驗證
確保注冊用戶的訪問安全,需要如下步驟:1)產生一個當前客戶端機器票據(Ticket);2)請求伺服器RSA公鑰(RSAPublicKey);3)使用RSA加密登錄口令及發布DES加密矢量(DESCipherVector)。
1.1 產生客戶端機器票據Ticket
一般而言,可以由客戶端機器根據自己的MAC、CPU序列號等唯一標識產生一個本機器的Ticket字元串票據,其目的是:唯一標識當前客戶端,防止其它機器模仿本客戶端行為。
1.2 請求伺服器公鑰RSAPublicKey
客戶端攜帶票據Ticket向伺服器請求RSA公鑰RSAPublicKey。在伺服器端,一般採取如下策略產生RSA加密鑰匙:
Application_Start時產生一個1024或更長的RSA加密鑰匙對。如果伺服器需要長久運行,那麼Application_Start產生的RSA可能被破解,替代方案是在當前Session_Start時產生RSA加密鑰匙對
保存當前票據對應的客戶帳號對象,即:Session[Ticket] = AccountObject,在確認身份後在填寫AccountObject具體內容:帳號、RSA加密鑰匙對、DES加密矢量
完成上述步驟後,伺服器將RSAPublicKey傳回給客戶端。
1.3 加密登錄口令及DES加密矢量
客戶端獲得RSAPulbicKey後,產生自己的DES加密矢量DESCipherVector(至少要8位及以上,該加密矢量用於以後的常規通信消息加密,因為其速度比RSA快)。接著,客戶端使用RSAPublicKey加密登錄帳號、口令及DESCipherVector,連同Ticket,發送到伺服器並請求身份驗證。登錄API格式如下:
public void Login(string Ticket, string cipherLongID, string cipherPassword);
如果驗證成功,伺服器將當前帳號信息、RSA鑰匙、DESCipherVector等保存到會話Session[Ticket]中。
2 WebService通信安全性
2.1 加密WebService API參數
身份確認後,在客戶端調用的WebService API中,必須包括參數Ticket,其它參數則均使用DESCipherVector加密。伺服器端返回的消息也同樣處理。例如,提交一個修改email的函數定義為:
public void ModifyEmail(string Ticket, string cipherEmai);
2.2 客戶端解密消息
客戶端接收到伺服器返回消息後,先做解密操作,如果成功則進入下步處理。否則拋出加密信息異常。
2.3 伺服器端解密消息
伺服器接收到客戶提交的API請求後,首先驗證Ticket的合法性,即查找Session中是否有該票據以驗證客戶身份。然後,解密調用參數。如果成功則進入下不操作,否則返回操作異常消息給客戶端。
需要指出,如果第三方截獲全部會話消息,並保留其Ticket,此時伺服器端仍然認可這個第三方消息。但是,第三方不能瀏覽,也不能修改調用API的參數內容,此時解密參數時將拋出異常。
上面探討了一個基於加密的WebService訪問與通信安全方法,即使第三方獲取消息,不能查看原始內容,也不能修改內容,保證了WebService API的安全性。
I. 如何訪問HTTPS的WebService
web service在企業應用中常常被用作不同系統之間的介面方式。但是如果沒有任何安全機制的話,顯然是難以委以重任的。比較直接的web service加密方式就是使用https方式(ssl證書加密)加密連接,並且只允許持有信任證書的客戶端連接,即ssl雙向認證。這樣就保證了連接來源的可信度以及數據在傳輸過程中沒有被竊取或篡改。通過https加密方式訪問web service具體方法如下:
【准備工作】
(1)檢查jdk的環境變數是否正確。本文使用jdk 1.6
(2)准備web伺服器,這里選用TOMCAT 6.0
(3)准備web service服務端和客戶端。
【生成證書】
這里用到的文件,這里存放在D:/ssl/文件夾內,其中D:/ssl/server/內的文件是要交給伺服器用的,D:/ssl/client/內的文件是要交給客戶端用的。
1生成服務端證書
開始-運行-cmd-在dos窗口執行下執行命令:
keytool -genkey -v -aliastomcat -keyalg rsa -keystore D:/ssl/server/tomcat.keystore -dname"cn=127.0.0.1,OU=zlj,O=zlj,L=Peking,st=Peking,C=cn" -validity 3650-storepass zljzlj -keypass zljzlj
說明:
keytool 是jdk提供的證書生成工具,所有參數的用法參見keytool –help
-genkey 創建新證書
-v 詳細信息
-alias tomcat 以」tomcat」作為該證書的別名。這里可以根據需要修改
-keyalg rsa 指定演算法
-keystoreD:/ssl/server/tomcat.keystore 保存路徑及文件名
-dname"cn=127.0.0.1,OU=zlj,O=zlj,L=Peking,st=Peking,C=cn" 證書發行者身份,這里的cn要與發布後的訪問域名一致。但由於這里是自簽證書,如果在瀏覽器訪問,仍然會有警告提示。真正場景中建議申請CA機構(wosign)簽發的ssl證書更安全。
-validity 3650證書有效期,單位為天
-storepass zljzlj 證書的存取密碼
-keypass zljzlj 證書的私鑰
2 生成客戶端證書
執行命令:
keytool ‐genkey ‐v ‐aliasclient ‐keyalg rsa ‐storetype PKCS12 ‐keystore D:/ssl/client/client.p12 ‐dname"cn=client,OU=zlj,O=zlj,L=bj,st=bj,C=cn" ‐validity 3650 ‐storepassclient ‐keypass client
說明:
參數說明同上。這里的-dname 證書發行者身份可以和前面不同,到目前為止,這2個證書可以沒有任何關系。下面要做的工作才是建立2者之間的信任關系。
3 導出客戶端證書
執行命令:
keytool ‐export ‐aliasclient ‐keystore D:/ssl/client/client.p12 ‐storetype PKCS12 ‐storepass client‐rfc ‐file D:/ssl/client/client.cer
說明:
-export 執行導出
-file 導出文件的文件路徑
4 把客戶端證書加入服務端證書信任列表
執行命令:
keytool ‐import ‐aliasclient ‐v ‐file D:/ssl/client/client.cer ‐keystoreD:/ssl/server/tomcat.keystore ‐storepass zljzl
說明:
參數說明同前。這里提供的密碼是服務端證書的存取密碼。
5 導出服務端證書
執行命令:
keytool -export -aliastomcat -keystore D:/ssl/server/tomcat.keystore -storepass zljzlj -rfc -fileD:/ssl/server/tomcat.cer
說明:
把服務端證書導出。這里提供的密碼也是服務端證書的密碼。
6 生成客戶端信任列表
執行命令:
keytool -import -fileD:/ssl/server/tomcat.cer -storepass zljzlj -keystoreD:/ssl/client/client.truststore -alias tomcat –noprompt
說明:
讓客戶端信任服務端證書
【 配置服務端為只允許https連接】
1 配置Tomcat 目錄下的/conf/server.xml
Xml代碼:
<Connectorport="8443" protocol="HTTP/1.1" sslEnabled="true"
maxThreads="150" scheme="https" secure="true"clientAuth="true"
sslProtocol="TLS"keystoreFile="D:/ssl/server/tomcat.keystore"
keystorePass="zljzlj"truststoreFile="D:/ssl/server/tomcat.keystore"
truststorePass="zljzlj" />
說明:
在server.xml裡面這段內容本來是被注釋掉的,如果想使用https的默認埠443,請修改這里的port參數。其中的clientAuth="true" 指定了雙向證書認證。
2 配置服務端項目web.xml
在<welcome-file-list>之後增加Xml代碼:
<!-- 強制ssl配置,即普通的請求也會重定向為ssl請求 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>ssl</web-resource-name>
<url-pattern>/service/*</url-pattern><!--全站使用ssl <url-pattern>/*</url-pattern>-->
</web-resource-collection>
<user-data-constraint>
<description>SSL required</description>
<!-- CONFIDENTIAL: 要保證伺服器和客戶端之間傳輸的數據不能夠被修改,且不能被第三方查看到 -->
<!-- integral: 要保證伺服器和client之間傳輸的數據不能夠被修改 -->
<!-- none: 指示容器必須能夠在任一的連接上提供數據。(即用HTTP或https,由客戶端來決定)-->
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
說明:
這里限制了WEB service服務地址的訪問必須為https連接。<url-pattern>要根據你的web service服務地址配置。
【修改客戶端代碼】
在執行訪問之前,增加Java代碼:
System.setProperty("javax.net.ssl.trustStore","D:/SSL/client/client.truststore");
System.setProperty("javax.net.ssl.trustStorePassword","zljzlj");
System.setProperty("javax.net.ssl.keyStoreType","PKCS12");
System.setProperty("javax.net.ssl.keyStore","D:/SSL/client/client.p12");
System.setProperty("javax.net.ssl.keyStorePassword","client");
StringendPoint="https://127.0.0.1:8443/easbCut/services/ApplyFormService";
...
通過設置參數來指定客戶端連接時所使用的客戶端證書,這里還可以採用修改jvm啟動參數的的方式來執行,但出於不影響其他功能的考慮,這里採用System.setProperty的方式來設置這些參數,在使用結束後,可以還原這些參數配置。做為客戶端的開發者,可以把拿到的證書文件後,只執行步驟3。
J. webservice程序ssl證書單向配置客戶端需要什麼
單向的話我建議你用正規的機構頒發的數字證書,可以申請免費測試的。————沃通CA機構做數字認證證書領域的領跑者,buy.wosign.com