我需要以双向 SSL 连接安全机制向服务器发送 soap 请求消息,还需要处理来自服务器的 Soap 响应。我正在使用 Spring MVC 以及完全使用配置的 Spring ws注释并需要以两种方式 SSL 连接进行配置,以便将 soap 请求发送到服务器。如何在我的 Spring MVC Web 服务应用程序中使用两种方式的 SSL 连接,以便通过 SSL 将我的 soap 消息发送到服务器?。
最佳答案
我可以指导您完成所有必需的步骤,但仍有不足之处。请查看我的回答,以便我可以为您提供正确的配置链接
双向 SSL 是一种带有客户端证书身份验证的 TLS 连接。它与签署 soap 请求不同(证书仅用于在 TLS 中对客户端进行身份验证(请参阅 Two-way SSL clarification ),并且签署 soap 是在 soap 主体上进行数字签名并将其包含在 soap header 中)
你需要很多东西(请勾选)
管理 TLS 连接的服务器。您已选择 tomcat。没问题,但我认为将 apache 与反向代理放在一起更简单
SSL 证书,最好由可信实体颁发。如果没有,您可以生成自己的证书,但需要在后续步骤中进行额外配置
用于配置客户端信任库的 SSL 证书(x509 证书)的公钥
要在 TLS 连接中进行身份验证的客户端证书
openssl 软件以生成证书
我还建议使用此应用程序(http://portecle.sourceforge.net/)to 修改 JKS keystore 而不是 hell
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 ) 创建证书颁发机构根 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 类似于 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) 创建客户端 keystore (client-keystore.jks) 打开 portecle,创建一个新的 JKS 并导入一个 key /对。使用 client.p12 或 client.crt 和 client.key。还导入 ca.crt
3) 配置 Spring 我从来没有做过 WS spring,但是用过 CXF。是同一个概念 您不需要签署 SOAP,您只需要与客户端身份验证的 TLS 连接,因此不需要 soap 配置
关键是
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));
}
如果您使用银行 API,可能银行会向服务器提供受信任的 SSL 证书和用于身份验证的客户端证书,不就是这样吗? 在这种情况下,请忘记“配置服务器”部分
在“配置客户端”的第 1 步中,从服务器 SSL 证书中提取公钥并导入到 client-truststore.jks 中。
如果某些步骤不适合您所需的配置,请详细说明
关于java - 如何在不使用 Spring 引导和使用单独的 Apache tomcat 服务器的情况下在 Spring WS 中配置双向 SSL 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37248064/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..