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.