配置https双向认证,以及用soapui调试

一、环境信息

服务端启动jboss-4.2.3,IP是10.78.125.111。启动以后在本地调用,本地的IP是10.78.125.222

二、单向认证

单向认证比较简单,用以下命令:

keytool -genkey -alias 111 -keyalg RSA -keystore 111.keystore -validity 3650

名字和姓氏要填域名或者IP名:10.78.125.111。其他可以随便填

这步操作以后,得到111.keystore

将111.keystore放到jboss以下目录:%JBOSS_HOME%\server\default\conf\下,然后配置%JBOSS_HOME%\server\default\deploy\jboss-web.deployer\server.xml文件
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" keystoreFile="conf/111.keystore" 
               keystorePass="changeit" keystoreType="jks" />

这样单向认证就配置好了,它不要求验证客户端信息,也就是所有客户端都可以访问到

如果是用浏览器访问的话,会提示“此网站的安全证书有问题,是否继续访问”。因为这个证书是用最简单的办法自己做的,没有经过权威CA的签署,所以一般浏览器是不承认其安全性的

如果是用代码访问的话,则还需要额外的步骤

首先用以下命令:

keytool -export -alias 111 -file 111.cer -keystore 111.keystore

得到一个111.cer,然后把111.cer给到客户端,客户端用以下命令:

keytool -import -alias 111 -file 111.cer -keystore server.keystore

得到server.keystore,把这个文件作为客户端代码的truststore,才能正常访问到。可以理解为因为是用代码来访问服务端,没有用户手工确认的过程,所以需要把证书加进来进行确认

三、双向认证

双向认证就比较复杂,因为需要客户端的校验,也就是说不是随便什么客户端都能访问到的

那本地想要调用到服务端,就也需要做证书,同样先用这个命令:

keytool -genkey -alias 222 -keyalg RSA -keystore 222.keystore -validity 3650

得到222.keystore

然后:

keytool -export -alias 222 -file 222.cer -keystore 222.keystore

得到222.cer,把222.cer发给服务端,服务端用以下命令:

keytool -import -alias 222 -file 222.cer -keystore client.keystore

得到了client.keystore,这里面就包含了10.78.125.222的证书信息,可以用以下命令查看:

keytool -list -v -keystore client.keystore

然后将client.keystore放到%JBOSS_HOME%\server\default\conf\下,再配置%JBOSS_HOME%\server\default\deploy\jboss-web.deployer\server.xml文件
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS" keystoreFile="conf/111.keystore" 
               keystorePass="changeit" keystoreType="jks" truststoreFile="conf/client.keystore" truststorePass="changeit" truststoreType="jks" />

这样就配置好双向认证的服务端了

在客户端用代码调用服务端的话,就要把server.keystore作为truststore,把222.keystore作为keystore,如果是用cxf的话,配置文件大概是这样:
<http:conduit name="https://10.78.125.111:443/.*">

		<http:tlsClientParameters disableCNCheck="true"
			secureSocketProtocol="SSL">

			<!-- 对方的证书 -->
			<sec:trustManagers>
				<sec:keyStore type="JKS" password="changeit"
					file="/opt/certificates/server.keystore" />
			</sec:trustManagers>

			<!-- 己方的证书 -->
			<sec:keyManagers keyPassword="changeit">
				<sec:keyStore type="JKS" password="changeit"
					file="/opt/certificates/222.keystore" />
			</sec:keyManagers>

			<sec:cipherSuitesFilter>
				<sec:include>.*_EXPORT_.*</sec:include>
				<sec:include>.*_EXPORT1024_.*</sec:include>
				<sec:include>.*_WITH_DES_.*</sec:include>
				<sec:include>.*_WITH_NULL_.*</sec:include>
				<sec:exclude>.*_DH_anon_.*</sec:exclude>
			</sec:cipherSuitesFilter>

		</http:tlsClientParameters>

	</http:conduit>

如果是用soupui或者浏览器来访问,在下面说

四、用SoapUI来调用

用SoapUI来调用的话,如果是单向认证,则不需要额外的操作,可以直接调用。如果是双向认证,需要导入本地证书,也就是222.keystore

选择File-->Preferences-->SSL Settings,导入222.keystore,输入密码即可

五、用浏览器来访问

如果是单向认证,不需要导入证书也可以访问,只是会提示“此网站的安全证书有问题,是否继续访问”。

如果是双向认证,需要导入证书才能访问,否则会提示“SSL节点无法核实您的证书,错误码: ssl_error_bad_cert_alert”。

不过刚才做的cer证书好像是无法导入的,不知道为什么

猜你喜欢

转载自kyfxbl.iteye.com/blog/1541877