【发布时间】:2016-06-26 22:34:10
【问题描述】:
如果我想检查 SSL 证书的到期日期,我可以使用连接到 IdSSLIOHandlerSocketOpenSSL 的 IdHTTP
IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
然后点击OnVerifyPeer
function TForm1.IdSSLIOHandlerSocketOpenSSL1VerifyPeer(Certificate: TIdX509;
AOk: Boolean; ADepth, AError: Integer): Boolean;
begin
Showmessage(Certificate.notAfter));
end;
最后对我要检索其服务器证书的服务器执行IdHTTP.Get,这样就可以了。
但是
我的 Android 设备本地存储了一个客户端证书,该证书与应用程序一起部署,我将如何访问该证书?
意思是如何将证书加载到TidX509 对象中?
TidX509 的构造函数需要一个 PX509,然后将其分配给记录的指针 X509 所以我很迷失在那里
【问题讨论】:
-
这取决于证书的类型和存储位置。例如,底层 OpenSSL 库具有从文件或内存加载 PEM 格式证书的功能。您无法将证书从 Android 的证书存储区直接加载到 OpenSSL,因此您必须先将证书导出到文件中(如果尚未导出)。
-
@RemyLebeau ,感谢您的信息,我看到
idSSLOpenSSL使用函数IndySSL_load_client_CA_file(const AFileName: String) : PSTACK_OF_X509_NAME;但这会返回 PSTACK_OF_X509_NAME 但如果我没记错的话,我需要 PSTACK_OF_X509_INFO 吗?因为 X509_INFO 记录包含 X509 证书?idSSLOpenSSLHeaders中没有sk_X509_INFO_new变量,请原谅我对此事缺乏了解这是我第一次使用和处理证书
标签: android delphi ssl-certificate firemonkey indy