首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用openssl PKCS12 BadPaddingException生成的Java密钥系统

用openssl PKCS12 BadPaddingException生成的Java密钥系统
EN

Stack Overflow用户
提问于 2015-09-29 17:59:33
回答 1查看 2.3K关注 0票数 2

我正在尝试配置下拖以使用密钥存储库(而不是仙人掌),但我得到了以下错误:

代码语言:javascript
复制
javax.crypto.BadPaddingException: Given final block not properly padded
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:966) ~[sunjce_provider.jar:1.8.0_60]
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824) ~[sunjce_provider.jar:1.8.0_60]
    at com.sun.crypto.provider.PKCS12PBECipherCore.implDoFinal(PKCS12PBECipherCore.java:399) ~[sunjce_provider.jar:1.8.0_60]
    at com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndDESede.engineDoFinal(PKCS12PBECipherCore.java:431) ~[sunjce_provider.jar:1.8.0_60]
    at javax.crypto.Cipher.doFinal(Cipher.java:2165) ~[na:1.8.0_60]
    at sun.security.pkcs12.PKCS12KeyStore.engineGetKey(PKCS12KeyStore.java:348) ~[na:1.8.0_60]
    ... 18 common frames omitted
Wrapped by: java.security.UnrecoverableKeyException: Get Key failed: Given final block not properly padded
    at sun.security.pkcs12.PKCS12KeyStore.engineGetKey(PKCS12KeyStore.java:410) ~[na:1.8.0_60]
    at java.security.KeyStore.getKey(KeyStore.java:1023) ~[na:1.8.0_60]
    at sun.security.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:133) ~[na:1.8.0_60]
    at sun.security.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:70) ~[na:1.8.0_60]
    at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:256) ~[na:1.8.0_60]
    at org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory.getKeyManagers(UndertowEmbeddedServletContainerFactory.java:304) ~[spring-boot-1.3.0.M5.jar:1.3.0.M5]
    ... 13 common frames omitted
Wrapped by: java.lang.IllegalStateException: java.security.UnrecoverableKeyException: Get Key failed: Given final block not properly padded
    at org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory.getKeyManagers(UndertowEmbeddedServletContainerFactory.java:308) ~[spring-boot-1.3.0.M5.jar:1.3.0.M5]
    at org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory.configureSsl(UndertowEmbeddedServletContainerFactory.java:258) ~[spring-boot-1.3.0.M5.jar:1.3.0.M5]
    at org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory.createBuilder(UndertowEmbeddedServletContainerFactory.java:244) ~[spring-boot-1.3.0.M5.jar:1.3.0.M5]
    at org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory.getEmbeddedServletContainer(UndertowEmbeddedServletContainerFactory.java:221) ~[spring-boot-1.3.0.M5.jar:1.3.0.M5]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158) ~[spring-boot-1.3.0.M5.jar:1.3.0.M5]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ~[spring-boot-1.3.0.M5.jar:1.3.0.M5]
    ... 8 common frames omitted
Wrapped by: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is java.lang.IllegalStateException: java.security.UnrecoverableKeyException: Get Key failed: Given final block not properly padded
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) ~[spring-boot-1.3.0.M5.jar:1.3.0.M5]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531) ~[spring-context-4.2.1.RELEASE.jar:4.2.1.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.0.M5.jar:1.3.0.M5]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:667) [spring-boot-1.3.0.M5.jar:1.3.0.M5]
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:342) [spring-boot-1.3.0.M5.jar:1.3.0.M5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:273) [spring-boot-1.3.0.M5.jar:1.3.0.M5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:980) [spring-boot-1.3.0.M5.jar:1.3.0.M5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:969) [spring-boot-1.3.0.M5.jar:1.3.0.M5]

所有javax.net.ssl.*属性都已正确设置。

生成密钥存储库的步骤是:

首先生成私钥:

代码语言:javascript
复制
openssl genrsa -out KEY_FILE.key -aes128 -passout pass:KEY_PASS 2048

企业社会责任:

代码语言:javascript
复制
openssl req -new -sha256 -key KEY_FILE.key -out CSR_FILE.csr

在我的内部CA对其进行签名后,我使用生成的CERT_FILE.crt创建密钥存储:

代码语言:javascript
复制
openssl pkcs12 -export -in CERT_FILE.crt -inkey KEY_FILE.key -name NAME -certfile ROOT_CERT.crt -caname ROOT_NAME -passin pass:KEY_PASS -passout pass:STORE_PASS -out keystore.pfx

据我目前所读,这个错误通常是由密码问题引起的,但我的代码使用正确的密码作为密钥和密钥存储库。此外,还包括:

代码语言:javascript
复制
openssl pkcs12 -info -in keystore.pfx

使用STORE_PASS和KEY_PASS,我可以相应地查看keystore中的所有内容。

关于我应该在哪里做进一步调查有什么暗示吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-30 07:00:13

只使用STORE_PASS.

在PKCS#12中,Java并不像在JKS中那样真正地支持单独的闪存和keypass。事实上,keytool试图阻止您指定不同的密码,尽管直到最近,它至少漏掉了我所知道的一种情况。而这里甚至都没有涉及到。

更重要的是,openssl pkcs12 -export只使用一个密码创建PKCS#12。-passin只用于解密输入密钥文件;它不用于输出PKCS#12,只用于-passoutpkcs12 -export -twopass确实使用了两个密码(必须提示),一个用于MAC,另一个用于两个blobs,但是如果这样做,Java就无法读取结果。

或者,如果您真的想要不同的密码,请转换为JKS:

代码语言:javascript
复制
keytool -importkeystore -srckeystore ks.p12 -srcstoretype PKCS12 \
  -srcstorepass STORE_PASS -destkeystore ks.jks -deststorepass STORE_PASS
keytool -keypasswd -alias 1 -keystore ks.jks -storepass STORE_PASS -new KEY_PASS
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32850783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档