Windows用のOpenSSLをビルドする
Windows用のOpenSSLバイナリが欲しいと思った時、手っ取り早い取得方法にApacheなどWindows用のOpenSSLを同梱しているアプリをダウンロードする方法がありますが、最新のバージョンの3.03が同梱されているものが見当たらなかったので、今回ビルドしてみました。
OpenSSLはgithubにも公開されていて、Windowsでのビルドの方法も紹介されていますので、それにしたがって作業していいきます。
先のページにはいくつかのビルドツールとそれぞれの方法が紹介されていますが、ここではVC++を使います。VC++でビルドする場合に、必要な環境は次の通りです。
ビルド環境の準備
- Perl
「Strawberry perl」の利用を推奨されているのでそれを使います。執筆時点のバージョンは5.32.1.1でした。
- MSVC(MicroSoft Visual C) Compiler
MSVCコンパイラはIDEが付属しないスタンドアローン版も配布されているそうです。その場合はMicrosoft Visual Studioダウンロードのページから、「その他のツール」、「Build Tools for Visual Studio 2022」をダウンロードします。
また可能な限り新しいものを利用してくださいとのことです。
- NASM
NASMはアセンブラです。アセンブラはアセンブラ語をマシン語に変換するものです。
アセンブラに関しての知識は今回のビルドには必要ありませんが、詳しく知りたいなら「だれでも一度はアセンブラを学んでおこう!」の記事がわかりやすかったです。
nasm.usの「download」のリンクから「releasebuilds/2.15.05(バージョン)/win64(アーキテクチャ)/nasm-2.15.05-installer-x64.exe」をダウンロードしてインストールしました。
ローカルユーザーだけでもビルドできますが、もしnasmを全ユーザーが使えるようにインストールしたい場合には管理者権限で起動させてください。
インストールが終わったら、NASM.exeにパスを通します。今回筆者はローカルユーザーにインストールしましたので、バイナリはC:¥Users¥kosystem¥AppData¥Local¥bin¥NASMにありました。ローカルにインストールしたので環境変数も「ユーザー環境変数」にしました。
ビルド
必要なソースをOpenSSLのサイトからダウンロードして展開します。
圧縮形式がtar.gzしかありませんが、7-Zipなどのアーカイバで適切に展開すればWindowsで問題なく利用できます。7zipだとtar.gzからtar、tarからソースと二段階の展開が必要になります。
展開されたフォルダがd:¥openssl-3.0.3であると仮定して進めます。
VCのビルド用の環境変数の設定をします。vcvarsall.batに引数を渡すと自動で設定してくれます。
ここで渡す引数は
- x86
32ビット(x86)用のツールを利用して32ビット用のコードをビルドをします。
- x86_x64
32ビット(x86)用のツールを利用して64ビット(x64)用のコードをビルドをします。
- x64
64ビット用のツールを利用して64ビット用のコードをビルドをします。
- x64_x86
64ビット用のツールを利用して32ビット用のコードをビルドをします。
このバッチファイルは筆者の環境では、「C:¥Program Files¥Microsoft Visual Studio¥2022¥Community¥VC¥Auxiliary¥Build」にありました。
以前DebianでBuild Essentialを使ってClamAVをビルドしたことがありましたが、./configureを実行して各種設定をしたように、perl Configureを使ってWindows上で設定をします。
nmakeはVisual Studioの実行ファイルで、Debianのmakeと同様の作業をWindowsのコマンドプロンプト上で実行します。
d:¥openssl-3.0.3>"C:¥Program Files¥Microsoft Visual Studio¥2022¥Community¥VC¥Auxiliary¥Build¥vcvarsall.bat" x64 ********************************************************************** ** Visual Studio 2022 Developer Command Prompt v17.0.1 ** Copyright (c) 2021 Microsoft Corporation ********************************************************************** [vcvarsall.bat] Environment initialized for: 'x64' d:¥openssl-3.0.3>perl Configure VC-WIN64A ... d:¥openssl-3.0.3>nmake ... d:¥openssl-3.0.3>nmake test ... d:¥openssl-3.0.3>nmake install ...
makeやmake testは環境により時間がかかります。test時は最後に「result」として表示される結果が「PASS」なら成功です。
「namake install」はデフォルトではProgram Filesを編集するので、管理者権限での実行が必要です。もし、そこまでのbuildの過程で管理者権限を入れ忘れてしまったら、管理者権限のコマンドプロンプトを開いて再度「vcvars32.bat x64」を実行すれば、nmake installが実行できます。
もしインストール先を変更したいなら、PREFIXと、OPENSSLDIRという名前の環境変数を使います。
PREFIX: "C:¥Program Files¥OpenSSL" OPENSSLDIR: "C:¥Program Files¥Common Files¥SSL"
PREFIXに指定したフォルダにバイナリやライブラリ、HTML形式のドキュメント等が入ります。
OPENSSLDIRには発行した証明書を入れるためのcertフォルダや、openssl.cnf設定ファイルなどが配置されます。
また、先にStrawberry Perlをインストールしたと思いますが、実はこれにもOpenSSLのバイナリが含まれます。
そのため、コマンドプロンプトで、opensslを実行するとそのままではStrawberry Perlに同梱のOpenSSLが起動します。
コマンドプロンプトで、バイナリ名だけで実行した際どのバイナリを実行しているかを調べるにはwhereを使います。
d:¥openssl-3.0.3>where openssl C:¥Strawberry¥c¥bin¥openssl.exe d:¥openssl-3.0.3>openssl version OpenSSL 1.1.1i 8 Dec 2020
これを修正するには環境変数の設定で、C:¥Strawberry¥c¥binのエントリーより前に今回作成したOpenSSLバイナリのパスである「C:¥Program Files¥OpenSSL¥bin」を設定する必要があります。また、binフォルダの他libフォルダもパスを通しておきます。
d:¥openssl-3.0.3>where openssl C:¥Program Files¥OpenSSL¥bin¥openssl.exe C:¥Strawberry¥c¥bin¥openssl.exe d:¥openssl-3.0.3>openssl version OpenSSL 3.0.3 3 May 2022 (Library: OpenSSL 3.0.3 3 May 2022)