我正在开发一个应用程序,我将从服务器中检索用户的公钥。有了它,我需要使用公钥进行RSA加密。从服务器获取的公钥是Base64编码的。
如何将公钥加载到iOS KeyChain中,以便我可以使用它执行RSA加密功能?证书加载似乎微不足道,但原始公钥不会。
答案 0 :(得分:4)
这不受支持,因为是"wrong"方式。
“正确”方式是使用a certificate。
这非常简单。您无需将证书添加到钥匙串即可处理此案例。相反,只需在应用程序中加载证书数据(即.cer文件的内容)(您可以从捆绑包或网络中获取),然后使用SecCertificateCreateWithData创建证书引用。从那里,您可以使用SecTrust对象提取公钥ref(SecTrustCreateWithCertificates,SecTrustEvaluate - 您可以选择忽略生成的SecTrustResultType - 和SecTrustCopyPublicKey)。从那里,您可以使用SecKey API(SecKeyEncrypt,SecKeyRawVerify)进行加密和验证。
关于how to create a self-signed certificate is here的教程。
基本步骤是:
#Make the -----RSA PRIVATE KEY----- file in PEM format
openssl genrsa -out privKey.pem 2048
#Make the -----CERTIFICATE REQUEST-----
openssl req -new -key privKey.pem -out certReq.pem
#Make the actual -----CERTIFICATE-----
openssl x509 -req -days 30 -in certReq.pem -signkey privKey.pem -out certificate.pem
#Make the DER certificate.crt file from the certificate.pem
openssl x509 -outform der -in certificate.pem -out certificate.cer
如果您在Mac计算机上双击 .cer ,它会将其导入到钥匙串中。
资源:
答案 1 :(得分:1)
传输公钥的常用方法 - 在证书内部,由某些CA签名证明它是真实的。
或许你在谈论一个ssh公钥? 在这种情况下,您需要一个特殊的支持ssh的应用程序才能使用它,这些键通常不会存储在iOS钥匙串中。
答案 2 :(得分:0)
我在Apple网站上找到了必要的代码,描述了如何从公钥中删除ASN.1标头并将其加载到KeyChain中。