gpt4 book ai didi

java - 如何仅使用私钥文件创建 java keystore ?

转载 作者:行者123 更新时间:2023-12-02 03:06:53 31 4
gpt4 key购买 nike

我只有一个私钥作为 .key 文件,没有其他 .crt 或 ca 文件。我需要用它创建一个 java keystore 。如何转换?

到目前为止我尝试了什么:
我将我的 .key 文件重命名为 .pem。
我使用 openssl 在 .pem 之外创建了一个 .p12 文件。

最后,我使用此命令创建 java keystore :

keytool -importkeystore -srckeystore [MY_FILE.p12] -srcstoretype pkcs12
-srcalias [ALIAS_SRC] -destkeystore [MY_KEYSTORE.jks]
-deststoretype jks -deststorepass [PASSWORD_JKS] -destalias [ALIAS_DEST]

我被要求提供密码,我输入后出现错误:

PEM_read_bio:no start line: ...... Expecting: TRUSTED CERTIFICATE

我已经检查过是否缺少空格,并且文件以“-----”开头并以它结尾。

有没有人知道如何做到这一点?

最佳答案

您没有显示您使用的 openssl 命令,但这可能是错误的,因为您引用的错误来自 openssl 而不是 keytool,因此您的 keytool 命令可能无法工作.

但是,您的目标是不明智的。 Java KeyStore API 旨在存储私钥及其证书(或链),而 keytool 和大多数其他程序都无法正常工作或根本无法正常工作没有证书的私钥。在 Java 中通常的做法——在 OpenSSL 中也是如此——当您没有私钥的真实证书时,通常的做法是创建一个“虚拟”自签名证书;这不像真正的证书那样扩展信任,但它填补了证书形状的漏洞并允许程序至少在需要有效信任的情况下工作。

有两种方法可以做到这一点。 OpenSSL 更容易,但不是编程,因此不是真正的主题:

openssl req -new -x509 -inkey privkey.pem [-days N] [-subj name] -out dummy.pem
# -subj name has the form /attr=value/attr=value/...
# where commonly used attrs are C (Country), ST (State/Province),
# L (Locality), O (Organization), OU (Org Unit), CN (CommonName).
# if you omit -subj name you will be prompted for these (assuming normal config)
# -days defaults to 30
# if you modify the default config file or create and specify your own
# you can configure a variety of X.509 extensions, but for a dummy cert
# this is only rarely helpful, depending how you (will) use it

openssl pkcs12 -export -in dummy.pem -inkey privkey.pem -out keystore.p12 [-name alias]

# Java can use the PKCS12, but if you really want JKS for some reason
keytool -importkeystore -srckeystore keystore.p12 -destkeystore keystore.jks -deststoretype JKS \
[-srcstorepass p] [-deststorepass p] [-srcalias x [-destalias y]]
# most j8 can read PKCS12 without specifying it (due to a compatibility setting)
# and all j9 up autodetect the source type;
# j8 defaults dest type to JKS but j9 up do not

或者,您可以使用 Java 对此进行编程。 OOTB Java 不直接处理 key 的 PEM 格式,更重要的是,它只处理 OpenSSL 使用的八种格式中的一种——您小心翼翼地避免告诉我们您拥有哪种格式。 OOTB Java 也没有创​​建证书的记录方式;有keytool用的内部类,但是j8以后越来越难用内部类了。这两个都是通过BouncyCastle解决的(bcpkix+bcprov) 支持 OpenSSL PEM key 和生成 X.509 证书等。

要阅读 OpenSSL 的“传统”格式未加密私钥文件,请参阅
Read RSA private key of format PKCS1 in JAVA
How to Load RSA Private Key From File
Getting RSA private key from PEM BASE64 Encoded private key file

或传统加密
Get a PrivateKey from a RSA .pem file
Decrypting an OpenSSL PEM Encoded RSA private key with Java?

对于PKCS8加密
Reading PKCS8 in PEM format: Cannot find provider
Decrypt PEM private (RSA) key with Bouncy Castle
并且由于您实际上还需要公钥,“传统”格式为您提供(如 PEMKeyPair -> KeyPair)但 PKCS8 没有
Bouncy Castle - how to get Public Key Info from JceOpenSSLPKCS8DecryptorProviderBuilder (我的)

用于使用 Bouncy 生成自签名证书
Self signed X509 Certificate with Bouncy Castle in Java
Generating X509 Certificate using Bouncy Castle Java (但不要使用 SHA1)
也许Generating X509Certificate using bouncycastle X509v3CertificateBuilder

关于java - 如何仅使用私钥文件创建 java keystore ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58753399/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com