Java 如何从apple world wide developer证书和.p12文件中提取公钥和私钥?

Java 如何从apple world wide developer证书和.p12文件中提取公钥和私钥?,java,ios,encryption,coldfusion,Java,Ios,Encryption,Coldfusion,因此,我试图为passbook编写功能,或者他们现在称之为“Wallet”。我编写了所有必要的代码来编写JSON,将文件写入临时目录,然后计算校验和并将其放回清单中。现在我被困在了我用passs.p12文件的.p12签署苹果全球开发者证书的部分,以获得所需的.der文件 <cfset signer = new rsa_signer(fileRead(expandPath("test_code/public_key.txt")),fileRead(expandPath("test_code/

因此,我试图为passbook编写功能,或者他们现在称之为“Wallet”。我编写了所有必要的代码来编写JSON,将文件写入临时目录,然后计算校验和并将其放回清单中。现在我被困在了我用passs.p12文件的.p12签署苹果全球开发者证书的部分,以获得所需的.der文件

<cfset signer = new rsa_signer(fileRead(expandPath("test_code/public_key.txt")),fileRead(expandPath("test_code/private_key.pem")),"SHA512withRSA")>


<cffile action="READ" file="#xtemp_folder#\manifest.json" variable="xtext">
<cfset xsignature = signer.sign(xtext)>
<!---- write to file ----->
<cffile action="WRITE" file="#xtemp_folder#\signature.der" output="#xsignature#">

<!---- create zipped file for user downloading ----->
<cf_write_log log_key="#attributes.log_key#" data="<hr>create zip files from temp holding folder..">
<cfset xzip_filename = "h:\eshowtemp\#xtemp_folder_string#.pkpass">
<cfdirectory action="LIST" directory="#xtemp_folder#" name="files">
<cf_write_log log_key="#attributes.log_key#" data="files=#files.recordcount#">
<cfzip file="#xzip_filename#" source="#xtemp_folder#">

上面的代码是我的cold fusion程序的一个片段,理想情况下,它会签署并打印出所需的.pkpass文件。我已确认此程序与其他提供的公钥和私钥一起工作。在阅读签名者的地方,我尝试将world wide developer证书导出到.pem文件中。然后我对.p12也做了同样的操作,将其导出到一个pem文件中,并将两个pem文件插入rsa_签名器,但没有成功。所以我被困在了接下来的路上

以下是我注意到的。在有效的公钥和私钥上,它们看起来是这样的:

-----开始私钥-----

加密

-----结束私钥-----

-----开始公钥-----

加密。。。 -----结束公钥-----

与我的2.pem文件(Apple world wide developer cert+Pass.p12文件)相比

///Apple dev cert.pem

-----开始证书-----

///加密

-----结束证书-----

//pass.pem(从.p12转换而来)

行李属性 friendlyName:通行证类型ID:XXX localKeyID:XXX subject=/UID=XXX/CN=Pass-Type-ID:XXX/OU=XXX/O=XXXC=US 发卡机构=/C=US/O=苹果公司/OU=苹果全球开发者关系/CN=苹果全球开发者关系认证机构 -----开始证书-----

XXXX -----结束证书-----

这可能是我的coldfusion程序不喜欢pem文件的原因吗?.pem文件表示“开始证书”,而其他pem表示“开始公钥/私钥”

任何帮助都将不胜感激。谢谢


创建签名文件的步骤是(在获取manifest.json之后)
1.加载p12文件内容(通过类型id认证)->$cert\u信息
2.使用
openssl\u pkcs12\u read($cert\u store,$cert\u info,$password)->$cert\u info将保留所有解码信息 3.使用
$pkey=openssl\u pkey\u get\u private($cert\u info['pkey'],“”)
并将$pkey保存到pem临时文件中
3.1使用$cert=openssl_x509_read($cert_info['cert'])保存证书信息
4.使用manifest.json、cert info($cert)、Apple World Wide Developer证书通过
openssl_pkcs7_符号(“./pass_file/manifest.json”、“/pass_file/temp_signature”、$cert、$pkey、array()、pkcs7_二进制文件| pkcs7_分离,“./applewdrca.pem”)

5.加载临时签名文件内容,并在filename=“smime.p7s”之后和------(substr)之前提取数据,用base64编码,解码并保存到“签名”文件中

您似乎感到困惑。你永远不会看到苹果全球开发者证书的私钥;苹果将此密钥保密。您拥有的证书具有公钥,可用于验证私钥拥有者(即Apple)是否签署了某些内容。您需要使用从Apple开发者网站获得的通行证签名证书来签署通行证。由于您为该证书生成CSR,因此您拥有私钥。一旦您从Apple获得签名证书,您可以将其加载到KeyChain实用程序中,然后将其与私钥一起导出included@user3766198嗨,我卡住了,如果它对你有用,你能帮我吗。我看不懂证书。你能分享一下你的解决方案吗?这会很有帮助的