我想用 Java 生成 PKCS12 密钥库。我知道我可以将 keytool 与类似的东西一起使用:
keytool -genkeypair -alias senderKeyPair -keyalg RSA -keysize 2048 \
-dname "CN=Baeldung" -validity 365 -storetype PKCS12 \
-keystore sender_keystore.p12 -storepass changeit
Run Code Online (Sandbox Code Playgroud)
但我需要在 Java 内部做这些事情。我已经搜索过是否可能,但没有找到任何相关信息。任何想法?
我非常感谢您提供的任何帮助。
我有一个运行一些实用命令的应用程序服务器,这些命令是用 C 语言编写的。我必须使用具有客户端身份验证的 Java SSL 套接字通过 Java 客户端程序连接到服务器。服务器端的密钥是使用以下命令创建的:
openssl req -new -text -out ser.req
openssl rsa -in privkey.pem -out ser.key
openssl req -x509 -in ser.req -text -key ser.key -out ser.crt
Run Code Online (Sandbox Code Playgroud)
我已获得服务器密钥和证书。我已将密钥和证书组合成 PKCS12 格式文件:
openssl pkcs12 -inkey ser.key -in ser.crt -export -out ser.pkcs12
然后使用 keytool 将生成的 PKCS12 文件加载到 JSSE 密钥库中:
keytool -importkeystore -srckeystore ser.pkcs12 -srcstoretype PKCS12 -destkeystore ser.keystore
但是当我尝试连接时,出现以下错误:
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alert.createSSLException(Alert.java:131)
at sun.security.ssl.TransportContext.fatal(TransportContext.java:324)
at sun.security.ssl.TransportContext.fatal(TransportContext.java:267)
at …Run Code Online (Sandbox Code Playgroud) 我部署了一个 Spring 微服务 docker。我使用 JaxWsProxyFactoryBean 调用外部服务器 (soap/wsdl),并且使用 http://externalServer 一切顺利:
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
jaxWsProxyFactoryBean.setAddress("http://externalServer");
...
Run Code Online (Sandbox Code Playgroud)
当我在 setAddress 中调用 https 时,问题就出现了。
我使用 keytool 在密钥库中注册了被调用服务器的密钥/证书,并将其保存到 /root/.keystore (标准),并从 pfx 导入它。当我尝试调用 https 时,出现此错误:
org.apache.cxf.transport.https.SSLUtils : Default key managers cannot be initialized: Password must not be null
Run Code Online (Sandbox Code Playgroud)
好的,我缺少密码。但是这个恶意密码放在哪里呢?在application.yml中?在系统属性中?[keystore中使用的密码是标准的(changeit)]
编辑
这是日志的快照:
DEBUG 1 --- [ XNIO-1 task-1] org.apache.cxf.transport.https.SSLUtils : The location of the key store has not been set via a system parameter or through configuration so the default value of /root/.keystore will be used. …Run Code Online (Sandbox Code Playgroud) 我按照步骤创建了Hash Key.
下载openssl
解压缩并复制bin文件夹中的所有文件,包括openssl.exe
将从Openssl的bin文件夹复制的所有文件粘贴到Jdk bin文件夹.
然后我在openssl.exe终端窗口上使用了以下命令
keytool -exportcert -alias androiddebugkey -keystore C:\ Users\Joelle.android\debug.keystore | openssl sha1 -binary | openssl enc -a -e
但它抛出以下错误
openssl error :'keytool is invalid command'
Run Code Online (Sandbox Code Playgroud)
请指导我......
感谢名单
我有一个Android应用程序,我正在使用谷歌地图.我使用调试密钥开发了这个,现在我需要使用发布证书,但我不知道怎么做,请帮忙.谢谢
我需要SHA1证书指纹来获取Google Map API密钥,但是当我输入时
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
Run Code Online (Sandbox Code Playgroud)
在终端中,它显示keytool可以在以下包中找到

即使终端显示此类消息,文件keytool已经存在/usr/lib/jvm/jdk1.8.0_25/bin.
它出什么问题了?
我使用64位的Ubuntu 14.04.
令人困惑的是,由 keytool 生成的密钥库包含使用以下命令的自签名证书:
keytool -genkey -keyalg RSA -keysize 1024 -keystore bob.keystore
Run Code Online (Sandbox Code Playgroud)
生成自签名证书没有意义,因为您需要受信任的 CA 来签署您的证书请求。如何生成非自签名密钥库?
[Storing c:\Users\USER_NAME\upload-keystore.jks] keytool error: java.io.FileNotFoundException: c:\Users\USER_NAME\upload-keystore.jks (The system cannot find the path specified) java.io.FileNotFoundException: c:\Users\USER_NAME\upload-keystore.jks (The system cannot find the path specified) at java.base/java.io.FileOutputStream.open0(Native Method) at java.base/java.io.FileOutputStream.open(FileOutputStream.java:293) at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235) at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:123) at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:1360) at java.base/sun.security.tools.keytool.Main.run(Main.java:415) at java.base/sun.security.tools.keytool.Main.main(Main.java:408)
Run Code Online (Sandbox Code Playgroud)