如何在不使用Spring启动和使用单独的Apache tomcat服务器的情况下在Spring WS中配置双向SSL连接?

我需要以双向SSL连接安全机制向服务器发送soap请求消息,并且还处理来自服务器的Soap响应。 我使用Spring MVC和Spring ws,它完全使用注释配置并需要配置用于向服务器发送soap请求的双向SSL连接。如何在我的Spring MVC Web服务应用程序中使用双向SSL连接,以便通过SSL将我的soap消息发送到服务器?

我可以指导您完成所有必需的步骤,但也有差距。 请查看我的答案,以便为您提供正确的配置链接

双向SSL是具有客户端证书身份validation的TLS连接 。 签署soap请求(证书用于在TLS中validation客户端一次(请参阅双向SSL澄清 )并且签署肥皂是在soap主体上进行数字签名并将其包含在soap标头中)并不相同

你需要很多东西(请检查)

  • 用于管理TLS连接的服务器。 你选择了tomcat。 没问题,但在我看来,使用反向代理放一个apache更简单

  • SSL证书,最好由可信实体发布。 如果没有,您可以生成自己的证书,但需要在后续步骤中进行额外配置

  • 用于配置客户端信任库的SSL证书(x509证书)的公钥

  • 要在TLS连接中进行身份validation的客户端证书

  • openssl软件以生成证书

  • 我还建议使用这个应用程序( http://portecle.sourceforge.net/)来修改JKS密钥库而不是地狱

配置服务器

1)生成SSL证书(server.crt和server.key)

如果你有,请转到2)。 如果没有, 请访问http://www.akadia.com/services/ssh_test_certificate.html

openssl genrsa -des3 -out server.key 1024 openssl req -new -key server.key -out server.csr cp server.key server.key.org openssl rsa -in server.key.org -out server.key openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt 

你将获得server.crt和server.key

2)转换为PKCS12(server.pfx)配置会更简单如果为您提供了证书,也会给您一个CACert。

 openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile CACert.crt 

3)生成客户端证书(client.p12) (摘自https://gist.github.com/mtigas/952344 )创建证书颁发机构root openssl genrsa -des3 -out ca.key 4096 openssl req -new -x509 -天365 -key ca.key -out ca.crt

  Create the Client Key and CSR openssl genrsa -des3 -out client.key 4096 openssl req -new -key client.key -out client.csr # self-signed openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt Convert Client Key to PKCS openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12 

4)配置服务器信任库(truststore.jks)

 Open portecle New KeyStore -> JKS Import trusted certificate. Import client.crt and ca.crt Save as truststore.jks 

5)使用客户端身份validation配置tomcat SSL

https://tomcat.apache.org/tomcat-7.0-doc/config/http.html#SSL_Support类似于Prashant Thorat的回答

  

配置客户端

1)创建客户端信任(client-truststore.jks)打开portecle,创建一个新的JKS并将服务器证书(server.crt)包含为可信任的(

2)创建客户端密钥库(client-keystore.jks)打开portecle,创建一个新的JKS并导入密钥/对。 使用client.p12或client.crt和client.key。 导入也是ca.crt

3)配置弹簧我从未做过WS弹簧,但是使用CXF。 它是相同的概念您不需要签署SOAP,您只需要与客户端身份validation的TLS连接,因此不需要SOAP配置

请遵循本教程https://secinto.wordpress.com/2013/01/21/spring-and-webservices-how-to-use-ssltls-client-authentication/

关键是

 private void setupTLSSpring() throws Exception { ProtocolSocketFactory authSSLProtocolSocketFactory = new AuthSSLProtocolSocketFactory(new URL( "file:%PATH_TO_KEYSTORE%/client-keystore.jks"), PASSWORD, new URL( "file:%PATH_TO_TRUSTSTORE%/client-truststore.jks"), PASSWORD); Protocol.registerProtocol("https", new Protocol("https", authSSLProtocolSocketFactory, 8410)); } 

EDITED

如果您使用Bank API,银行可能会为服务器提供受信任的SSL证书和用于身份validation的客户端证书¿它不是这样的吗? 在这种情况下忘记‘配置服务器’部分

在“configure client”步骤1中,从服务器SSL证书中提取公钥并导入到client-truststore.jks中。

如果某些步骤不适合您所需的配置,请详细说明

首先,您必须查看spring文档以了解有关Web服务的Spring安全性的基础知识: http : //docs.spring.io/spring-ws/site/reference/html/security.html 。 我找到了另一个教程(XML),它解释了如何测试您的Web服务安全性: https : //jeromebulanadi.wordpress.com/2010/02/25/basic-spring-web-service-tutorial-from-contract-to -安全/#server_security

然后,如果您在执行实施时遇到任何特定问题,请编辑您的问题。

我想分享一个full tutorialgithub project链接,它告诉我们spring的双向ssl连接。

完整的双向SSL教程链接:

你曾经想知道关于SSL的一切(但是我不敢问)

Github项目链接:

启动双向ssl示例

更新:

实际上,我没有与要求相同的代码。 但我得到了一些与SSL相关的链接。 我只是与你分享帮助。

  1. 使用双向SSL制作经过身份validation的Web服务标注
  2. 使用RestTemplate访问使用SSL配置的RESTful服务
  3. 带SSL的HttpClient

我认为您可以做的最好的事情是在服务前配置带有SSL的http服务器。 因此,您无需直接将服务公开给互联网,也无需在服务中配置SSL。 您可以在创建更多服务时重复使用它。

下面我列出了一个教程,用于配置带有SSL证书的Nginx和Apache,以及作为服务的反向代理。

SSL证书:

Nginx的
Nginx双向SSL教程
阿帕奇

反向代理:
Nginx的
阿帕奇