トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

OpenSSL覚書

OpenSSL覚書

OpenSSLを使用して、SSLを使った通信を行う覚書です。「RenderMail」プラグインで利用している部分の補足になります。

OpenSSLのソースの取得

http://www.openssl.org/

のSourceから「openssl-1.0.1e.tar.gz」を取得。これを解凍すると、「openssl-1.0.1e」というディレクトリ内にソースやINSTALLファイルなどが展開されます。

ここでは、C/C++言語向けのstaticライブラリを生成するものとします。

Windowsでのビルド

参考サイトは以下。

http://developer.covenanteyes.com/building-openssl-for-visual-studio/
  • Visual Studio 2010のインストール
  • ActivePerlのインストール

が必要です。

32bit/64bit版のライブラリを別々に生成します。展開した「openssl-1.0.1e」ディレクトリをまるごとコピーし、「openssl-1.0.1e_32bit」「openssl-1.0.1e_64bit」ディレクトリを作成。

32bit版のビルド

スタートメニューからVisualStudio 2010の「Visual Studio Tools」の「Visual Studioコマンドプロンプト (2010)」を起動。これで、nmakeなどのコマンドがコマンドラインで使えるようになります。

perl -v

と入力して、perlが使用できるのを確認します。

次にコマンドラインで以下を実行。

cd openssl-1.0.1e_32bit
perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32 no-asm
ms\do_ms
nmake -f ms\nt.mak
nmake -f ms\nt.mak install

と指定すると、「C:\Build-OpenSSL-VC-32」ディレクトリにincludeファイルとlibファイルが生成されています。

このディレクトリ内で必要なファイルは、「include ディレクトリ」「lib/libeay32.lib」「lib/ssleay32.lib」。

64bit版のビルド

スタートメニューからVisualStudio 2010の「Visual Studio Tools」の「Visual Studio x64 Win64 コマンド プロンプト (2010)」を起動。これで、nmakeなどのコマンドがコマンドラインで使えるようになります。

perl -v

と入力して、perlが使用できるのを確認します。

次にコマンドラインで以下を実行。

cd openssl-1.0.1e_64bit
perl Configure VC-WIN64A --prefix=C:\Build-OpenSSL-VC-64 no-asm
ms\do_win64a
nmake -f ms\nt.mak
nmake -f ms\nt.mak install

と指定すると、「C:\Build-OpenSSL-VC-64」ディレクトリにincludeファイルとlibファイルが生成されています。

このディレクトリ内で必要なファイルは、「lib/libeay32.lib」「lib/ssleay32.lib」。

libeay32.lib ==> libeay64.lib
ssleay32.lib ==> ssleay64.lib

と名前変更しておきます。includeディレクトリは、32bit版と同じものです。

Macでのビルド

32bit/64bitをあわせたUniversal Binary形式でstaticライブラリを作ることにします。

参考サイトは以下。

https://gist.github.com/tmiz/1441111
  • XCode 4.6.3

でMac OS 10.8.4上で試しました。XCodeはもしかしたら「Command Line Tools」が必要だったかもしれません(インストールした記憶があいまい)。

Win同様に、32bit/64bit版のライブラリを別々に生成します。展開した「openssl-1.0.1e」ディレクトリをまるごとコピーし、「openssl-1.0.1e_32bit」「openssl-1.0.1e_64bit」ディレクトリを作成。

/Users/hoehoe/openssl
  openssl-1.0.1e_32bit
  openssl-1.0.1e_64bit

のようにディレクトリを配置したとします。

ターミナルを開いて、

perl -v

と入力してPerlが利用できるのを確認。

cd /Users/hoehoe/openssl

cd openssl-1.0.1e_32bit
./Configure darwin-i386-cc
make
cd ../

cd openssl-1.0.1e_64bit
./Configure darwin64-x86_64-cc
make
cd ../

lipo -create openssl-1.0.1e_32bit/libcrypto.a openssl-1.0.1e_64bit/libcrypto.a -output libcrypto.a

lipo -create openssl-1.0.1e_32bit/libssl.a openssl-1.0.1e_64bit/libssl.a -output libssl.a

これで「/Users/hoehoe/openssl」ディレクトリに、「libcrypto.a」「libssl.a」が生成されました。

file libcrypto.a
file libssl.a

と入力して、32bit(i386)/64bit(x86_64)の両方が含まれるのを確認してください。この2つが、Macで使用するOpenSSLファイルのstaticライブラリになります。

includeファイルは、Windowsのと同じです。

まとめ

これで、Windowsの32bit/64bit版のstaticライブラリ、MacのUniversal Binary形式(32bit/64bit)のstaticライブラリとincludeファイルが生成されました。

include
  openssl
    aes.h
    asn1.h
    ...
lib
  libcrypto.a
  libssl.a
  libeay32.lib
  libeay64.lib
  ssleay32.lib
  ssleay64.lib

のように配置して、これをプログラムで利用するようにします。

使用例は「RenderMail」プラグインのソースを見ると分かりやすいかと思います。SSLを使わないサーバとポートを指定したソケット通信もできますので、WinSock2などを使わずにOpenSSLで通信部は統一する、なんてことができます。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.