我有一个Java客户端试图使用自签名证书访问服务器。
当我试图发布到服务器,我得到以下错误:
无法找到请求目标的有效认证路径
在对这个问题做了一些研究之后,我做了以下工作。
保存我的服务器域名为根。cer文件。
在我的Glassfish服务器的JRE中,我运行了这个:
Keytool -import -alias example -keystore cacerts -file root.cer
为了检查证书是否成功添加到我的cacert,我这样做:
Keytool -list -v -keystore cacerts
我可以看到证书是存在的。
然后我重新启动Glassfish并重新尝试“post”。
我还是得到同样的错误。
我有一种感觉,这是因为我的Glassfish实际上没有读取我修改过的cacert文件,但可能是其他一些文件。
你们中有人遇到过这样的问题吗,可以帮我找到正确的方向吗?
在我的情况下,我得到错误连接到AWS Gov Postgres RDS。GOV RDS CA证书有一个单独的链接- https://s3.us-gov-west-1.amazonaws.com/rds-downloads/rds-combined-ca-us-gov-bundle.pem
将此pem certs添加到java的cacerts中。您可以使用下面的脚本。
——WINDOWDS步骤
使用VSCODE编辑器,安装openssl, keytool插件
在C:/rds-ca目录下创建目录
将“cacerts”文件和下面的脚本文件-“addCerts.sh”在目录“rd-ca”
运行vscode:
4.1 CD /c/rds-ca/ .
4.2。/ addCerts.sh
拷贝cacerts到${JAVA_HOME}/jre/lib/security目录下
脚本代码:
#!/usr/bin/env sh
OLDDIR="$PWD"
CACERTS_FILE=cacerts
cd /c/rds-ca
echo "Downloading RDS certificates..."
curl https://s3.us-gov-west-1.amazonaws.com/rds-downloads/rds-combined-ca-us-gov-bundle.pem > rds-combined-ca-bundle.pem
csplit -sk rds-combined-ca-bundle.pem "/-BEGIN CERTIFICATE-/" "{$(grep -c 'BEGIN CERTIFICATE' rds-combined-ca-bundle.pem | awk '{print $1 - 2}')}"
for CERT in xx*; do
# extract a human-readable alias from the cert
ALIAS=$(openssl x509 -noout -text -in $CERT |
perl -ne 'next unless /Subject:/; s/.*CN=//; print')
echo "importing $ALIAS"
keytool -import \
-keystore $CACERTS_FILE \
-storepass changeit -noprompt \
-alias "$ALIAS" -file $CERT
done
cd "$OLDDIR"
echo "$NEWDIR"
(转载自我的其他回复)
使用java软件发行版中的cli实用工具keytool导入(并信任!)所需的证书
示例:
从命令行更改目录到jre\bin
检查密钥库(在jre\bin目录中找到的文件)
Keytool -list -keystore ..\lib\security\cacerts . txt
密码为changeit
从需要的服务器下载并保存链中的所有证书。
添加证书(在需要删除文件..\lib\security\cacerts上的“只读”属性之前),运行:
keytool -alias REPLACE_TO_ANY_UNIQ_NAME -import -keystore.使用实例\lib\security\cacerts -file "r:\root.crt"
我偶然发现了这么一个简单的小窍门。
其他解决方案需要使用InstallCert.Java和JDK
来源:http://www.java-samples.com/showtutorial.php?tutorialid=210