我的java程序如何知道包含证书的密钥库在哪里?或者,我如何告诉我的java程序在哪里查找密钥库?
以某种方式指定密钥库后,如何指定用于向客户端验证服务器的证书?
我刚刚下载了Maven,并试图运行"Maven in Five Minutes"页面(http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html)上发现的简单命令.这是命令:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到SSL证书的错误,无法从https://repo.maven.apache.org/maven2的中央Maven存储库下载.错误是"SunCertPathBuilderException:无法找到请求目标的有效证书路径".
我坐在公司防火墙后面并正确配置了两者的代理设置http并https通过该settings.xml文件进行访问.我怀疑所有下载Maven并且第一次运行它的人都必须导入Maven存储库的SSL证书,所以问题必须在于代理.有人对这个有经验么?
这是完全调试模式(-X)中的堆栈跟踪:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Run Code Online (Sandbox Code Playgroud)
Apache Maven 3.2.3(33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T22:58:10 + 02:00)Maven home:C:\ Projects\maven\bin .. Java版本:1.7.0_45,供应商:Oracle Corporation Java home:C :\ Program Files\Java\jdk1.7.0_45\jre默认语言环境:it_IT,平台编码:Cp1252操作系统名称:"windows 7",版本:"6.1",arch:"amd64",系列:"windows"[DEBUG]使用连接器WagonRepositoryConnector优先级为0.0表示https://repo.maven.apache.org/maven2通过*****:8080表示用户名=*****,密码=***下载:https:// repo. maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom [警告]无法检索org.apache.maven.plugins的插件描述符: maven-clean-plugin:2.5:插件org.apache.maven.plugins:maven-clean-plugin:2.5或其中一个依赖项无法解析:无法读取org.apache.maven.plugins的工件描述符:maven- clean-plugin:jar:2.5 org.apache.maven.plugin.PluginResolutionException:插件org.apache.maven.pl ugins:maven-clean-plugin:2.5或其中一个依赖项无法解析:无法读取org.apache.maven.plugins的工件描述符:maven-clean-plugin:jar:2.5 org.apache.maven.plugin .internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:122)在org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor(DefaultMavenPluginManager.java:148)在org.apache.maven.plugin.DefaultBuildPluginManager.loadPlugin(DefaultBuildPluginManager.java :81)在org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:138)在org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:121)在org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve(DefaultPluginPrefixResolver.java:85)在org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix(MojoDescriptorCreator.java:260)在组织 位于org.apache.maven.lifecycle.internal的org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:103)中的.apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor(MojoDescriptorCreator.java:220) .DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:83)在org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:85)在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)在org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)org.apache.maven.cli.MavenCli.doMain(MavenCli.的java:214)在org.apache.maven.cli.MavenCli.main(MavenCli.java:158)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingM ethodAccessorImpl.java:43)在org.codehaus.plexus的org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)的java.lang.reflect.Method.invoke(Method.java:606) .classworlds.launcher.Launcher.launch(Launcher.java:229)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)引起:org.eclipse.aether.resolution.ArtifactDescriptorException:无法读取org.apache.maven.plugins的工件描述符:maven-clean-plugin:jar:2.5 atg.apache.maven. repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:349)位于org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor的org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:231) DefaultRepositorySystem.java:288)org.apache.maven.plugin.internal.DefaultPluginDep endenciesResolver.resolve(DefaultPluginDependenciesResolver.java:108)... 23更多引起:org.eclipse.aether.resolution.ArtifactResolutionException:无法传输工件org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central(https://repo.maven.apache.org/maven2):sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到要求的有效证书路径在org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:459)处org.eclipse.aether org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)靶. org.eclipse.aether.transfer:internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)在org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:334)...... 26多所致.ArtifactTransferExceptio n:无法传输工件org.apache.maven.plugins:maven-clean-plugin:pom:2.5 …
当你谷歌这个例外:java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty,会出现多个结果.然而,没有确定的解决方案,只有猜测.
当我尝试使用SSL打开连接时,问题出现了(至少在我的情况下).它在我的Windows机器上工作正常,但是当我将它部署到linux机器(安装了sun的jre)时,它会因上述异常而失败.
问题是JRE的默认信任库由于某种原因是空的(大小只有32字节,而在Windows上是80kb).
当我将我的jre/lib/security/cacerts文件从Windows 复制到linux时,它运行正常.
问题是 - 为什么linux jre有一个空的信任存储?
请注意,这种情况发生在使用AMI linux的Amazon EC2实例上,因此可能是由于一些亚马逊政策(我认为java已预先安装,但我不确定)
我在Ubuntu上全新安装了Jenkins 2.32.2.在实例上打开浏览器并转到标题为" 脱机"的页面,并显示消息"此Jenkins实例似乎处于脱机状态",并提供"配置代理"或"跳过插件安装"选项
由于我刚刚使用互联网连接进行安装,因此机器显然不会脱机.我也有一个以前的安装,完全相同的方式,这是有效的.我删除了以前的安装,因为Pipelines不起作用,Google告诉我这是因为JDK 9.所以我删除了所有JDK/JRE安装以及jenkins,只安装了新的JDK 8,安装了Jenkins,并且到了这里.
詹金斯过去曾在这个盒子上工作过,所以它认为它离线了?
更新:找到一个日志文件/ var/lib/jenkins/logs/tasks /下载metadata.log并以一条消息开头致命:连接被拒绝(拒绝连接) 我认为这表明互联网连接正常,但还有别的阻止它获取数据?
更新:根据其他研究,我在插件管理器中检查了更新站点.这被列为http://updates.jenkins-ci.org/update-center.json,并且从命令行中该文件的wget成功.所以绝对不是连接问题.使用http和https,jenkins都不兼容.
我们在使用cas的tomcat下的应用程序中得到以下异常.
java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空
当我谷歌搜索它时,我发现了一些猜测和解决方案,但没有人可以帮助我.
这是我们的tomcat server.xml文件的一部分:
<Connector SSLEnabled="true" clientAuth="false" keystoreFile="conf/.keystore" maxThreads="150" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLS"/>
Run Code Online (Sandbox Code Playgroud)
我们指向我们生成的密钥库.
枝,
我编写了一个连接到Salesforce并更新其中的值的java代码,当我从本地系统作为独立的Java应用程序运行它时,它运行良好,但我的主要目标是将其作为filenet BPM中的java组件工作流,所以当工作流进程到达这个java组件时,它会抛出一个错误作为标题
整个堆栈堆栈跟踪如下
com.sforce.ws.ConnectionException: Failed to send request to https://login.salesforce.com/services/Soap/c/24.0/0DF90000000PX8r
at com.sforce.ws.transport.SoapConnection.send(SoapConnection.java:129)
at com.sforce.soap.enterprise.EnterpriseConnection.login(EnterpriseConnection.java:1052)
at com.sforce.soap.enterprise.EnterpriseConnection.<init>(EnterpriseConnection.java:399)
at salesforceupdate.SalesForceUpdate.main(SalesForceUpdate.java:70)
at salesforceupdate.Callin.UpdateSL(Callin.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at filenet.vw.integrator.adaptors.java.VWJavaAdaptor.execute(VWJavaAdaptor.java:426)
at filenet.vw.integrator.base.VWAdaptorEx$AdaptorAction.run(VWAdaptorEx.java:120)
at java.security.AccessController.doPrivileged(AccessController.java:284)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:727)
at filenet.vw.integrator.base.VWAdaptorEx.run(VWAdaptorEx.java:360)
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at com.ibm.jsse2.n.a(n.java:42)
at com.ibm.jsse2.tc.a(tc.java:96)
at com.ibm.jsse2.tc.a(tc.java:340)
at com.ibm.jsse2.tc.a(tc.java:555)
at com.ibm.jsse2.tc.a(tc.java:510)
at com.ibm.jsse2.tc.startHandshake(tc.java:381)
at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:151)
at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:64)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1024) …Run Code Online (Sandbox Code Playgroud) 我正在寻找解析每天更新所述文件的XML文件 - 我遇到的唯一问题是他们使用自己的证书(https:// ..)并且我不能使用该特定URL,也不能是否有http:// ...链接可用.
URL url = new URL("https://...");
...
Document document = db.parse(url.openStream());
Run Code Online (Sandbox Code Playgroud)
此代码在运行我的测试时抛出以下异常:
javax.net.ssl.SSLException:java.lang.RuntimeException:意外错误:java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空
我已经看到了各种建议,涉及创建各种类来处理这种连接或个人服务器,以及将证书添加到密钥库,然后将该密钥库添加到Java项目,但我一直在无法做到这一点,我正在寻找一种稍微简单的方式让我去在线访问XML.
我正在尝试下载eclipse的kotlin插件。我可以连接到Eclipse电子市场,但是当我尝试下载它时,出现错误:
Unable to read repository at
https://dl.bintray.com/jetbrains/kotlin/eclipse-plugin/last/content.xml.
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)
我在防火墙后面,并且代理设置已配置。我从该网站下载了证书并将其添加到keytool中,但错误仍然相同。如何解决此错误或手动安装此插件?
不得不再问一次.有人认为这是一个重复的问题,已经回答并从列表中删除.
我正在使用maven(mvn)批处理命令与windows(而不是m2e与eclipse)运行干净安装或解决依赖关系.有时,当更改pom.xml时,有必要从我们的nexus服务器下载工件.这对我来说已经很久了.
但是现在连接到nexus服务器(https,服务器使用公司拥有的证书)失败了" java.security.InvalidAlgorithmParameterException:trustAnchors参数必须是非空的 "我知道,我更改了Java版本.但我很确定我维护cacerts密钥库的方式与之前版本相同.(在租用时,我比较了两个cacerts中的指纹;它们是相同的).
运行命令" mvn -s -Djavax.net.debug = all -Djava.net.ssl.trustStore ="C:/Programme/Java/jre1.8.0_102/lib/security/cacerts"-Djavax.net.ssl .trustStorePassword = changeit dependency:resolve ",ssl-trace说:
keyStore is :
keyStore type is : jks
keyStore provider is :
init keystore
init keymanager of type SunX509
trustStore is: No File Available, using empty keystore.
trustStore type is : jks
trustStore provider is :
init truststore
Run Code Online (Sandbox Code Playgroud)
即使在命令中指定密钥库的路径和密码,ssl跟踪中的答案也是找不到它.
我不知道我可能已经改变了什么来解决这个问题.我更改了Windows PATH-Statement,但这与前面描述的命令无关.任何提示都表示赞赏
我是Maven和Spring的新手.
该项目在我的本地测试环境中运行,但不在已部署的系统上运行.在已部署的系统上:我使用OpenSDK 10.0.1,Maven 3.5.2安装了全新的Ubuntu.我使用不同的防火墙并拥有不同的keyStore和trustStore.
Maven吐出:
组织的不可解析的父POM.
[%mything%].app:useraut:0.0.1-SNAPSHOT:无法传输工件org.springframework.boot:spring-boot-starter-parent:pom:1.5.9.RELEASE from/to central(https://repo.maven.apache .org/maven2):java.lang.RuntimeException:意外错误:java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空且'parent.relativePath'指向无本地POM @第14行,第10列 - > [帮助2]
pom snipet:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Run Code Online (Sandbox Code Playgroud)
(没有代理定义)
我似乎可以找到解决方案的想法:错误 - trustAnchors参数必须是非空但我不知道从哪里开始配置Spring,Maven或trustStore
我将首先介绍一下我在Java中设置密钥库等方面的知识并不多
我正在尝试调用SOAP Web服务,我得到了wsdl,生成了代码等等.在我部署它并尝试触发WS调用之前,一切似乎都没问题.
这是我的设置:
当我运行代码时,我得到以下异常:
Caused by: javax.net.ssl.SSLHandshakeException: SSLHandshakeException invoking https://tallyservices-qa.olson.com/tallyDemo2WebServices/tallyDemo2/sms: Received fatal alert: certificate_unknown
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1336)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1320)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:622)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
... 27 more
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1837)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1019)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1203)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1230)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1214)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1031)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.setupWrappedStream(URLConnectionHTTPConduit.java:170)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1280)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1231)
at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.onFirstWrite(URLConnectionHTTPConduit.java:183) …Run Code Online (Sandbox Code Playgroud) 我正在遵循sbt官方安装说明。
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
Executing: /tmp/apt-key-gpghome.uRI0yiusG0/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
gpg: keyserver receive failed: Invalid argument
Run Code Online (Sandbox Code Playgroud)
编辑:
我试过挖掘执行的gpg.1.sh脚本。这是对gpg的最终调用。
$ sudo cat /tmp/apt-key-gpghome.IRnmlx6hfX/gpg.0.sh
#!/bin/sh
exec 'gpg' --ignore-time-conflict --no-options --no-default-keyring \
--homedir '/tmp/apt-key-gpghome.IRnmlx6hfX' --no-auto-check-trustdb --trust-model always "$@"
Run Code Online (Sandbox Code Playgroud)
编辑2:
我试图直接从密钥服务器中查询密钥,但是没有运气。参见http://keyserver.ubuntu.com/pks/lookup?search=2EE0EA64E40A89B84B2DF73499E82A75642AC823&op=vindex。钥匙可能丢失了吗?
编辑3:
我在2月24日再次尝试,现在可以使用了!