14.9. OpenSSL

執筆: Rhodes Tom [FAMILY Given].

多くのユーザが見落としがちな機能の一つが、 FreeBSD に含まれている OpenSSL ツールキットです。 OpenSSL は、 通常の通信層の上位にあるトランスポート層を暗号化し、 多くのネットワークアプリケーションおよびサービスと組み合わせて使用できます。

OpenSSL は、 メールクライアントの暗号化された認証、 クレジットカードでの支払いといったウェブベースの取引などで使われます。 www/apache13-ssl および mail/sylpheed-claws といった多くの port では、 OpenSSL とともに構築するコンパイルに対応しています。

注記:

多くの場合、Ports Collection は、 make の WITH_OPENSSL_BASE 変数が明示的に yes に設定されていないと、 security/openssl の構築を試みます。

FreeBSD に含まれている OpenSSL  のバージョンは、Secure Sockets Layer v2/v3 (SSLv2/SSLv3) や Transport Layer Security v1 (TLSv1) ネットワークセキュリティプロトコルに対応しており、 アプリケーションで利用するための多目的な暗号化ライブラリとして使うことができます。

注記:

OpenSSL は、 IDEA アルゴリズムに対応していますが、 合衆国の特許により、デフォルトでは無効になっています。 もし使用したいのであれば、ライセンス条項を必ず確認し、 ライセンス条項に合致するのであれば、 MAKE_IDEA 変数を設定してください。

おそらく最も一般的な OpenSSL の利用方法のひとつは、 ソフトウェアアプリケーションが使えるように証明書を提供することです。 これらの証明書により、 会社または個人の公開鍵が、 改ざんやなりすましが行われていないことを確認できます。 もし問題となっている証明書が、認証局 または CA により検証されなければ、 通常警告が表示されます。 認証局は、VeriSign のような会社で、 個人または会社の公開鍵の検証を行えるように、 証明書に署名を行います。 証明書を作成するには費用がかかり、 証明書の使用は必ずしも必要条件ではありません。 しかしながら、証明書を使うことで、 疑り深いユーザを安心させることができます。

14.9.1. 証明書の作成

以下のコマンドにより、証明書を作成できます。

# openssl req -new -nodes -out req.pem -keyout cert.pem
Generating a 1024 bit RSA private key
................++++++
.......................................++++++
writing new private key to 'cert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:PA
Locality Name (eg, city) []:Pittsburgh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Systems Administrator
Common Name (eg, YOUR name) []:localhost.example.org
Email Address []:trhodes@FreeBSD.org

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:SOME PASSWORD
An optional company name []:Another Name

Common Name プロンプト直後に表示されているのは、 ドメイン名です。 このプロンプトでは、検証するサーバ名の入力が必要となります。 ドメイン名以外を入力すると、役に立たない証明書が作成されます。 他には、有効期限を指定したり、 別の暗号化アルゴリズムを選択することができます。 openssl(1) マニュアルページには、 オプションの完全なリストを。

前述のコマンドを実行したディレクトリに、 req.pem ファイルが作成されます。 このファイルは、 署名のために CA に送ることのできる証明書署名要求 (certificate request) です。

CA の署名が必要ない場合には、 自己署名証明書を作成できます。 最初に CA の鍵を生成してください。

# openssl gendsa -des3 -out \
myca.key 1024

この鍵を使って証明書を作成してください。

# openssl req -new -x509 -days 365 -key \
myca.key -out new.crt

新しく 2 つのファイルがこのディレクトリに作成されます。 プライベート鍵 myca.key および 証明書 new.crt です。 これらのファイルを、(好ましくは /etc 以下で) root のみが読むことのできるディレクトリに置く必要があります。 chmod ユーティリティを使って許可属性を 0600 に設定してください。

14.9.2. 証明書の使用例

これらのファイルで何ができるでしょうか? 効果的な利用方法は、 Sendmail MTA への接続を暗号化することでしょう。 これにより、 ローカルの MTA 経由でメールを送信するユーザが、 テキスト認証を使用しなくてもすむようになります。

注記:

いくつかの MUA は、 証明書がローカルにインストールされていない場合に、 ユーザに対して、エラーを出力するので、 完全に最善の利用方法というわけではありません。 証明書のインストールに関する詳細な情報については、 ソフトウェアに付随の文書を参照してください。

以下の行をローカルの .mc ファイルに入れてください。

dnl SSL Options
define(`confCACERT_PATH',`/etc/certs')dnl
define(`confCACERT',`/etc/certs/new.crt')dnl
define(`confSERVER_CERT',`/etc/certs/new.crt')dnl
define(`confSERVER_KEY',`/etc/certs/myca.key')dnl
define(`confTLS_SRV_OPTIONS', `V')dnl

ここで /etc/certs/ は、証明書および鍵ファイルが保存されているローカルのディレクトリです。 最後に、ローカルの .cf ファイルを再構築する必要があります。 /etc/mail ディレクトリで、 make install と入力すると再構築できます。 その後、make restart と入力して、 Sendmail デーモンを再起動してください。

すべてがうまくいっていれば、 /var/log/maillog ファイルにはエラーメッセージは出力されず、 Sendmail がプロセスの一覧に表示されます。

以下は簡単な試験の例で、telnet(1) ユーティリティを使って、 メールサーバに接続しています。

# telnet example.com 25
Trying 192.0.34.166...
Connected to  example.com
Escape character is '^]'.
220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT)
ehlo example.com
250-pittgoth.com Hello example.com [192.0.34.166], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
quit
221 2.0.0 example.com closing connection
Connection closed by foreign host.

すべてが適切に動いていれば、出力に STARTTLS 行が表示されます。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。