LibreSSL と Webサーバの組み合わせはまだまだ普及しておらず情報もあまり見かけません。
なので LibreSSL を使った SSL/TLS 対応の Webサーバの設定について調べてみます。
環境
最初から LibreSSL が組み込まれている OpenBSD ならとっても簡単!?
最新の OpenBSD 5.9 を使ってやってみました。
OS の入手
OpenBSD 5.9 のインストールは以下のサイトで一覧されている Mirror サイトから i386/install59.iso をダウンロードして行いました。
http://www.openbsd.org/ftp.html
httpd について
OpenBSD は 5.6 以降、ライク フローターさんという方が開発した独自の httpd を提供しており FastCGI と TLS がサポートされています。
HSTS (HTTP Strict Transport Security) にも対応しています。
(詳しくは man httpd
でマニュアルを参照)
この httpd の紹介スライド
Introducing OpenBSD's new httpd - AsiaBSDCon 2015 (PDF)
今回はこの httpd を使って、コンパイルや追加インストールなしでの SSL/TLS 対応 Webサーバの設定を紹介します。
設定手順
(1) サーバの秘密鍵と証明書を作る
LibreSSL の openssl
コマンドを使って秘密鍵とサーバ証明書(自己署名証明書、いわゆるオレオレ証明書)を生成します。
# openssl genrsa -out server.key 2048
# openssl req -new -key server.key -out server.csr
# openssl x509 -days 30 -req -signkey server.key -in server.csr -out server.crt
(2) サーバの秘密鍵と証明書を配置する
上で生成したサーバの秘密鍵と証明書を所定のディレクトリに置きます。
# mv server.key /etc/ssl/private/
# mv server.crt /etc/ssl/
(3) Webサーバの設定をする
httpd の設定ファイルを編集して、SSL/TLS 通信の設定を行います。
server "default" {
listen on * port 80
listen on * tls port 443
root "/htdocs"
tls certificate "/etc/ssl/server.crt"
tls key "/etc/ssl/private/server.key"
}
(上記以外の設定項目は man httpd.conf
で参照できます。)
(4) テスト用の html を作成する
テスト表示用に index.html を作成しておきます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>LibreSSL WWW TLS test</title>
</head>
<body>
<div align="center">
<img src="libressl.jpg">
<h1>LibreSSL WWW TLS test</h1>
</div>
</body>
</html>
これで設定は完了です。
動作確認
/etc/rc.d/httpd -f start
で Webサーバを起動して SSL/TLS 接続できるか動作確認してみます。
Web ブラウザで接続してみる
https (443番ポート) にアクセスするとテスト用に作成したhtmlが表示されるはずです。
s_client で接続してみる
SSL/TLS での通信を確認するために openssl s_client
で接続してみます。
暗号スイートとして 'CHACHA20' も指定してみました。
# openssl s_client -port 443 -cipher 'CHACHA20'
CONNECTED(00000003)
... <略> ...
---
No client certificate CA names sent
---
SSL handshake has read 1700 bytes and written 372 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
... <略> ...
TLSv1.2 と ECDHE-RSA-CHACHA20-POLY1305 で接続できていることを確認できました。
暗号スイートとして 'CAMELLIA' を指定することもできます。
まとめ
LibreSSL 使うなら OpenBSD が手っ取り早いというお話でした。
実際的なニーズとしては「Apache や Nginx で使いたい」でしょうか。
これらも調査していかないといけません。