【发布时间】: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