相关疑难解决方法(0)

Java 密钥库 - 兼容性 java 8 和 11

我需要使用 java 11 生成一个 java 密钥库,并且能够在 java 8 和 java 11 中使用它。我使用格式 PKCS12。由于某种原因,当我使用 java 11 中的 keytool 生成它时,java 8 中的 keytool 无法打开它。

使用 java 11 生成

(java 11)$ keytool -genkeypair -keyalg RSA -noprompt -alias key -dname "CN=hostname, OU=XX, O=XX, L=YY, S=CZ, C=CZ" -keystore file.p12 -storepass password -keypass password -deststoretype pkcs12
Run Code Online (Sandbox Code Playgroud)

对于 java 11,密钥库运行良好。但如果我尝试使用 java 8 读取它

(java 8)$ keytool -list -keystore file.p12 
keytool error: java.io.IOException: Invalid keystore format
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?我认为PKCS12是一种标准化格式,应该是通用的。但由于某种原因,它甚至在 java 版本之间也不起作用。

我能够通过使用 switch 将 keytool 切换到传统生成来解决这个问题-J-Dkeystore.pkcs12.legacy。

我想更改我的项目以在代码中生成密钥库。就像是:

KeyStore …
Run Code Online (Sandbox Code Playgroud)

java keystore

11
推荐指数
1
解决办法
1万
查看次数

从 OpenJDK16 读取使用 keytool 创建的 PKCS12 密钥库时 Java 8 中的 IOException

TL; 博士

keytool从 OpenJDK16 创建的 PKCS12 密钥库文件无法从 Java 8、9、10 和 11 中读取。这是错误吗?如何创建适用于 Java 8 的 PKCS12 密钥库?

语境

我构建了一个 Maven 项目,该项目生成一个可执行 JAR 文件,该文件必须在从版本 8 到版本 16 的任何 JRE 上运行。该 JAR 文件生成一个 HTTPS 服务器(使用com.sun.net.httpserver.HttpsServer)。

在构建期间,我使用keytool生成密钥对并将其存储在捆绑在 JAR 中的 PKCS12 密钥库中(实际上,我使用的是keytool-maven-plugin):

$ /path/to/jdk16/bin/keytool -genkeypair -keystore /tmp/keystore.p12 -storepass password -storetype PKCS12 -alias https -dname "CN=localhost, OU=My HTTP Server, O=Sentry Software, C=FR" -keypass password -validity 3650 -keyalg RSA -sigalg SHA256withRSA
Run Code Online (Sandbox Code Playgroud)

Java 代码使用这个自动生成的密钥库来启动 HTTPS 服务器:

// initialize the HTTPS …
Run Code Online (Sandbox Code Playgroud)

java ssl keytool java-16

6
推荐指数
1
解决办法
561
查看次数

java.lang.IllegalArgumentException:parseAlgParameters失败:ObjectIdentifier()--数据不是对象ID(标签= 48)

在我的一台 AWS EC2 服务器中,我部署了三项服务 [Auth、orders、Security]。我为三个服务配置了 SSL,三个服务的 SSL 是相同的,身份验证命令服务在进行一些调整后工作正常,但安全服务有“java.lang.IllegalArgumentException:parseAlgParameters failed:ObjectIdentifier() - 数据不是” t 对象 ID (tag = 48)' 问题。我的服务器有以下Java 版本: openjdk 版本“ 1.8.0_302 ” OpenJDK 运行时环境(版本 1.8.0_302-b08) OpenJDK 64 位服务器 VM(版本 25.302-b08,混合模式) 我从 Windows PC 部署了 jar 文件,对于我的 Windows PC,所有三个服务都工作正常。但这是我的 AWS Centos 服务器的问题。

最初,我使用 Openssl3 将 .crt 文件转换为 .p12,当时我的所有三个服务都存在上述问题。因此将我的 OpenSSL 降级到 1.1.1 版本。然后将我的 jar 构建到 AWS。这样“Auth”和“Order”服务就开始工作了。但我的安全服务仍然存在问题。下面是用于身份验证的 pom.xml。

    <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent> …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security ssl-certificate spring-boot

5
推荐指数
2
解决办法
1万
查看次数

引起原因:java.io.IOException:ObjectIdentifier()——数据不是对象ID(标签= 48)

在此输入图像描述

' server.ssl.key-store = src/main/resources/laitadmin.p12 server.ssl.key-alias= 1 server.ssl.keyStoreType= PKCS12'

'   at sun.security.util.ObjectIdentifier.<init>(ObjectIdentifier.java:257) ~[na:1.8.0_251]'
Run Code Online (Sandbox Code Playgroud)

java ssl tomcat spring-boot

3
推荐指数
1
解决办法
1万
查看次数