SSL用証明書の作成(Linux編)SSL用証明書の作成(Linux編)Window用にSSL用証明書の作成方法を見直しましたので、Linuxでも同様に見直しました。ここで、作成した証明書は、ApacheやPostfix、Courier-IMAP等のメールシステム、ProFTPD等で使用できますが、具体的な使用方法はそれぞれのコンテンツを参照してください。クライアントへのインストール方法は、こちらのコンテンツを参照してください。RedHat系の場合は、openssl-perlがインストールされていないとスクリプトが使用できないので、予め確認して必要ならインストールしてください。SuSEは、opensslがインストールされていればスクリプトもあわせてインストールされています。いうようにPATHが通っていないところにインストールされます。(11)」というエラーを吐いてブラウザで接続できませんでした。調べたり、SuSE9.0用のApacheの最新版RPM(2.0.52)を入れてみたりしましたが改善されず、最終的にソースから2.0.52を入れてみたところうまく動作しました。SuSE用のRPMは、SSL関係でいろいろパッチがあたっているので、その中のいずれかが関係していると思いますが原因は判明しておりません。おやじが試験した他のデストリやバージョンでは、問題ありませんでした。■プライベートCAの作成まず、認証の大元となる認証局(CA)を作成します。◆事前準備これからの作業の準備として、openssl.cnfの設定を行うとともに作業用ディレクトリを作成します。いうようにPATHが通っていないところにインストールされるので、作業前にPATHを通しておく。するため、コメントアウトを外して有効にする。emailCA」とするため、コメントアウトを外して有効にする。emailCA各証明書の有効期限を変更したい場合は、CA.pl内の下記のパラメータを変更する。(0.9.8xの場合)CA証明書CA証明書の有効期限は、$CADAYSの値を変更すればよい。)サーバ証明書等サーバ証明書等の有効期限は$DAYSを変更しただけでは駄目である。変更方法としては、以下の2つの方法がある。[方法1]CA.pl内の135/138/143行のsystemに下記のように$DAYSを追記し、$DAYSパラメータの値を変更する方法。)[方法2]CA.plはそのままにして、openssl.confのdefault_daysを変更する方法。CA.plの-signではデフォルトでは-daysの指定が無いので、openssl.confのdefault_daysで指定した値が適用される。)FedoraCore5の場合、スクリプト(CA.pl)で指定しているディレクトリがデフォルトから変更されているので、本ページ内の説明どおりに行うなら下記で修正しておく。本ページ内の内容を読み替えることができるないら、もちろんそのままでも良い。)続いて、各種証明書等を作成する際の作業用ディレクトリを作成する。配下で作業することとする。Updatedこの作業で以下のようなディレクトリ・ファイルが作成されるので、確認しておく。]◆サーバ用CA証明書(cacert.crt)の作成(0.9.8xの場合)0.9.8xの場合、サーバで使用するためには下記の操作でCA証明書(cacert.crt)だけを切り出しておく。0.9.7xの場合は、cacert.pemのまま使用できる。CA証明書のことなので、Apache等の説明で使用しているca.crtと同じ。./demoCA/cacert.crt◆CA証明書をブラウザにインポートするためのca.derファイルの作成CA証明書をブラウザにインポートするためのderファイルを、以下で作成する。このca.derファイルをこちらの手順でブラウザにインポートする。続いて、サーバ証明書を作成します。この証明書は、ホスト名が同一ならApacheやPostfix、ProFTPD等でそのまま使用できます。etc.)は、CNが異なりますのでそれぞれ異なるサーバとして作成する必要があります。ように変えて同じように作成すればよいと思います。Name)は、異なる名称にしないとうまく動作しないので注意が必要です。◆サーバ用秘密鍵(newkey.pem)の作成ここでは、CAに送るデジタル証明書のリクエストファイルを作成する。サーバ用秘密鍵のまま、SSL起動すると起動するたびにパスフレーズの入力が必要であり、セキュリティ上は好ましくありませんが、停電からの自動再起動時等に起動できなくなりますので、秘密鍵にパスフレーズを入れないよう、「-nodes」で作成します。(SuSE9.3の場合、newkey.pemは作成されないので、別途newreq.pemから切り出す作業が必要)ここで作成される「newkey.pem」がサーバ用の秘密鍵なので、Apache等で使用する場合(SSLCertificateKeyFileで指定するファイル)はこれを使用すればよい。ここのホスト名は、必ずhttps://・・・・等、アクセスする時のホスト名とすること。SuSE9.3の場合は、newkey.pem(秘密鍵)が作成されないので、下記で作成する。認証局の証明書とキーを使って、リクエストファイルからX.509サーバ証明書の作成と署名を行う。newcert.pemサーバで使用するために、下記の操作でサーバ証明書(server.crt)だけを切り出しておく。上記でApacheやPostfix等用のサーバ証明書が作成できますが、これを利用して以下の手順でメール用(Courier-IMAP)の証明書を作成します。◆メール用証明書(mail.pem)の作成メール用証明書(mail.pem)を、サーバ証明書と鍵から作成します。mail.pem◆サーバ用証明書等のバックアップできあがったサーバ用証明書等を適当な場所にバックアップしておく。続いて、Apache用のクライアント証明書の作成方法を示しますが、単に通信を暗号化(httpsでのアクセス)するだけなら上記作業だけで十分であり以下の作業は不要です。このクライアント用証明書によるクライアント認証を導入すると、予め認証局で署名されたクライアント用証明書を持たない端末がアクセスしても、接続そのものが拒否されるのでセキュリティ的にかなり強固になります。反面、クライアント毎に証明書を発行することになるので、運用はかなり面倒になりますが、セキュリティとのバータなので止むを得ません。このようなクライアント認証は、一般的に企業などで導入されており、具体例としてはwebを使用して外勤の営業マンが社外から社内システムにアクセスできるシステムや株取引のシステムなどに導入されています。このようなシステムの場合、不特定多数にアクセスされるとApacheの認証やアプリ認証だけではセキュリティが甘くなるため、アクセスレベルでセキュリティを強化するためにクライアント認証を導入します。クライアント証明書使用時のApacheの設定方法については、SSL用設定のページ(RedHat、SuSE)を参照ください。◆事前準備openssl.cnfの設定をクライアント証明書発行用に修正します。この作業をしないと、Netscapeにはインストールできません。email」のコメントアウトを外して有効にする。email◆クライアント用証明書作成用リクエストファイル(newreq.pem)の作成ここでは、CAに送るデジタル証明書のリクエストファイルを作成します。認証局の証明書とキーを使って、X.509クライアント証明書の作成と署名を行う。newcert.pemクライアント証明書を発行すると、index.txtに以下のような内容が追加され、クライアントが追加されるたびにこの内容も追加されていく。index.txtは後述する証明書の失効処理で使用されるデータベースなので、書き換えたりしないよう注意が必要である。鍵と証明書を安全に外部渡す(クライアントに渡す)ために、pkcs12という方法で鍵と証明書をひとつにまとめる。下記ではクライアント用の鍵と証明書に加え、CA証明書も合わせてひとつにまとめることができる。Export用のパスワードは、クライアントでの解凍用に、証明書と同様にクライアントに通知する(同一メールで送るなどということはやめよう)必要がある。「-pkcs12」の後ろには証明書の証明書のフレンドリ名(ここではoyaji)を指定する。newcert.p12作成したクライアント証明書のクライアントへのインストール方法は、こちらを参照ください。◆クライアント用証明書等のバックアップCA.plを使用して、クライアント証明書を発行するとリクエストファイル(newreq.pem)と証明書(newcert.pem)は発行するたびに書き換えられてしまう。中でも、リクエストファイルは後述するクライアント証明書の失効処理に必要なので、バックアップしておかなければならない。(実際には、./demoCA/newcerts配下にバックアップされてはいるが、シリアル番号で作成されるため対応付けができない。)以下に、バックアップの一例を示すが何らかの方法でクライアントが分かる形でバックアップしておくことが重要である。ここでは、demoCA配下のcertsディレクトリにユーザ毎のディレクトリを作成し、そこにバックアップした。間違えて、連続してクライアントを作成してしまった場合は、画面上からシリアルが分かるはずなので対応が分からなくなる前に、./demoCA/newcerts配下のファイルを対応付けしてバックアップしておくと良いのでは?シリアル番号をテキストベースで管理するのもひとつの手であるし、一連の作業を自動化してしまうほうが手っ取り早いのでは。./demoCA/certs/oyaji◆クライアント用証明書の失効処理クライアント証明書で運用するようなケースではセキュリティ管理が重要であり、証明書を紛失したり使用しなくなったりしたら、直ちに失効処理を行い当該証明書が使用できないようにする必要がある。以下に、失効処理を示すが、ここで作成されたcrl.pem(証明書失効リスト)をApacheに読ませれば(Windowsの場合はApacheの再起動)、該当証明書を無効化できる。失効処理用のcrlnumberを作成し、失効したいクライアントのリクエストファイルを指定して失効処理とリスト作成を行う。失効処理を行うと、index.textは以下のように行頭がRに変わり、失効時間が3番目のパラメータとして追加される。Updated◆おまけ上記のように、クライアント証明書の運用は各人の証明書管理が結構大変である。そこで、openssl0.9.8bのCA.plを改造したスクリプト(CA2.plとでもリネームして使ってください。)を作成してユーザ管理しやすくしてみた。本CA2.plは下記のクライアント証明書関係以外は、改造していないのでそのまま使用できる。変更したのは、pkcs12でユーザに提供するクライアント証明書の作成と失効処理である。pkcs12でユーザに提供するクライアント証明書を作成すると、証明書をuser名.p12とするとともに、作業ディレクトリ配下に./user/user名というフォルダを作成し作成データをセーブする。作成時に同一ユーザ名のチェックを行っている。oyaji.p12失効処理も面倒なので、revokeオプションを追加した。上記pkcs12でクライアント証明書を作成したことが前提となり、user名を指定することで失効処理と失効リストの更新を行う。