Windows CE 6.0上的ASN1_TIME错误

问题描述 投票:1回答:1

我在Windows 7和Windows Embedded CE6.0(ARMV4I平台)上使用OpenSSL。

为此,我自己编译了OpenSSL,最初用于Windows 7和我的ARMV4I平台的0.9.8w版本。执行openssl.exe在两台机器上都能正常工作。

我编译使用我之前构建的mkcert.clibeay32.dll

在我的Windows 7机器上一切正常,证书正确发出。但是在ARMV4I设备上我注意到日期(X509_get_notBefore(x)X509_get_notAfter(x))是错误的:

  • Windows 7 - X509_get_notBefore(x)的值是150710093249Z
  • CE 6.0 - X509_get_notBefore(x)39150810093249Z

而差异始终是值39000100000000。这导致Windows CE的有效性不同,现在是Aug 10 09:32:49 3915 GMT而不是Jul 10 09:32:49 2015 GMT

后来我编译了OpenSSL 1.0.2c并执行了相同的代码,但问题仍然存在。

你知道为什么会这样,以及如何修复它?

(一种可能的解决方法可能是手动调整Windows CE上的ASN1_TIME:

#ifdef UNDER_CE
    X509_gmtime_adj(notBefore,-39000100000000);
    X509_gmtime_adj(notAfter,-39000100000000);
#endif

这需要在各个步骤中发生,因为X509_gmtime_adj()只接受long类型的第二个参数:

ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj);

我使用Microsoft Visual Studio 2008版本3.5 SP1。

c ssl openssl windows-ce x509
1个回答
0
投票

问题可以通过以下修复解决:github commit

© www.soinside.com 2019 - 2024. All rights reserved.