0

我正在尝试对 Intuit API Explorer 进行身份验证,以更好地熟悉客户数据 (AggCat) API。

我输入了消费者密钥/秘密、SAML id、用户 ID 和我上传的原始 .crt 证书。我得到错误:

The given certificate file is not supported. Please provide valid PEM certificate file.

我不明白这个错误,因为 .crt 文件是 PEM 编码的,据我所知。

尽管如此,我还是去了“创建 X.509 密钥”页面:

http://docs.developer.intuit.com/0020_Aggregation_Categorization_Apps/009_Using_AggCat/0010_GettingStarted/0015_Create_an_AggCat_integration/0010_Creating_X.509_Public_Certificates

并按照底部“生成 PEM 文件”中的说明进行操作。我能够通过第 1 步。(将 jks 存储转换为 p12 格式),但在尝试运行第 2 步时出现以下错误:

$ openssl pkcs12 -in keystore.p12 -nocerts -out cert.pem

MAC verified OK
Error outputting keys and certificates
139679448614560:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:539:
139679448614560:error:23077074:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 cipherfinal error:p12_decr.c:104:
139679448614560:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:130:

我在 ubuntu-12.04 LTS 上使用 jdk-1.7.0_17 和 openssl-1.0.1。

谢谢你的帮助。

4

1 回答 1

0

找到了,别找了!

问题源于 PKCS12 格式不支持存储文件和其中的任何密钥的单独密码。存储文件和其中的密钥都必须使用相同的密码进行加密。

所以最简单的方法是再次执行该过程,并在使用 keytool 生成初始私钥和密钥库的步骤中:

keytool -genkey -alias myapp -validity 1095 -keyalg RSA -keystore keystore.jks

确保对密钥库 (storepass) 和私钥 (keypass) 使用相同的密码。

作为替代方案,如果您确实必须/想要在该步骤中为密钥库和密钥使用单独的密码,请在创建 PEM 的初始步骤中:

keytool -importkeystore -srckeystore [MY_KEYSTORE.jks] 
  -destkeystore [MY_FILE.p12]
  -deststoretype PKCS12 
  -deststorepass [PASSWORD_PKCS12] change this to [KEYPASS]
  -srcstorepass [PASSWORD_JKS]

将 -srcstorepass 设置为密钥库 (storepass) 的密码,但将 PKCS12 文件的 -deststorepass 设置为通过上面的 keytool -genkey 命令创建密钥/密钥库时使用的私钥 (keypass) 的密码。

我没有测试过这个替代方案,但它应该也可以工作,因为 PCKS12 存储和密钥最终都会使用相同的密码。

于 2013-04-18T22:15:03.390 回答