GVKun编程网logo

如何导入Java密钥库中的现有X.509证书和私钥以在SSL中使用?(java秘钥)

23

此处将为大家介绍关于如何导入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密钥库中的现有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 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 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设置

java – 密钥库中的多个证书,用于Mysql SSL客户端身份验证和JMX over SSL设置

我的 Java应用程序需要通过SSL客户端身份验证对Google云端的MysqL实例进行身份验证.其客户关键和证书由Google提供.我还需要在同一个应用程序上安装具有SSL证书的JMX代理,其证书由私有CA提供.

如何防止MysqL呈现JMX证书,反之亦然,以防在启动时将私有证书添加到提供给JVM的单个密钥库中

有没有其他方法来验证SSL证书与MysqL旁边放在’javax.net.ssl.keyStore’?如果没有,MysqL或JMX代理人是否喜欢其他名称的别名?

解决方法

您可以使用使用临时SSL证书的Cloud sql MySQL套接字工厂来验证Cloud sql(仅适用于第二代实例):

https://github.com/GoogleCloudPlatform/cloud-sql-mysql-socket-factory

java-找不到证书链,但是密钥库包含私钥

java-找不到证书链,但是密钥库包含私钥

我正在尝试对我的apk进行签名,因此我可以使用以下命令向我的应用发布更新:jarsigner ­-verbose -sigalg SHA1withRSA -­digestalg SHA1 ­-keystore my­release-key.keystore CordovaApp­release­unsigned.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-找不到证书链,但是密钥库包含私钥等相关知识,可以在本站进行查询。

本文标签: