如何从Apple全球开发人员证书和.p12文件中提取公钥和私钥?

时间:2016-03-10 20:38:08

标签: java ios encryption coldfusion

所以我试图为存折编写功能,或者正如他们现在所说的那样,"电子钱包。"我编写了所有必要的代码来编写JSON,将文件写入临时目录,然后计算校验和并将其放回清单中。现在,我被困在我用pass.P12文件的.p12签署Apple全球开发者证书的部分,以获得所需的.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#">

上面的代码是我的冷聚变程序的片段,理想地签名并打印出所需的.pkpass文件。我已经确认此程序可以与其他提供的公钥和私钥一起使用。在我阅读签名者的地方,我尝试将全球开发人员证书导出到.pem文件中。然后我对.p12做了同样的事情,将其导出到pem文件中并将两个pem文件插入到rsa_signer中并且没有运气。所以我被困在哪里。

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

----- BEGIN PRIVATE KEY -----

加密.....

----- END PRIVATE KEY -----

-----开始公共关键-----

...加密 ----- END PUBLIC KEY -----

与我的2个.pem文件(Apple全球开发人员证书+ pass.p12文件)相比

/// Apple dev cert.pem

----- BEGIN CERTIFICATE -----

///加密

----- END CERTIFICATE -----

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

行李属性     friendlyName:传递类型ID:XXX     localKeyID:XXX subject = / UID = XXX / CN =通行证类型ID:XXX / OU = XXX / O = XXXC = US issuer = / C = US / O = Apple Inc./OU=Apple Worldwide Developer Relations / CN = Apple Worldwide Developer Relations Certification Authority -----开始证书-----

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

这可能就是为什么我的coldfusion程序不喜欢我的pem文件? .pem文件说&#34;开始证书&#34;而其他的pems说&#34;开始公钥/私钥。&#34;

非常感谢任何帮助。谢谢!

https://rietta.com/blog/2012/01/27/openssl-generating-rsa-key-from-command/

1 个答案:

答案 0 :(得分:1)

创建签名文件的步骤是(在获得manifest.json之后)
1.加载p12文件内容(传递类型id认证) - &gt; $ cert_info
2.使用
用密码解码$ cert_info和密码 openssl_pkcs12_read($ cert_store,$ cert_info,$ password) - &gt; $ cert_info将保留所有已解码的信息 3.使用
从$ cert_info获取私钥 $ pkey = openssl_pkey_get_private($ cert_info ['pkey'],“”);

并将$ pkey保存到pem临时文件中 3.1使用$ cert = openssl_x509_read($ cert_info ['cert'])保存证书信息;

4.使用manifest.json,cert info($ cert),Apple World Wide Developer Certificate通过使用
制作pkcs7文件(temp_signature) openssl_pkcs7_sign(“./ pass_file / manifest.json”,“。/ pass_file / temp_signature”,$ cert,$ pkey,array(),PKCS7_BINARY | PKCS7_DETACHED,“。/ AppleWWDRCA.pem”)
5.加载temp_signature文件内容并在filename =“smime.p7s”之后和------(substr)之前提取数据并用base64_decode编码并保存到'签名'文件中