在Windows 8 metro上编译OpenSSL

时间:2012-07-18 08:32:59

标签: windows windows-8 windows-runtime

我必须将OpenSSL移植到winRT(x86上的windows 8 metro而不是ARM),所以我打算开始编译WinRt。 我已从http://www.openssl.org/source/

下载了源代码

在源代码中,我看到一些操作系统特定的文件夹,如MacOS,OS2,还有ms文件夹,但我没有看到任何视觉工作室项目。到目前为止我所读到的关于编译OpesSSL有关makefile和mingw的讨论,但我对makefile并不是很满意,而且不确定是否在windows 8中支持cygwin和perl。所以我正在寻找关于如何编译OpenSSL的一些想法在Windows 8上使用visual studio。请分享您的知识或指出我可以帮助我这样做的方向。非常感谢

3 个答案:

答案 0 :(得分:2)

OpenSSL将在Windows 8下构建,仅适用于桌面模式。 Metro / WinRT不再提供Winsock(或API兼容的替代品),因此您将无法直接为WinRT编译。

答案 1 :(得分:2)

Metro风格的SSL加密解决方案效果很好。但是,如果您没有连接到Web服务,则存在一些缺点:
- 您无法控制SSL握手的参数(如密码,验证服务器证书)
- 无法提供用户证书来向客户端验证客户端
- 依赖于Microsoft升级SSL堆栈的新加密等。

有些人正致力于将openssl移植到Windows运行时。看到 http://openssl.6102.n7.nabble.com/winrt-random-td42100.html
这意味着您只需配置和构建openssl而不支持winsock(仅限内存BIO)并替换一些不支持的函数。

所以有可能做到这一点,但尚未开箱即用,与内置解决方案相比还有一些工作要做。但是如果你想使用openssl移植一些软件,这可能是一个解决方案。

答案 2 :(得分:1)

为什么要在WinRT中使用OpenSSL?

如果您仅出于安全目的使用它,那么您可以省略它inmetro样式WinRT。因为WinRT本身为诸如

之类的都市风格的套接字编程提供了安全性
//0: A plain socket with no encryption.
socket->ConnectAsync(hostname, serviceName, SocketProtectionLevel::PlainSocket);

//1: A socket that must use the SSL for encryption. This value requires encryption and never allows a NULL cipher.
socket->ConnectAsync(hostname, serviceName, SocketProtectionLevel::Ssl);

//2: A socket that prefers to use the SSL for encryption. This value prefers that full encryption be used, but allows a NULL cipher (no encryption) based on the server configuration.
socket->ConnectAsync(hostname, serviceName, SocketProtectionLevel::SslAllowNullEncryption);