4

我已经构建了 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 一起构建吗?

4

3 回答 3

1

我徒劳地搜索了有关如何构建具有 OpenSSL FIPS 能力的可执行文件的完整说明,但只发现了挫折和死胡同。我终于通过多次试验和错误运行,发现以下工作没有任何构建错误。我在这里发布我的发现,希望它可以帮助一个可怜的灵魂寻找解决这个构建问题的方法(并希望为他们节省他们仍然留在头上的几根头发!)。

如何生成 FIPS 140-2 OpenSSL 可执行文件和库的摘要:(使用的构建机器是 Windows 7 Ultimate)。

以“管理员”身份执行以下步骤!!!

1- 安装 ActiveState Perl 并确保环境路径包括安装 Perl 的 bin 文件夹。(见http://www.activestate.com/activeperl/downloads

2- 安装 Nasm 并将路径添加到 %PATH% 环境变量。(见http://sourceforge.net/projects/nasm

3- 如果尚未安装,请安装 Visual Studio 2008 Pro(VS2010/2012/2013似乎无法正确构建!!)

4- 将 OpenSSL-FIPS-2.0.9 src 分发解压到一个新文件夹(不要重复使用以前的相同文件夹!)。

5- 将 OpenSSL-1.0.2 src 分发版解压到一个新文件夹中(同样:不要重复使用以前的相同文件夹!)。

6- 启动 Visual Studio 2008 DOS 命令窗口(开始->程序->MS Visual Studio 2008->Visual Studio DOS 命令窗口)。

7- 在那个 DOS 窗口中:“Set FIPSDIR=C:\OpenSSL-FIPS-2.0.9”(或托管 OpenSSL-FIPS-2.0.9 src 分发的任何文件夹名称,刚刚在上面的步骤 4 中解压缩。另外:应该指定绝对FIPSDIR 的路径!!!)。

8- 如果为 x86 目标构建,请确保:从该 DOS 命令窗口中设置 PROCESSOR_ARCHITECTURE=x86。(否则链接失败!)。

9- CD C:\OpenSSL-FIPS-2.0.9(或等效)并输入:'ms\ms_fips'。在构建结束时应该看到“构建成功”。

10- CD C:\OpenSSL-1.0.2 并在 DOS 提示符下依次键入以下内容:

    -Perl Configure VC-WIN32 fips --prefix=C:\Build-OpenSSL-FIPS209
        (C:\Build-OpenSSL-FIPS209 will contain the build results when invoking 'INSTALL'. See below.)

    -ms\do_nasm  (ms\do_ms is NOT acceptable for FIPS-140-2 certification! Will use MASM instead of NASM)
        (For DEBUG versions then use flag debug-VC-WIN32 instead, then open ms\nt.mak after executing ms\do_nasm and replace all occurrences of /Zi with /Z7. There should be three replacements. For 64-bit, use VC-WIN64A and ms\do_win64a. If ECP source distros were used in generating the FIPS library in the first step, then    corresponding "FIPS capable" OpenSSL must be built with the no­ec2m option.)

    -nmake -f ms\nt.mak  (for static libs. To build shared libs use: ntdll.mak)

    -nmake -f ms\nt.mak install

11-完成。验证 (--prefix) 文件夹“C:\Build-OpenSSL-FIPS209”现在是否包含库、可执行文件和头文件。

于 2015-03-09T19:16:11.697 回答
0

在 openssl 文档中提到了此错误,表明您尚未创建和编译/链接适当的applink

或者,我认为如果您没有将 openssl 库与具有正确运行时的代码链接起来(例如 /MD 如果您正在编译 c/c++ 包装器代码),则可能会发生此错误。

于 2012-09-03T20:11:45.530 回答
-1

更好地使用这个: http: //sourceforge.net/projects/openssl-net/ - 它会为你节省很多问题。

OpenSSL 很复杂,因此 C# 包装器库非常有用。要使用 OpenSSL,您需要使用 pinvoke,这个库肯定会这样做。

或者,您可以使用外部实用程序 stunnel http://www.stunnel.org/index.html,或通过 exec() 使用 openssl direclty,这样您可以在每次操作时获得更高的稳定性,以防 .NET 库表现不佳.

真的建议使用 WIndows Crypto API - http://msdn.microsoft.com/en-us/library/windows/desktop/aa388162(v=vs.85).aspx因为它是基于标准的,它的工作原理相同方式,通过 C# 甚至 MSIE,使用系统证书存储库,它也可以导入和导出。

于 2012-09-03T20:33:08.803 回答