我想学习一些关于javaagents的东西,但研究并不容易.大多数结果指的是JADE.我知道java代理可能意味着两件事:
我在这里找到了类似的问题,但不幸的是它也提到了版本1.
我设法正确配置基于CXF的客户端,以便为运行Web服务的服务器找到正确的SSL证书:
<http:conduit name="https://myserver/myws/register/soap?wsdl:{http://glob.reg.com/myws}.http-conduit">
<http:tlsClientParameters>
<sec:keyManagers keyPassword="changeit">
<sec:keyStore type="JKS" password="changeit"
file="C:\Program Files (x86)\Java\jdk1.6.0_45\jre\lib\security\cacerts"/>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore type="JKS" password="changeit"
file="C:\Program Files (x86)\Java\jdk1.6.0_45\jre\lib\security\cacerts"/>
</sec:trustManagers>
<sec:cipherSuitesFilter>
<!-- these filters ensure that a ciphersuite with
export-suitable or null encryption is used,
but exclude anonymous Diffie-Hellman key change as
this is vulnerable to man-in-the-middle attacks -->
<sec:include>.*_EXPORT_.*</sec:include>
<sec:include>.*_EXPORT1024_.*</sec:include>
<sec:include>.*_WITH_DES_.*</sec:include>
<sec:include>.*_WITH_AES_.*</sec:include>
<sec:include>.*_WITH_NULL_.*</sec:include>
<sec:exclude>.*_DH_anon_.*</sec:exclude>
</sec:cipherSuitesFilter>
</http:tlsClientParameters>
<http:authorization>
<sec:UserName>Betty</sec:UserName>
<sec:Password>password</sec:Password>
</http:authorization>
<http:client AutoRedirect="true" Connection="Keep-Alive"/>
</http:conduit>
Run Code Online (Sandbox Code Playgroud)
但是......因为证书是针对与我服务器的机器不同的子域名(映射到相同的IP地址),我收到以下错误:
Caused by: java.io.IOException: The https URL hostname does not match the Common Name …Run Code Online (Sandbox Code Playgroud) 我正在尝试调用REST API,但是我得到以下异常(最后完成StackTrace):
"javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"
Run Code Online (Sandbox Code Playgroud)
我向API提供商询问了这个问题,并说你正在使用的SSL库有问题.
你会如何解决这个问题?使用相同的代码(下面)我确实调用了NIMBLE API REST而没有任何问题,但在这种情况下它不起作用.然后,我没有任何文件证书(.cer).
我需要停用SSL验证,因为安全方法是我已经拥有的API KEY.
有什么建议?
非常感谢你!
====控制台:====
POST https://api.nexalogy.com/project/create?api_key=XXXXXXXXXXXXXXXXXXXX
HTTP Header:"Content-Type" "application/json"
HTTP Body:[{"name":"project1","lang":"en","type":"twitter"}]
api_key:XXXXXXXXXXXXXXXXXXXX
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Run Code Online (Sandbox Code Playgroud)
我也试过以下表格,例外是一样的:
POST https://api.nexalogy.com/project/create
HTTP Header:"Content-Type" "application/json"
HTTP Header:"api_key" "XXXXXXXXXXXXXXXXXXXX"
HTTP Body:[{"name":"project1","lang":"en","type":"twitter"}]
api_key:XXXXXXXXXXXXXXXXXXXX
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Run Code Online (Sandbox Code Playgroud)
====代码:==== …
我在客户端有一些Akka http配置问题.我正在尝试连接到不提供的服务器: - 公共签名证书 - 与主机名相对应的证书我没有关注此nginx,因此我无法更改服务器端配置.我只能改变客户端.
在对配置SSL进行了大量调查之后,我发现我需要在两个不同的级别在application.conf中配置SSL选项:
akka.ssl-config.ssl.loose.acceptAnyCertificate=true
akka.ssl-config.loose.disableHostnameVerification = true
Run Code Online (Sandbox Code Playgroud)
和
ssl-config.loose.acceptAnyCertificate=true
ssl-config.loose.disableHostnameVerification = true
Run Code Online (Sandbox Code Playgroud)
我检查过配置很好用
log-config-on-start = "on"
Run Code Online (Sandbox Code Playgroud)
问题是我仍然在akka调试级别得到错误(不是很清楚)
[ingestionApiClient-akka.actor.default-dispatcher-13] [akka://ingestionApiClient/user/StreamSupervisor-0/flow-216-1-unknown-operation] closing output
Run Code Online (Sandbox Code Playgroud)
看看wireshark我发现这是证书验证的问题
TLSv1 Record Layer: Alert (Level: Fatal, Description: Certificate Unknown)
Run Code Online (Sandbox Code Playgroud)
我想JVM配置是我所做的全部,所以我也尝试按照这种方法修改JVM SSL配置: Java SSL:如何禁用主机名验证
配置SSLContext并将其传递给akka http没问题因为我可以设置默认的HttpsContext
val sc = SSLContext.getInstance("TLS")
*...configuration...*
val customContext =HttpsContext(sc, sslParameters = Some(params))
Http().setDefaultClientHttpsContext(customHttpsContext)
Run Code Online (Sandbox Code Playgroud)
但无论如何我都找不到配置默认主机名验证程序.Http类没有任何方法Http().setDefaultHostnameVerifier
这是我如何连接到服务器
val dataIngestFlow = Http().outgoingConnectionTls(config.httpEndpointHost,config.httpEndpointPort)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?非常感谢你的帮助
我有一些Java应用程序抱怨不同的SSL问题,如自签名证书或不受信任的证书.
由于我没有这些应用程序的代码并且获得良好的证书太难了,我正在寻找一种可以让我强制连接的解决方案.
到目前为止,我尝试过这些,但似乎还不够:
-Dcom.sun.net.ssl.checkRevocation=false
-Djava.security.debug=certpath
Run Code Online (Sandbox Code Playgroud)
我仍然看到:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetjavax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target我正在编写一个系统,必须将一个多部分发布到服务器(一个名为ARX的第三方程序,当前在开发期间在localhost上运行),该服务器具有自签名证书.
我试图找到它的证书,但只能找到三个不同的jks文件; server.jks,servertrust.jks和serverca.jks.
我试图使用System.setProperty("javax.net.ssl.trustStore", "Program Files\\<path>\\jksfile")每个jks文件.然而; 当我这样做时,我收到以下错误:
证书中的主机名不匹配:<localhost>!= <9200416 arx sa cert>.
我在stackoverflow上浏览了大量类似的问题,试图了解如何解决这个问题,但我无法解决我的问题.
有什么建议?非常感谢所有帮助.