Introduction

備忘録。
OpenSSL (1.X 系) を Windows 環境で実行した際、なぜかエラーで動かなかった。
エラーは下記。

1
2
3
4
5
Error configuring OpenSSL
5824:error:25078067:DSO support routines:WIN32_LOAD:could not load the shared library:.\crypto\dso\dso_win32.c:179:filename(providers.dll)
5824:error:25070067:DSO support routines:DSO_load:could not load the shared library:.\crypto\dso\dso_lib.c:233:
5824:error:0E07506E:configuration file routines:MODULE_LOAD_DSO:error loading dso:.\crypto\conf\conf_mod.c:271:module=providers, path=providers
5824:error:0E076071:configuration file routines:MODULE_RUN:unknown module name:.\crypto\conf\conf_mod.c:212:module=providers

ところが全く同じバイナリを使っても、上記のエラーが表示される環境とそうでない環境があり、非常に混乱した。

How to resolve?

原因は 2 つ。

  • OpenSSL の 3.X 系がシステムにインストールされている
  • 環境変数 OPENSSL_CONFC:\Program Files\OpenSSL-Win64\bin\openssl.cfg が指定されている

Windows のビルド済みインストーラは Win32/Win64 OpenSSL Installer for Windows が有名だが、これらを使ってシステムにインストールする。
インストールしただけでは、環境変数 OPENSSL_CONF が設定されることはないが、自分の環境はいつの間にか値が設定されていた。

環境変数あり

1
2
3
4
5
6
7
8
9
$ openssl.exe version
OpenSSL 1.0.2u 20 Dec 2019
$ set OPENSSL_CONF=C:\Program Files\OpenSSL-Win64\bin\openssl.cfg
$ openssl.exe md5 < HashInfo.txt
Error configuring OpenSSL
4652:error:25078067:DSO support routines:WIN32_LOAD:could not load the shared library:.\crypto\dso\dso_win32.c:179:filename(providers.dll)
4652:error:25070067:DSO support routines:DSO_load:could not load the shared library:.\crypto\dso\dso_lib.c:233:
4652:error:0E07506E:configuration file routines:MODULE_LOAD_DSO:error loading dso:.\crypto\conf\conf_mod.c:271:module=providers, path=providers
4652:error:0E076071:configuration file routines:MODULE_RUN:unknown module name:.\crypto\conf\conf_mod.c:212:module=providers

環境変数なし

1
2
3
4
5
$ openssl.exe version
OpenSSL 1.0.2u 20 Dec 2019
$ openssl.exe md5 < HashInfo.txt
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
(stdin)= 9d11ead97f01b218d3af8cf65dc4aebc

原因

設定ファイル C:\Program Files\OpenSSL-Win64\bin\openssl.cfg を修正して対処することもできる。

1
2
- providers = provider_sect
+ #providers = provider_sect

これで

1
2
3
4
$ openssl.exe version
OpenSSL 1.0.2u 20 Dec 2019
$ openssl.exe md5 < HashInfo.txt
(stdin)= 9d11ead97f01b218d3af8cf65dc4aebc

正常に動く。

設定ファイルとエラー名を見る限り、 providers.dllproviders = provider_sect が関わっていそうな感じはして試しに、設定を消したら動いた次第。
1.X 系のインストーラであれば 環境変数 OPENSSL_CONFC:\Program Files\OpenSSL-Win64\bin\openssl.cfg が設定されていても問題ない。