我正在挖掘源代码,试图找到一种方法让 OpenSSL 始终接受过期的证书。我找不到过期错误/警报和实际检查代码之间的链接。任何人都可以指出我正确的方向吗?(我的 C 不是很好,我依赖于可以从 C++ 继承的东西)
我想接受过期证书的原因是因为我们有大量的嵌入式系统,它们的证书将在几个月后过期(更新不是一个选项,因为它们要么关闭要么在大容量存储中)。这些连接的服务器知道只接受这些系统,因此允许过期证书似乎是最直接的解决方案。
使 OpenSSL 接受过期的证书...
在您的验证回调函数中,您应该同时接受X509_V_OK
和X509_V_ERR_CERT_HAS_EXPIRED
。也许是这样的:
int verify_callback(int preverify, X509_STORE_CTX* x509_ctx)
{
/* For error codes, see http://www.openssl.org/docs/apps/verify.html */
int err = X509_STORE_CTX_get_error(x509_ctx);
if(preverify == 0)
{
if(err == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY)
fprintf(stdout, " Error = X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY\n");
else if(err == X509_V_ERR_CERT_UNTRUSTED)
fprintf(stdout, " Error = X509_V_ERR_CERT_UNTRUSTED\n");
else if(err == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN)
fprintf(stdout, " Error = X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN\n");
else if(err == X509_V_ERR_CERT_NOT_YET_VALID)
fprintf(stdout, " Error = X509_V_ERR_CERT_NOT_YET_VALID\n");
else if(err == X509_V_ERR_CERT_HAS_EXPIRED)
fprintf(stdout, " Error = X509_V_ERR_CERT_HAS_EXPIRED\n");
else if(err == X509_V_OK)
fprintf(stdout, " Error = X509_V_OK\n");
else
fprintf(stdout, " Error = %d\n", err);
}
if (err == X509_V_OK || err == X509_V_ERR_CERT_HAS_EXPIRED)
return 1;
return preverify;
}
Run Code Online (Sandbox Code Playgroud)
老式移动设备和物联网设备的另一个问题是缺少时钟和/或辅助电源。您可能也需要允许X509_V_ERR_CERT_NOT_YET_VALID
。您将在 1990 年代或 2000 年代开机并认为其存在的设备上观察到这一点。没有 SIM 卡的旧手机一直会遇到这种情况。我也在现代 [低端] Android 手机中观察到它。
归档时间: |
|
查看次数: |
2919 次 |
最近记录: |