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