我正在开发一个应用,需要从我们的服务器检索用户的公钥。一旦获得公钥,我需要使用它进行RSA加密。从服务器获取的公钥是Base64编码。
我该如何将公钥加载到iOS KeyChain中,以便我可以使用它执行RSA密码学功能?证书加载似乎很简单,但原始公钥不是。
我正在开发一个应用,需要从我们的服务器检索用户的公钥。一旦获得公钥,我需要使用它进行RSA加密。从服务器获取的公钥是Base64编码。
我该如何将公钥加载到iOS KeyChain中,以便我可以使用它执行RSA密码学功能?证书加载似乎很简单,但原始公钥不是。
这不被支持,因为这是"错误的"方法。
正确的方法是使用证书。
这非常容易。你不需要将证书添加到钥匙串中来处理此情况。相反,只需在应用程序中加载证书数据(即.cer文件的内容)(您可以从捆绑包或网络上获取此文件),然后使用SecCertificateCreateWithData创建证书引用。从那里,您可以使用SecTrust对象提取公钥引用(SecTrustCreateWithCertificates,SecTrustEvaluate - 您可以选择忽略生成的SecTrustResultType - 和SecTrustCopyPublicKey)。从那里,您可以使用SecKey API(SecKeyEncrypt,SecKeyRawVerify)进行加密和验证。
这里有一个关于如何创建自签名证书的教程。
基本步骤如下:
#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
传输公钥的常规方式是将其放在由某些CA签名以证明其真实性的证书中。
或者您可能在谈论ssh公钥? 在这种情况下,您需要一个特殊的ssh应用程序来使用它,这些密钥通常不存储在iOS钥匙串中。
openssl x509 -in yourcert -text
是否给出任何可读输出。否则,可以尝试使用 openssl x509 -in yourcert -inform DER -text
。 - Willem Hengeveld我在苹果网站上找到了必要的代码,描述了如何从公钥中剥离ASN.1标头并将其加载到KeyChain中。