サーバ認証の実現

サーバー認証とは

WWWある人が銀行のホームページに接続して、振込みの処理などを 行う場合には、接続している相手が間違いなく、自分が利用している 銀行のサーバであることが確認できなければ、安心して通信できません。 銀行になりすました人に暗証番号を盗まれる可能性があるからです。

このために、自分は「○○銀行のサーバ」といっているそのサーバは 確かに○○銀行のWWWサーバか身分証明書を提示させて確認するのが サーバ認証です。

さらに認証だけでなく、認証後の通信において暗号通信を行うために もサーバ証明書が用いられます.証明書内にはサーバの公開鍵が 収められていますが,クライアントとサーバ間の通信の暗号化では その公開鍵を使うのです。

作業の手順

サーバ認証を行う環境を作るには,以下の手順で処理を行います.

処理内容処理する人
鍵ペア(秘密鍵と公開鍵)とCSR(証明書要求)を作成し、CSRをCAに送る サーバの管理者
受け取ったCSRから証明書を作り,要求者に送り返すCAの管理者
CAから受け取った証明書と秘密鍵をサーバに組み込むサーバの管理者
CAが公開しているCA自身の証明書をクライアントに組み込んで、 サーバにアクセスする (よく知られているCAについては、ブラウザに最初から そのCAの証明書が組み込まれているならこの処理は不要) クライアント

一般に広く信頼されているCAに依頼してサーバ証明書を発行してもらう場合は この手順が必要です.

しかし、自分で立ち上げたCAで処理を行う場合もこの方法で処理を行います. ただ、一人でサーバ管理者の役割とCAの管理者の役割を担当することになり、 処理をする際に同じマシン上で、同じユーザ(rootなど)で 作業をする場合があります。

この際にどんな立場でどんな処理を行っているか認識していないと、 どの秘密鍵はだれが所有しているのかとか、 どの証明書をどこに置くのかなどを間違ってしまう場合があります。 例えば,CAの秘密鍵とサーバの秘密鍵は区別して、アクセスモードも それに応じた設定をするべきですし、CAの証明書とサーバの証明書も 混同してはなりません。

それで、以下に自分で構築したCAによるサーバ認証の環境を作る 作業を説明しますが,各処理を行う際に、 自分がどんな立場でコマンドを実行しているのか 認識するようにしてください。

鍵ペアとCSRの作成

以下のコマンドを実行してCSRの作成します。 この処理は証明するサーバの管理者 の立場で実行します。

% openssl req -new -keyout key.pem -out csr.pem

これにより、秘密鍵を収めたファイルがkey.pemに 公開鍵とサーバの情報が入った証明書要求(CSR)が csr.pemにできます。この証明書要求(CSR)の中には公開鍵と 証明する内容が含まれています.

このcsr.pemをCAに送って署名してもらい証明書を作ってもらいます. (自分でCAをやっている場合は、異なる立場の自分に依頼していることを 意識して、処理を進めるとといいと思います)

CSRに署名し,証明書を作る

次にCSRに署名して証明書を作ります. この処理はCAの管理者の立場で実行します。 それで、CAの管理者がアクセスできるCAの秘密鍵にアクセス権限が ある状態でコマンドを実行します。さらに途中で CAの秘密鍵のパスフレーズを 入力する必要があります。

# openssl ca -out cert.pem -infiles csr.pem

これでcert.pemという証明書ができあがりました。 この証明書をサーバの管理者に渡します. (自分でCAをやっている場合は、ここでまた立場が変わることを 念頭においてください)

証明書と秘密鍵をサーバに組み込む

CSRを作った際にできた秘密鍵(上の場合だとkey.pem)とCAに から受け取った証明書をサーバに組み込みます。

apacheで作ったWWWサーバに組み込むため例を示します. これを行うにはhttpd.confに"SSLEnable"などを含むSSLを使う設定をします。 (これについては Apache-SSLの設定を参照してください)

その設定の中で,証明書と秘密鍵に関する項目は以下の部分です。

SSLCertificateFile このサーバの証明書のファイルのパスを指定します
SSLCertificateKeyFile このサーバの秘密鍵を収めたファイルのパスを指定します。 (証明書のファイルに秘密鍵が含まれている場合は設定する必要はありません)

設定の例を示します.

SSLCertificateFile      /usr/local/apache/ssl/certs/cert.pem 
SSLCertificateKeyFile   /usr/local/apache/ssl/private/key.pem

設定が終了したらhttpdを起動すればOKです。起動時には サーバの秘密鍵のパスフレーズが聞かれるので、 それを入力してください。

クライアントにCAの証明書を組み込む

ここで組み込むのはCAの証明書であって、 サーバの証明書ではありません。サーバの証明書はSSL通信の最初に サーバからクライアントへ送られます。

ダウンロードする方法

/usr/local/apache/htdocs/certs/

DERの形式の証明書は # openssl x509 -inform pem -outform der -in cacert.pem -out cacert.der で作る

  AddType application/x-x509-ca-cert .crt
  AddType application/x-pkcs7-crl    .crl

LDAPで組み込む方法

手動で組み込む方法

自己署名型証明書を使う方法

サーバの管理者がCAを兼ねている場合は、自己署名型の証明書を使う場合は 以下の処理だけでサーバ認証がようにもっと簡単です。

処理内容処理する人
鍵ペアと自己署名型証明書を作るCAの管理者
秘密鍵と証明書をサーバに組み込むサーバの管理者

サーバの認証が不要でSSLによる暗号化通信の機能だけでよいという場合は これでとりあえず実現できます。

 

Copyright (C)2001 Takeshi FUJIKI