是否可以使用 Win32 WinHTTP API 实现证书固定,如果可以,如何实现? IE。如何根据“已知良好”的证书检查返回的服务器证书,最好不必将证书永久写入本地证书存储。
(受到jww的回答的启发)
首先我发现这一页 https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning这是关于固定以及证书和公钥固定之间的选择的优秀背景读物。
我使用 WinHTTP API 实现了证书固定,如下所示:
-
在 WinHttpOpen 之后但在 WinHttpConnect 之前,设置发送请求时的回调:
WinHttpSetStatusCallback(hSession, &callbackFunc, WINHTTP_CALLBACK_SENDING_REQUEST, NULL);
-
在回调函数中,检索原始证书 blob:
PCCERT_CONTEXT pCert=NULL;
DWORD dwSize=sizeof(pCert);
WinHttpQueryOption(hInternet, WINHTTP_OPTION_SERVER_CERT_CONTEXT, &pCert, &dwSize);
然后,如果进行完整的证书固定,请比较sha1(pCert->pbCertEncoded)
针对已知良好的证书 SHA1 指纹。
-或者- 如果改为进行公钥固定,请进行比较sha1(pCert->pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData)
针对已知良好的服务器公钥 SHA1。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)