libjpeg以来のオープンソース編・・・。
OpenSSLは、SSL通信を実現するためのオープンソースライブラリ・・・。
まずは非セキュアな接続から始めてみる・・・。
今回は、
OpenSSL API によるセキュア・プログラミング: 第 1 回 API の概要
を参考に、BIO_new_connectで接続の作成を行う・・・。
/docs/man1.0.2/crypto/BIO_new_connect.html
OpenSSL自体は、手元のFedoraに入っているが、ヘッダなどが無いので、
$ sudo yum install openssl-devel [sudo] xxx のパスワード: Yum command has been deprecated, redirecting to '/usr/bin/dnf install openssl-devel'. See 'man dnf' and 'man yum2dnf' for more information. To transfer transaction metadata from yum to DNF, run: 'dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate' メタデータの期限切れの確認は、1:01:43 時間前の Thu Apr 13 15:58:33 2017 に実施しました。 依存性が解決されました。 ================================================================================ Package アーキテクチャ バージョン リポジトリ 容量 ================================================================================ インストール: keyutils-libs-devel x86_64 1.5.9-8.fc24 fedora 46 k krb5-devel x86_64 1.14.1-6.fc24 fedora 652 k libcom_err-devel x86_64 1.42.13-4.fc24 fedora 36 k libselinux-devel x86_64 2.5-3.fc24 fedora 192 k libsepol-devel x86_64 2.5-3.fc24 fedora 79 k libverto-devel x86_64 0.2.6-6.fc24 fedora 16 k openssl-devel x86_64 1:1.0.2k-1.fc24 updates 1.5 M pcre-devel x86_64 8.38-11.fc24 fedora 543 k zlib-devel x86_64 1.2.8-10.fc24 fedora 55 k トランザクションの要約 ================================================================================ インストール 9 パッケージ 総ダウンロード容量: 3.1 M インストールされる容量: 6.9 M これでいいですか? [y/N]: y パッケージをダウンロードしています: (1/9): zlib-devel-1.2.8-10.fc24.x86_64.rpm 107 kB/s | 55 kB 00:00 (2/9): libselinux-devel-2.5-3.fc24.x86_64.rpm 274 kB/s | 192 kB 00:00 (3/9): libsepol-devel-2.5-3.fc24.x86_64.rpm 107 kB/s | 79 kB 00:00 (4/9): keyutils-libs-devel-1.5.9-8.fc24.x86_64. 61 kB/s | 46 kB 00:00 (5/9): libcom_err-devel-1.42.13-4.fc24.x86_64.r 61 kB/s | 36 kB 00:00 (6/9): libverto-devel-0.2.6-6.fc24.x86_64.rpm 111 kB/s | 16 kB 00:00 (7/9): krb5-devel-1.14.1-6.fc24.x86_64.rpm 82 kB/s | 652 kB 00:07 (8/9): pcre-devel-8.38-11.fc24.x86_64.rpm 54 kB/s | 543 kB 00:09 (9/9): openssl-devel-1.0.2k-1.fc24.x86_64.rpm 80 kB/s | 1.5 MB 00:19 -------------------------------------------------------------------------------- 合計 151 kB/s | 3.1 MB 00:20 トランザクションの確認を実行中... トランザクションの確認に成功しました。 トランザクションのテストを実行中... トランザクションのテストに成功しました。 トランザクションを実行中... インストール : pcre-devel-8.38-11.fc24.x86_64 1/9 インストール : libverto-devel-0.2.6-6.fc24.x86_64 2/9 インストール : libcom_err-devel-1.42.13-4.fc24.x86_64 3/9 インストール : keyutils-libs-devel-1.5.9-8.fc24.x86_64 4/9 インストール : libsepol-devel-2.5-3.fc24.x86_64 5/9 インストール : libselinux-devel-2.5-3.fc24.x86_64 6/9 インストール : krb5-devel-1.14.1-6.fc24.x86_64 7/9 インストール : zlib-devel-1.2.8-10.fc24.x86_64 8/9 インストール : openssl-devel-1:1.0.2k-1.fc24.x86_64 9/9 検証中 : openssl-devel-1:1.0.2k-1.fc24.x86_64 1/9 検証中 : zlib-devel-1.2.8-10.fc24.x86_64 2/9 検証中 : krb5-devel-1.14.1-6.fc24.x86_64 3/9 検証中 : libselinux-devel-2.5-3.fc24.x86_64 4/9 検証中 : libsepol-devel-2.5-3.fc24.x86_64 5/9 検証中 : keyutils-libs-devel-1.5.9-8.fc24.x86_64 6/9 検証中 : libcom_err-devel-1.42.13-4.fc24.x86_64 7/9 検証中 : libverto-devel-0.2.6-6.fc24.x86_64 8/9 検証中 : pcre-devel-8.38-11.fc24.x86_64 9/9 インストール済み: keyutils-libs-devel.x86_64 1.5.9-8.fc24 krb5-devel.x86_64 1.14.1-6.fc24 libcom_err-devel.x86_64 1.42.13-4.fc24 libselinux-devel.x86_64 2.5-3.fc24 libsepol-devel.x86_64 2.5-3.fc24 libverto-devel.x86_64 0.2.6-6.fc24 openssl-devel.x86_64 1:1.0.2k-1.fc24 pcre-devel.x86_64 8.38-11.fc24 zlib-devel.x86_64 1.2.8-10.fc24 完了しました! $
openssl-develをインストール・・・。
BIO_new_connect.cで、
非セキュアでもセキュアでもBIO構造体を通して行う・・・。
BIO_new_connectにサーバ名とポート番号を指定して、戻り値のBIO構造体へのポインタをbioに格納する・・・。
(今回は443を指定しているが、非セキュアな接続で使うものなので80のほうが正しいかも・・・。とはいえ、443でもオープンはできる・・・。)
bioがNULLならエラー処理・・・。
NULLでなければ成功で、接続の作成ができたので、"BIO_new_connect success!"とともにポインタbioのアドレス値を出力・・・。
BIO_free_allは、開いたソケットをクローズして、さらにbioの参照先メモリを解放する・・・。
これで、libsslとlibcryptoをリンクしてコンパイルして実行・・・。
$ vi BIO_new_connect.c $ gcc -o BIO_new_connect BIO_new_connect.c -lssl -lcrypto $ ./BIO_new_connect BIO_new_connect success! bio = 01963030 $
こんな感じで、bioが取得出来たので、とりあえず接続の作成はできた模様・・・。