此处将为大家介绍关于如何导入Java密钥库中的现有X.509证书和私钥以在SSL中使用?的详细内容,并且为您解答有关java秘钥的相关问题,此外,我们还将为您介绍关于Javahttpcleint使用X
此处将为大家介绍关于如何导入Java密钥库中的现有X.509证书和私钥以在SSL中使用?的详细内容,并且为您解答有关java秘钥的相关问题,此外,我们还将为您介绍关于Java httpcleint使用X.509证书发送SSL请求、Java SSL和证书密钥库、java – 密钥库中的多个证书,用于Mysql SSL客户端身份验证和JMX over SSL设置、java-找不到证书链,但是密钥库包含私钥的有用信息。
本文目录一览:- 如何导入Java密钥库中的现有X.509证书和私钥以在SSL中使用?(java秘钥)
- Java httpcleint使用X.509证书发送SSL请求
- Java SSL和证书密钥库
- java – 密钥库中的多个证书,用于Mysql SSL客户端身份验证和JMX over SSL设置
- java-找不到证书链,但是密钥库包含私钥
如何导入Java密钥库中的现有X.509证书和私钥以在SSL中使用?(java秘钥)
我在ActiveMQ
配置中有这个:
<sslContext> <sslContext keyStore="file:/home/alex/work/amq/broker.ks" keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts" trustStorePassword="password"/></sslContext>
我有一对X.509证书和一个密钥文件。
如何导入这两个以便在SSL和SSL + stomp
连接器中使用它们?我可以用google搜索的所有示例始终都会自己生成密钥,但是我已经有了密钥。
我试过了
keytool -import -keystore ./broker.ks -file mycert.crt
但这只会导入证书而不是密钥文件,并导致
2019-05-25 13:16:24,270 [localhost:61612] ERROR TransportConnector - Could not accept connection : No available certificate or key corresponds to the SSL cipher suites which are enabled.
我已经尝试连接证书和密钥,但是得到了相同的结果。
如何导入密钥?
答案1
小编典典我使用了以下两个步骤,这些步骤是在其他答案中链接的评论/帖子中找到的:
第一步: 将x.509证书和密钥转换为pkcs12文件
openssl pkcs12 -export -in server.crt -inkey server.key \ -out server.p12 -name [some-alias] \ -CAfile ca.crt -caname root
注意:请确保在pkcs12文件上输入了密码-否则,当你尝试导入它时,将得到一个空指针异常。(以防其他任何人头痛)。(感谢jocull!)
注意2:你可能想添加-chain
选项以保留完整的证书链。(感谢Mafuba)
第二步:将pkcs12文件转换为Java密钥库
keytool -importkeystore \ -deststorepass [changeit] -destkeypass [changeit] -destkeystore server.keystore \ -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass some-password \ -alias [some-alias]
已完成
可选步骤零:创建自签名证书
openssl genrsa -out server.key 2048openssl req -new -out server.csr -key server.keyopenssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Java httpcleint使用X.509证书发送SSL请求
首先,请发布完整的异常/堆栈跟踪。
然后我要说的是,您不要“导入(或)使用”系统或Java的信任库。
class TrustedCAsByOperatingSystem extends AbstractCaLoader implements Supplier<Collection<X509Certificate>> {
protected Logger log = LoggerFactory.getLogger(this.getClass());
private static String[] linuxTrustStoreLocation = {"/etc/pki/java/cacerts"};
@Override
public Collection<X509Certificate> get() {
final Collection<X509Certificate> retval = new ArrayList<>();
this.log.trace("Operating System " + OsUtils.runningOS + " determined.");
try {
final TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
switch (OsUtils.runningOS) {
case WIN:
try {
this.log.info("Trying to load Trusted CAs from Windows Truststore.");
final KeyStore ks = KeyStore.getInstance("Windows-ROOT");
ks.load(null); // You don't need the KeyStore instance to come from a file.
tmf.init(ks);
retval.addAll(this.getTrustedCAs(tmf));
} catch (final Exception e) {
this.log.warn("Error while loading Trusted CAs from Windows Truststore.",e);
}
case UNIX: {
try {
FileInputStream myKeys = null;
for (final String location : TrustedCAsByOperatingSystem.linuxTrustStoreLocation)
try {
myKeys = FileUtils.openInputStream(new File(location));
this.log.info("Trying to load Trusted CAs from Linux Truststore [" + location + "].");
} catch (final Exception e) {
}
if (myKeys != null) {
final KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(myKeys,"changeit".toCharArray());
myKeys.close();
tmf.init(ks);
retval.addAll(this.getTrustedCAs(tmf));
}
} catch (final Exception e) {
this.log.warn("Error while loading Trusted CAs from Linux Truststore.",e);
}
}
default:
break;
}
} catch (final Exception e) {
this.log.warn("Error while loading Trusted CAs.",e);
}
return this.interceptCa(retval,"OS:" + OsUtils.runningOS);
}
}
Java SSL和证书密钥库
我的Java程序如何知道包含证书的密钥库在哪里?或者,如何告诉我的Java程序在哪里寻找密钥库?
在以某种方式指定了密钥库之后,如何指定用于对服务器进行身份验证的证书?
答案1
小编典典System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
答案2
小编典典SSL属性是通过系统属性在JVM级别设置的。这意味着你可以在运行程序时设置它们(java -D ....),也可以通过执行System.setProperty在代码中进行设置。
你必须设置的特定键如下:
javax.net.ssl.keyStore
-包含应用程序进程自己的证书和私钥的Java密钥库文件的位置。在Windows上,指定的路径名必须使用正斜杠/代替反斜杠。
javax.net.ssl.keyStorePassword
-从javax.net.ssl.keyStore指定的密钥库文件访问私钥的密码。此密码使用了两次:解锁密钥库文件(存储密码),以及解密存储在密钥库中的私钥(密钥密码)。
javax.net.ssl.trustStore
-Java密钥库文件的位置,该文件包含此应用程序进程信任的CA证书的集合(信任库)。在Windows上,指定的路径名必须使用正斜杠/
代替反斜杠\
。
如果未使用此属性指定信任存储位置,则SunJSSE实现将在以下位置(按顺序)搜索并使用密钥存储文件:
- $JAVA_HOME/lib/security/jssecacerts
- $JAVA_HOME/lib/security/cacerts
javax.net.ssl.trustStorePassword- 用于解锁由所指定的密钥库文件(存储密码)的密码 javax.net.ssl.trustStore
。
javax.net.ssl.trustStoreType-
(可选)对于Java密钥库文件格式,此属性的值为jks(或JKS)。通常不指定此属性,因为其默认值已经是jks。
javax.net.debug-要打开SSL / TLS层的日志记录,请将此属性设置为ssl。
java – 密钥库中的多个证书,用于Mysql SSL客户端身份验证和JMX over SSL设置
如何防止MysqL呈现JMX证书,反之亦然,以防在启动时将私有证书添加到提供给JVM的单个密钥库中
有没有其他方法来验证SSL证书与MysqL旁边放在’javax.net.ssl.keyStore’?如果没有,MysqL或JMX代理人是否喜欢其他名称的别名?
解决方法
https://github.com/GoogleCloudPlatform/cloud-sql-mysql-socket-factory
java-找不到证书链,但是密钥库包含私钥
我正在尝试对我的apk进行签名,因此我可以使用以下命令向我的应用发布更新:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore myrelease-key.keystore CordovaAppreleaseunsigned.apk alias_name但出现此错误:
jarsigner: Certificate chain not found for: ¡sigalg. ¡sigalg must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.
我刚搬到一台新计算机,所以将我的.keystore文件复制到了它.当我执行keytool -list -v时,它似乎包含私钥,所以我不明白这是怎么回事.是否缺少公钥?
解决方法:
显然,这是一个编码问题.该命令包含的字符看上去类似于减号(ASCII代码0x2D),但实际上是许多破折号或连字符(http://en.wikipedia.org/wiki/Dash)之一.
由于字符代码错误,jarsigner不能将第一个参数“ -verbose”识别为jar文件的名称,而不能将其作为选项,而将“ -sigalg”识别为别名:
Usage: jarsigner [options] jar-file alias
这就解释了为什么错误消息中的别名是“¡sigalg”,而不是命令中的实际别名,并且为什么在开头包含一个反向的感叹号(该字符在另一个字符集中曾经是“-”).
今天关于如何导入Java密钥库中的现有X.509证书和私钥以在SSL中使用?和java秘钥的分享就到这里,希望大家有所收获,若想了解更多关于Java httpcleint使用X.509证书发送SSL请求、Java SSL和证书密钥库、java – 密钥库中的多个证书,用于Mysql SSL客户端身份验证和JMX over SSL设置、java-找不到证书链,但是密钥库包含私钥等相关知识,可以在本站进行查询。
本文标签: