在我的应用中,我获得了PEM编码的证书,并且需要将其转换为其他形式,以便以后将其用于JWT验证。我要查找的结果是证书中包含的公钥的SecKey表示形式,PEM公钥字符串或转换为DER证书。
我对此非常陌生,因此我不知道如何解决该问题。我在Google周围搜索,没有找到明确的解决方案,即使Apple文档仅提及DER证书。如果我正确理解,一种解决方案是在应用程序内部使用OpenSSL(甚至可能吗?)进行转换,但是我找不到有关如何实现此操作的有用资源,因此,我希望您能对正确的做法有更多的了解。
在我的情况下,无法在应用程序外部进行转换。
答案 0 :(得分:2)
如果您拥有PEM格式的证书,则可以通过剥离页眉和页脚行并对其之间的文本进行base64解码来获取其DER编码数据(也请不要放弃换行符)。 [1,2]
然后,您可以使用iOS安全API中的SecCertificateCreateWithData
创建一个SecCertificate
以便在您的应用中使用,如下所示:
// example data from http://fm4dd.com/openssl/certexamples.htm
let pem = """
-----BEGIN CERTIFICATE-----
MIIC2jCCAkMCAg38MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG
(...)
+tZ9KynmrbJpTSi0+BM=
-----END CERTIFICATE-----
"""
// remove header, footer and newlines from pem string
let certData = Data(base64Encoded: pemWithoutHeaderFooterNewlines)!
guard let certificate = SecCertificateCreateWithData(nil, data as CFData) else {
// handle error
}
// use certificate e.g. copy the public key
let publicKey = SecCertificateCopyKey(certificate)!
PEM格式只是被标头行包围的base64编码数据。
.pem – Base64编码的DER证书,包含在“ ----- BEGIN CERTIFICATE -----”和“ ----- END CERTIFICATE -----”之间