【问题标题】:ASN1_TIME wrong on Windows CE 6.0Windows CE 6.0 上的 ASN1_TIME 错误
【发布时间】:2015-09-29 03:20:27
【问题描述】:

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

为此,我最初为 Windows 7 和我的 ARMV4I 平台的 0.9.8w 版本自己编译了 OpenSSL。执行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。

【问题讨论】:

  • Windows CE 设备上的时钟设置是否正确?
  • 感谢您的提示。是的,时钟设置正确。

标签: c ssl openssl windows-ce x509


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多