【发布时间】:2012-09-01 18:33:00
【问题描述】:
我已经构建了 OpenSSL FIPS 容器版本 2.0.1,然后使用该容器构建了 OpenSSL 1.0.1c(根据 OpenSSL FIPS 对象模块 v2.0 用户指南中的说明):
SET FIPSDIR=C:\OpenSSL\FIPS
cd C:\OpenSSL\openssl-fips-2.0.1
ms\do_fips
cd C:\OpenSSL\openssl-1.0.1c
ms\do_nasm
nmake -f ms\ntdll.mak
我的 .NET 应用程序中有这些导入(显然是使用上面的 libeay32.dll):
[DllImport("libeay32", CallingConvention = CallingConvention.Cdecl)]
public extern static void ERR_load_crypto_strings();
[DllImport("libeay32", CallingConvention = CallingConvention.Cdecl)]
public extern static int ERR_print_errors_fp(SafeHandle file);
[DllImport("libeay32", CallingConvention = CallingConvention.Cdecl)]
public extern static int FIPS_mode_set(int onoff);
问题是,当我调用FIPS_mode_set(1)时,它返回0,这表明无法启用FIPS模式。
为了尝试找出问题的原因,我正在这样做:
ERR_load_crypto_strings();
using (FileStream fs = new FileStream...)
{
ERR_print_errors_fp(fs.SafeFileHandle);
}
这给了我这个错误信息:
OPENSSL_Uplink(0FAF1000,08): no OPENSSL_Applink
我尝试过寻找答案,但结果都是空的 - 任何建议都将不胜感激!
** 更新 **
我尝试使用 Visual Studio 2008 命令行中的相同步骤构建它,而不是 Visual Studio 2010 命令行(我之前使用过)——它成功了!
但我不知道为什么它不能与 Visual Studio 2010 一起使用,而且我不想让 Visual Studio 2008 永远存在 - 知道如何让它在 Visual Studio 2010 中正常运行吗?
【问题讨论】:
-
@alk 不-彼得已经发布了一个链接,无论如何我以前都见过它。正如我在对 Peter 的回复中提到的,我没有将 OpenSSL 库链接到我的代码中——我通过 pinvoke 将它与 .NET 一起使用
-
关于 OPENSSL_Applink 错误,我在编写自己的 DLL 以调用 libeay32 时也遇到了该错误。问题来自混合 C 和 C++。如果您将 BIO 例程用于文件 IO,然后从 C++ 调用它们(并且所有文件 io 都在 C 中发生),那么问题应该会消失。我从这条评论中得到了提示:stackoverflow.com/questions/24066318/…