Windows CE 6.0上的ASN1_TIME错误

时间:2015-07-10 11:30:36

标签: c ssl openssl windows-ce x509

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

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

我编译mkcert.c,它使用我之前构建的libeay32.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。

1 个答案:

答案 0 :(得分:0)

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