iOS 中的 PEM 编码证书转换
PEM encoded certificate conversion in iOS
在我的应用程序中,我获得了 PEM 编码的证书,需要将其转换为不同的形式,以便稍后将其用于 JWT 验证目的。我正在寻找的结果是证书中包含的 public 密钥的 SecKey 表示、PEM Public 密钥字符串或转换为 DER 证书。
我对此非常陌生,所以我不知道如何解决这个问题。我用谷歌搜索并没有找到明确的解决方案,甚至 Apple 文档也只提到 DER 证书。如果我理解正确,一种解决方案是在我的应用程序中使用 OpenSSL(这甚至可能吗?)进行转换,但我找不到任何关于如何实现它的有用资源,所以我希望能对正确的做法有更多的了解.
在应用程序外部进行转换不适合我的情况。
如果您有 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 format is simply base64 encoded data surrounded by header lines.
.pem – Base64 encoded DER certificate, enclosed between "-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----"
在我的应用程序中,我获得了 PEM 编码的证书,需要将其转换为不同的形式,以便稍后将其用于 JWT 验证目的。我正在寻找的结果是证书中包含的 public 密钥的 SecKey 表示、PEM Public 密钥字符串或转换为 DER 证书。
我对此非常陌生,所以我不知道如何解决这个问题。我用谷歌搜索并没有找到明确的解决方案,甚至 Apple 文档也只提到 DER 证书。如果我理解正确,一种解决方案是在我的应用程序中使用 OpenSSL(这甚至可能吗?)进行转换,但我找不到任何关于如何实现它的有用资源,所以我希望能对正确的做法有更多的了解.
在应用程序外部进行转换不适合我的情况。
如果您有 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 format is simply base64 encoded data surrounded by header lines.
.pem – Base64 encoded DER certificate, enclosed between "-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----"