CryptoAPI 数字签名 与 OpenSSL 验证签名
这段时间要实现一个认证协议,分为客户端和服务器端,客户端使用Windows操作系统,服务器端使用Linux操作系统,在客户端下(Windows),使用Windows证书库中的签名证书对消息进行签名(使用Windows的crypto库),然后在服务器端(Linux)下,使用OpenSSL库对签名值进行验证~~
客户端使用函数接口:
CertOpenSystemStore — 打开系统证书库
CryptUIDlgSelectCertificateFromStore — 从证书库中选择证书,获取证书上下文
CertGetCertificateContextProperty — 获取属性CERT_KEY_PROV_INFO_PROP_ID对应CRYPT_KEY_PROV_INFO结构,得到证书对应的密钥容器名
CryptAcquireContext — 连接密钥容器
CryptCreateHash — 创建Hash对象
CryptHashData — 得到Hash值
CryptSignHash — 对Hash值进行签名,得到签名值
服务器使用函数接口:
d2i_X509_bio — 从编码后的证书生成x509证书
X509_get_pubkey — 从x509证书中获取公钥
EVP_MD_CTX_init — 初始化ctx
EVP_VerifyInit_ex — 对签名进行验证
EVP_VerifyUpdate
EVP_VerifyFinal
这里有一个关键点:crypto库生成的签名值要经过反序后才能由OpenSSL库进行验证~~切记~