Я создал контейнер OpenSSL FIPS версии 2.0.1, а затем с помощью этого контейнера собрал OpenSSL 1.0.1c (в соответствии с инструкциями в Руководстве пользователя для объектного модуля OpenSSL FIPS версии 2.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?