|||||||||||||||||||||

なんぶ電子

- 更新: 

Windows用のOpenSSLをビルドする

OpenSSL Windows Build

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フォルダもパスを通しておきます。

Pathの設定
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)

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告