如何在 Spring WS 中配置双向 SSL 连接,而不使用 Spring boot 和使用单独的 Apache tomcat 服务器?

2024-04-30

我需要以双向 SSL 连接安全机制向服务器发送 Soap 请求消息,并处理来自服务器的 Soap 响应。我正在使用 Spring MVC 和 Spring ws,后者完全使用注释进行配置,并且需要配置两种方式 SSL 连接以将肥皂请求发送到服务器。如何在我的 Spring MVC Web 服务应用程序中按顺序配置两种方式 SSL 连接通过 SSL 将我的肥皂消息发送到服务器?


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

双向 SSL 是带有客户端证书身份验证的 TLS 连接。它与签署肥皂请求不同(证书用于在 TLS 中对客户端进行身份验证一次(请参阅双向 SSL 说明 https://stackoverflow.com/questions/10725572/two-way-ssl-clarification),并签署肥皂是在肥皂主体上进行数字签名并将其包含在肥皂头中)

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

  • 管理 TLS 连接的服务器。您已选择 tomcat。没问题,但我认为将 apache 与反向代理放在一起更简单

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

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

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

  • openssl 软件用于生成证书

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

配置服务器

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

如果有,请转到2)。如果没有,请遵循http://www.akadia.com/services/ssh_test_certificate.html 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 https://gist.github.com/mtigas/952344) 创建证书颁发机构根 openssl genrsa -des3 -out ca.key 4096 openssl req -new -x509 -days 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)使用客户端身份验证配置tomcat SSL

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

<Connector
    port="443"
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    connectionTimeout="20000"
    redirectPort="8443"
    scheme="https" 
    secure="true" 
    SSLEnabled="true"
    sslProtocol="TLS"
    keystoreFile="server.pfx"
    keystorePass="thepassword" 
    keystoreType="PKCS12"
    truststoreFile="truststore.jks"
    truststorePass="thepassword"
    truststoreType="JKS"
    clientAuth="true">

配置客户端

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

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

3)配置弹簧我从来没有做过WS spring,但是用过CXF。这是同一个概念 您不需要签署 SOAP,只需要带有客户端身份验证的 TLS 连接,因此无需进行肥皂配置

按照本教程操作https://secinto.wordpress.com/2013/01/21/spring-and-webservices-how-to-use-ssltls-client-authentication/ 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

如果你使用银行API,可能银行会向服务器提供受信任的SSL证书和客户端证书进行身份验证¿不是这样的吗? 在这种情况下忘记'配置服务器' section

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring WS 中配置双向 SSL 连接,而不使用 Spring boot 和使用单独的 Apache tomcat 服务器? 的相关文章

  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 来自十六进制代码的 Apache POI XSSFColor

    我想将单元格的前景色设置为十六进制代码中的给定颜色 例如 当我尝试将其设置为红色时 style setFillForegroundColor new XSSFColor Color decode FF0000 getIndexed 无论我在
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • 如何在 Spring 属性中进行算术运算?

  • Java实现累加器类,提供Collector

    A Collector具有三种通用类型 public interface Collector
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • 如何在 Java 中创建接受多个值的单个注释

    我有一个名为 Retention RetentionPolicy SOURCE Target ElementType METHOD public interface JIRA The Key Bug number JIRA referenc
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • 在 Google App-Engine JAVA 中将文本转换为字符串,反之亦然

    如何从字符串转换为文本 java lang String to com google appengine api datastore Text 反之亦然 Check Javadoc http code google com appengin
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数

