Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DER编码BCECPublicKey_Java_Bouncycastle_Keytool_Pki_Der - Fatal编程技术网

Java DER编码BCECPublicKey

Java DER编码BCECPublicKey,java,bouncycastle,keytool,pki,der,Java,Bouncycastle,Keytool,Pki,Der,我正在尝试对公钥进行Der编码,并将其与外部服务一起使用 当我获取编码的org.bouncycastle.jcajce.provider.asymetric.ec.BCECPublicKey并将其发送到外部服务时,它的响应是“不支持使用未命名曲线的ECDSA证书”。(我正在调用publicKey.getEncoding()获取编码密钥) 我不确定如何从这里调试。我试图保存原始编码字节 到文件并使用openssl检查证书,但未成功: > openssl x509 -in test.der -

我正在尝试对公钥进行Der编码,并将其与外部服务一起使用

当我获取编码的
org.bouncycastle.jcajce.provider.asymetric.ec.BCECPublicKey
并将其发送到外部服务时,它的响应是“不支持使用未命名曲线的ECDSA证书”。(我正在调用
publicKey.getEncoding()
获取编码密钥)

我不确定如何从这里调试。我试图保存原始编码字节 到文件并使用openssl检查证书,但未成功:

> openssl x509 -in test.der -inform der -text -noout
unable to load certificate
62375:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.30.2/src/crypto/asn1/tasn_dec.c:1344:
62375:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.30.2/src/crypto/asn1/tasn_dec.c:848:
62375:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.30.2/src/crypto/asn1/tasn_dec.c:768:Field=serialNumber, Type=X509_CINF
62375:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.30.2/src/crypto/asn1/tasn_dec.c:768:Field=cert_info, Type=X509

任何帮助都将不胜感激

以下是我提出的解决方案:

KeyFactory keyFactory = KeyFactory.getInstance("EC");
X509EncodedKeySpec keySpec = keyFactory.getKeySpec(publicKey, X509EncodedKeySpec.class);
return keySpec.getEncoded();

使用试用和错误以外的其他方法,找出外部服务期望的格式和值。我不相信您可以使用
openssl x509
打印密钥<代码>openssl x509用于证书,而不是密钥。也许你应该使用Peter Gutmann的
dumpasn1
来打印你所拥有的并将其添加到问题中。但我的感觉是,这与堆栈溢出无关。堆栈溢出不应用于有关如何使用工具(如
keytool
openssl
)的问题。而且它无法帮助未知[web?]服务拒绝参数。“不支持带有未命名曲线的ECDSA证书”可能表示您使用了域参数而不是命名曲线,如
secp256r1
。也许您应该指示Bouncy Castle使用命名曲线而不是域参数。这是OpenSSL编程环境中的问题,但我不知道BC等价物:(@jww)
opensslx509
接受证书,但
OpenSSL pkey-pubin
(或1.0.0
OpenSSL ec-pubin
)接受JCE所称的X.509格式,即SubjectPublicKeyInfo。markw:你是如何生成这个密钥的,或者如果你从某个东西中读取它,它是什么格式的,是如何生成的?另外,您(或您想)只发送公钥还是证书?证书可以是ECDSA,但密钥不能区分ECDSA和其他EC。
KeyFactory keyFactory = KeyFactory.getInstance("EC");
X509EncodedKeySpec keySpec = keyFactory.getKeySpec(publicKey, X509EncodedKeySpec.class);
return keySpec.getEncoded();