我有一个 x509 证书作为文件/字节数组,我想用它来验证CertificateVerify
TLS 消息中提供的签名。我想我可以SecKeyVerifySignature
在确定证书的密钥算法(参数)并从成绩单哈希(连接到上下文字符串等)中SecKeyAlgorithm
初始化之后使用。signedData
openssl x509
报告证书的密钥,如
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:44:58:8c:d0:95:90:14:45:82:db:4f:56:41:7d:
57:0e:f5:b4:d8:65:04:6c:21:5a:cd:1e:0e:87:10:
f9:31:c6:fa:b9:ad:b3:a5:e1:df:9f:32:25:4b:a9:
40:5c:d4:56:0d:bb:55:fd:f4:68:f9:4e:89:70:56:
b9:1c:4a:ef:93
ASN1 OID: prime256v1
NIST CURVE: P-256
我相信我可以使用此处描述的机制解析证书,例如。
CFDataRef certData = CFDataCreate(NULL, (const UInt8*) rawCert, len);
SecCertificateRef certificate = SecCertificateCreateWithData(NULL, certData);
我想我可以用它SecCertificateCopyKey
来提取密钥,例如。
SecKeyRef key = SecCertificateCopyKey(certificate);
但是,我无法找到一种方法来提取密钥的签名算法(公钥算法)。我发现SecKeyIsAlgorithmSupported
。我是否需要遍历所有可能的SecKeyAlgorithm
常量以找到密钥正在使用的常量(即 a SecKeyAlgorithm
for id-ecPublicKey
)?