随机推荐

  • 使用 JPA2/Hibernate 保留 java.time.Instant (JDK8)

    JPA 和 Hibernate 目前都不支持 JDK8 中 JSR 310 带来的新日期 时间类 JPAticket https java net jira browse JPA SPEC 63 休眠ticket https hiberna
  • 在 Blazor 中显示计时器

    我正在尝试在服务器端 Blazor 应用程序中显示倒计时器 我的代码同时使用 F 和 C 语言 该代码在某种程度上可以工作 但计时器永远不会按预期停止 并且计时器显示偶尔不会呈现所有数字 这是我第一次尝试 Blazor 服务器端应用程序 我
  • 具有 SSL 客户端证书的 iPhone 应用程序

    我正在构建一个 iPhone 应用程序 需要使用客户端证书通过 https 访问 Web 服务 如果我将客户端证书 pkcs12 格式 放入应用程序包中 我就可以将其加载到应用程序中并进行 https 调用 很大程度上要感谢 stackov
  • Security.h 中结构的 macOS 文档

    我正在尝试使用Security h通过 Java 和 JNA 的 macOS 框架 这意味着我需要将某些结构重建为 Java 类 问题是 当我查看文档中的结构时 this one https developer apple com refe
  • 如何将温莎城堡与 ASP.Net Web 表单一起使用?

    我正在尝试将 Windsor 的依赖注入连接到标准的 asp net Web 表单 我想我已经使用 HttpModule 和 CustomAttribute 代码如下所示 实现了这一点 尽管该解决方案似乎有点笨拙 并且想知道 Windsor
  • 按广度优先顺序列出目录所有内容导致效率低下

    我编写了一个 Haskell 模块来按广度优先顺序列出目录的所有内容 下面是源代码 module DirElements dirElem where import System Directory getDirectoryContents
  • Sinon.js 结合 CalledWith 次数

    我知道与sinon js https sinonjs org您可以测试间谍是否被呼叫一定次数 sinon assert calledTwice mySpy someMethod 您可以测试是否使用某些参数调用了间谍 sinon assert
  • 像 Java 一样覆盖 Objective-C 类中的方法

    我经常使用此语句来扩展类 而不需要编写整个单独的文件 假设 ClassFromFramework 是库中包含的框架的一部分的类 public ClassFromFramework public String myMethod operati
  • 使用特定区域设置启动 Google Chrome(使用命令行参数)

    如何使用命令行参数以特定区域设置启动 Google Chrome 根据http peter sh experiments chromium command line switches http peter sh experiments ch
  • MIME 类型/内容类型,用于在 IE 和 Firefox 中使用 Excel 打开 CSV 文件

    我在 Excel 中识别并打开 CSV 输出时遇到问题 在我的 Web 应用程序中 我有一个 java servlet 它将搜索结果返回给用户 搜索结果由 Apache Solr 服务器提供 GUI 前端有一个选项 允许用户请求 CSV 格
  • 生成唯一随机数的智能方法

    我想生成 00000001 到 99999999 范围内的唯一随机数序列 所以第一个可能是 00001010 第二个可能是 40002928 等等 最简单的方法是生成一个随机数并将其存储在数据库中 下次再执行一次并检查数据库中该数字是否已存
  • 使用概率选择数组值

    我还有一个作业要做 那就是 从黄色 蓝色和红色中随机选择一种颜色 概率为 黄色 3 7 蓝色 1 7 红色 3 7 我知道我可以通过使用类似的方法来解决这个问题 黄黄黄蓝红红红 但我认为这在编程上不是很好 因为当我碰巧发生这种情况时 我将不
  • C++ 模板类问题中的类型条件

    使用海湾合作委员会4 2 我有这个条件类型的元模板 template
  • Phong 着色问题

    我正在根据以下内容编写着色器冯模型 http en wikipedia org wiki Phong reflection model 我正在尝试实现这个方程 其中 n 是法线 l 是光线方向 v 是相机方向 r 是光反射 维基百科文章中更
  • facebook 发送 API 错误代码:100 API 错误描述:无效参数错误消息:“链接”无效

    我正在使用 facebook post GRAPH UI 来发布私人消息 并链接到我在 facebook 中的应用程序 早些时候它工作正常 但从最近两天开始 对话框开始抛出错误 发生错误 请稍后再试 API错误代码 100API错误描述 无
  • 为什么 typeof 函数在 C 中不起作用

    我使用GCC编译器 版本9 2 0 我想在 C 中使用 typeof 函数 但它会引发错误 错误 typeof 之前的预期表达式 如果您需要更多信息 请询问我 int a 5 double b the expected result is
  • Angular 2 材料垫片尺寸

    我有下面的代码
  • 如何使用 .NET 压缩目录?

    我有一个包含多个文件的目录 我想将此文件夹压缩为 zip 或 tar gz 文件 我怎样才能用 C 完成他的工作 您可以使用DotNetZip 库 http www codeplex com DotNetZip 它有相当丰富和有用的功能 E
  • 覆盖 Chrome 扩展页面 CSS

    我正在尝试使用 Chrome 扩展程序页面上的时尚扩展程序 但由于某种原因它不起作用 我试图用谷歌搜索这个 但我只得到关于使用扩展覆盖 CSS 的答案 而不是覆盖 Chrome 扩展页面 有什么想法为什么它不起作用吗 或者我怎样才能强迫它
  • 如何在 Spring WS 中配置双向 SSL 连接,而不使用 Spring boot 和使用单独的 Apache tomcat 服务器?

    我需要以双向 SSL 连接安全机制向服务器发送 Soap 请求消息 并处理来自服务器的 Soap 响应 我正在使用 Spring MVC 和 Spring ws 后者完全使用注释进行配置 并且需要配置两种方式 SSL 连接以将肥皂请求发送到