LibreSSL の OpenBSD 以外の BSD系 での利用はどうなっているでしょうか?
OpenBSD 以外の BSD系でも OpenSSL ではなく LibreSSL を利用する試みがなされています。
ここでは FreeBSD での LibreSSL の利用について確認してみます。
はじめに
FreeBSD での LibreSSL の利用については以下の Wiki に情報がまとめられています。
https://wiki.freebsd.org/LibreSSL
利用方法は大きく2つあって、Ports を LibreSSL を使ってビルドする方法と Base システム全体を LibreSSL で再構築してしまう方法です。
後者の全体を再構築する方法は、/usr/src 以下に LibreSSL でビルドするためのパッチを当てる、というものになっています。
再構築にかなり時間が掛かって(やってみたら6時間超掛かりました)お手軽ではありませんでした。
今回は前者の Ports を LibreSSL を使ってビルドする方法を確認してみます。
Ports の機能で LibreSSL と Apache 及び Nginx をインストールして動作確認してみます。
Ports の方法は自分の必要な部分だけを LibreSSL 化できるので使い勝手も良いと思います。
環境について
FreeBSD 10.3 (amd64) で検証しました。
FreeBSD-10.3-RELEASE-amd64-dvd1.iso でインストールしています。
確認の前に Ports を最新の状態にしておきました。
# portsnap fetch
# portsnap extract
# portsnap update
この状態で OpenSSL のファイルを確認しておくと以下のようになっています。
コマンド: /usr/bin/openssl
ライブラリ: /usr/lib/libssl.so.7 /lib/libcrypto.so.7
ヘッダファイル: /usr/include/openssl/
# openssl version
OpenSSL 1.0.1s-freebsd 1 Mar 2016
OpenSSL のファイルは /usr/ 配下にインストールされていることが分かります。
Ports を利用して LibreSSL をインストールする
方法は通常の Ports と同じです。
LibreSSL の Ports は /usr/ports/security/ 配下にあり2つのバージョンが用意されています。
libressl が安定版で libressl-devel が非安定板となっています。
各々のバージョンを distinfo ファイルで確認してみると、libressl が 2.3.5、libressl-devel が 2.4.0 となっていました。
今回は、最新の 2.4.0 を試したいので libressl-devel を選択してみます。
インストール手順は以下のようになります。
# cd /usr/ports/security/libressl-devel
# make install
この状態で LibreSSL のファイルを確認しておくと以下のようになっています。
コマンド: /usr/local/bin/openssl
ライブラリ: /usr/local/lib/libssl.so.39 /usr/local/lib/libcrypto.so.38
ヘッダファイル: /usr/local/include/openssl/
# /usr/local/bin/openssl version
LibreSSL 2.4.0
LibreSSL のファイルは /usr/local/ 配下にインストールされていることが分かります。
Ports を利用して LibreSSL とリンクした Apache HTTP サーバをインストールする
Ports に www/apache24 として 2.4.20 が用意されていますのでこれをインストールしてみます。
インストール
まず LibreSSL をリンクするように以下の設定を行います。
WITH_OPENSSL_PORT= yes
OPENSSL_PORT= security/libressl-devel
次に Apache をインストールします。
# cd /usr/ports/www/apache24
# make install
Apache も /usr/local/ 配下にインストールされます。
また、LibreSSL とリンクされていることが以下で分かります。
# ldd /usr/local/libexec/apache24/mod_ssl.so
/usr/local/libexec/apache24/mod_ssl.so:
libssl.so.39 => /usr/local/lib/libssl.so.39 (0x801633000)
libcrypto.so.38 => /usr/local/lib/libcrypto.so.38 (0x801892000)
libcrypt.so.5 => /lib/libcrypt.so.5 (0x801c8e000)
libthr.so.3 => /lib/libthr.so.3 (0x801eae000)
libc.so.7 => /lib/libc.so.7 (0x800821000)
#
SSL/TLS 通信の設定
SSL/TLS 通信のための設定を行います。
以下に示す行の先頭の '#' を削除しています。
...(略)...
89 LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
...(略)...
143 LoadModule ssl_module libexec/apache24/mod_ssl.so
...(略)...
512 Include etc/apache24/extra/httpd-ssl.conf
...(略)...
LibreSSL の openssl
コマンドを使って秘密鍵とサーバ証明書(自己署名証明書、いわゆるオレオレ証明書)を生成します。
# /usr/local/bin/openssl genrsa -out server.key 2048
# /usr/local/bin/openssl req -new -key server.key -out server.csr
# /usr/local/bin/openssl x509 -days 30 -req -signkey server.key -in server.csr -out server.crt
生成したサーバの鍵と証明書を配置します。
# mv server.key /usr/local/etc/apache24/
# smv server.crt /usr/local/etc/apache24/
Apache の起動を許可する設定を行っておきます。
# echo 'apache24_enable="YES"' >> /etc/rc.conf
設定は以上で完了です。
動作確認
以下のコマンドで Apache を起動します。
# /usr/local/sbin/apachectl start
Web ブラウザで https を指定してアクセスすると、"It works!" が表示されるのが分かると思います。
また、以下のように openssl s_client コマンドで SSL/TLS 通信の確認をすることもできます。
# /usr/local/bin/openssl s_client -port 443 -cipher 'CHACHA20'
...
---
SSL handshake has read 1588 bytes and written 378 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-CHACHA20-POLY1305
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-CHACHA20-POLY1305
...
Ports を利用して LibreSSL とリンクした Nginx をインストールする
Ports に www/nginx-devel として 1.11.1 が用意されていますのでこれをインストールしてみます。
インストール
LibreSSL をリンクするため以下の設定をしておくのは同様です。
WITH_OPENSSL_PORT= yes
OPENSSL_PORT= security/libressl-devel
次に Nginx をインストールします。
# cd /usr/ports/www/nginx-devel
# make install
Nginx も /usr/local/ 配下にインストールされます。
SSL/TLS 通信の設定
SSL/TLS 通信のための設定を行います。
以下に示す行の先頭の '#' を削除しています。
...(略)...
98 # HTTPS server
99 #
100 server {
101 listen 443 ssl;
102 server_name localhost;
103
104 ssl_certificate cert.pem;
105 ssl_certificate_key cert.key;
106
107 ssl_session_cache shared:SSL:1m;
108 ssl_session_timeout 5m;
109
110 ssl_ciphers HIGH:!aNULL:!MD5;
111 ssl_prefer_server_ciphers on;
112
113 location / {
114 root /usr/local/www/nginx;
115 index index.html index.htm;
116 }
117 }
...(略)...
LibreSSL の openssl
コマンドを使って秘密鍵とサーバ証明書(自己署名証明書、いわゆるオレオレ証明書)を生成します。
# /usr/local/bin/openssl genrsa -out server.key 2048
# /usr/local/bin/openssl req -new -key server.key -out server.csr
# /usr/local/bin/openssl x509 -days 30 -req -signkey server.key -in server.csr -out server.crt
生成したサーバの鍵と証明書を配置します。
# mv server.key /usr/local/etc/nginx/cert.key
# mv server.crt /usr/local/etc/nginx/cert.pem
設定は以上で完了です。
動作確認
以下のコマンドで Nginx を起動します。
# /usr/local/sbin/nginx
Web ブラウザで https を指定してアクセスすると、"Welcome to nginx!" が表示されるのが分かると思います。
また、以下のように openssl s_client コマンドで SSL/TLS 通信の確認をすることもできます。
# /usr/local/bin/openssl s_client -port 443 -cipher 'CHACHA20'
...
SSL handshake has read 1492 bytes and written 298 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-CHACHA20-POLY1305
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-CHACHA20-POLY1305
...
まとめ
最新の FreeBSD 10.3 では Ports を使うと簡単に LibreSSL が導入できることを確認しました。
バージョンも安定版と非安定版のどちらか使いたい方を選択できるようになっています。
また Apache や Nginx 等の Webサーバも、Ports を使えば LibreSSL とリンクしたものを容易にインストールできることが分かりました。
今後、FreeBSD 上で SSL/TLS 通信が必要となる場合、標準の OpenSSL だけでなく、LibreSSL も候補として検討することができるでしょう。