- PR -

OpenSSL クライアント証明書の複数発行と失効について

1
投稿者投稿内容
junichi
会議室デビュー日: 2006/01/19
投稿数: 7
投稿日時: 2006-01-19 18:00
はじめまして。
どうしてもわからないことがあり、ご教授いただければと思い、書き込みさせていただきました。

ご教授いただきたいところは以下のA,Bの通りです。

A.一つのCA認証局の構築、サーバ証明書に対して、複数クライアント証明書が発行できるかどうか?
B.ライアント証明書の2つ目以降の発行から以下の手順Cを繰り返し行い、証明書を作成して失効のコマンドを実行したところ、うまく失効されない。

OSはDebian 3.1で、OpenSSL + Courier pop ssl の環境でPOP over SSLのみメールの受信の設定で、OpenSSLの環境を作成しております。

設定手順は以下のように行いました。
@CAの秘密鍵と証明書作成
Aサーバ証明書、秘密鍵、公開鍵の作成
Bメール用証明書の作成し、/etc/courier 以下に置きました。
Cクライアント証明書の作成
 ・/usr/lib/ssl/misc/CA.sh -newreq
 ・/usr/lib/ssl/misc/CA.sh -sign
Dpkcs12形式の証明書を作成し、クライアントであるWinXPにインストールした。
EBecky!でクライアント証明書使用とする環境で受信を実行するとうまくいきます。
F CDの手順により、2つ目のクライアント証明書を発行。
G2つ目に発行された証明書を失効したいので、以下の操作を行いました。
 # openssl ca -gencrl -revoke ./2つ目対象クライアント/newcert.pem -out ./demoCA/crl/crl.pem
Hindex.txtは以下の通りに反映されている
 # cat /usr/local/certs/demoCA/index.txt
 V 070118061925Z 01 省略
 R  070119013301Z 060119022525Z 02   省略  <--失効したいもの
I2つ目のクライアント証明書のみをインストールしているのにもかかわらず、クライアントで受信を行っても、通信できてしまう。1つ目も受信できます。

なにがおかしいのかまったくわかりません、もともとCourier-pop3d-sslにはこのようなことには対応してないのでしょうか?

以上、恐れ入りますがよろしくお願いします。
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2006-01-19 22:55
加納正和、です。

>A.一つのCA認証局の構築、サーバ証明書に対して、複数クライアント証明書が発行できるかどうか?

発行はできますよ、いくらでも。何人でも。ただし、「複数」というところが難問です。
本質的には「一人」にしか発行できません。「複数」の集合として電子証明書の
サブジェクトが同一の証明書{A,B}があるとします。でも、AとBは「別人」です。人間が
勝手に同一人だと思ってるだけで。電子証明書のサブジェクトは「そう書いてあるだけ」
です。何も保証しません。

>I2つ目のクライアント証明書のみをインストールしているのにもかかわらず、クライアントで受信を行っても、通信できてしまう。1つ目も受信できます。

当然そうでしょう。通信できるに決まってます。
「失効」って何のことだと思ってましたか?「失効」とは

./demoCA/crl/crl.pem

このファイルを生成することです。いやほんとに。
「失効」なんて意味ないじゃんって?そうです。「失効」自体には意味がありません。
CRL(crl.pem)を使ってシステムを設計すれば別ですが。

>なにがおかしいのかまったくわかりません、もともとCourier-pop3d-sslにはこのようなことには対応してないのでしょうか?

いえ、なにもおかしくありません。Courier-pop3d-ssl自体は対応していると思いますけど(未確認)
。。PKIってこういうことが多いんですよねぃ。。ぜーんぶ「実装依存」なのですよ。
規格はあるけど、誰も実装していない。
まったく関係ありませんが、「実装」を欲しがると「ちょっと400万円になります」とベンダーに言われます。
junichi
会議室デビュー日: 2006/01/19
投稿数: 7
投稿日時: 2006-01-19 23:44
加納正和さま、ありがとうございます。

設定自体は間違ってないということですね。

つまり、クライアント認証ってひとつのサーバ証明書にたいして複数作ったとしても、結局はいくらクライアント認証を発行しても実際は同じものなんですね。。。

失効について勘違いしていたようです。
Revokeになったからといって、取り消されたわけじゃないんですね。では、証明書の紛失や期限のすぎたものはどう、取り消せばいいでしょうか?

>CRL(crl.pem)を使ってシステムを設計すれば別ですが。
これはかなり気になりますが、これをやれば確実にRevokeできるのでしょうか?

お金はかけたくないので、PKIはちょっと。。。って感じです。^^;


加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2006-01-20 01:36
引用:

設定自体は間違ってないということですね。



ちょっち調べてみた。

http://www.kobitosan.net/postfix/trans-2.2/jhtml/postconf.5.html#check_ccert_access

より引用。

>relay_clientcerts (デフォルト: empty)

>Postfix SMTPサーバが permit_tls_clientcerts 機能でアクセスを許可するリモートSMTPク>ライアント証明書のリスト。 Postfixリスト操作ルーチンは空白やその他の文字を特別なもの>として扱うため、 この機能は証明書名を使いません。代わりに、偽るのが難しく検索に使うの>が 容易な証明書のフィンガープリントを使います。

だそうなので、設定としては、あるクライアント証明書=Aがあったら、その証明書Aの
MD5ハッシュ値文字列(どう取るんだか忘れたけど、、openssl md5 Aとか?)をこのrelay_clientcerts
に設定する必要があるようだ。

ということで。

引用:

失効について勘違いしていたようです。
Revokeになったからといって、取り消されたわけじゃないんですね。では、証明書の紛失や期限のすぎたものはどう、取り消せばいいでしょうか?



「失効」なんてのは無視して、クライアント証明書を指し示す情報自体を
relay_clientcertsに設定したほうがいいと思います。

引用:

>CRL(crl.pem)を使ってシステムを設計すれば別ですが。
これはかなり気になりますが、これをやれば確実にRevokeできるのでしょうか?

お金はかけたくないので、PKIはちょっと。。。って感じです。^^;



どのみち「失効」でも確実には行かないですよ。「確実」なのは金かけることだ。。。
プロじゃない限り、いくらであれ高いと思うからお金をかけたくないの
でしょうけど。
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2006-01-20 12:52
Courier-pop3d を知らない私がコメントするのもおかしいかもしれませんが。

OpenSSL で失効手続きを行っても Courier-pop3d がその証明書が失効されていることを知らなければ意味がありません。失効を教えてあげるには、Courier-pop3d に CRL ファイルを読ませてあげればよいのでしょうが、その設定方法についてはよく分かりません。

ここで、CRL には有効期限がある (OpenSSL のデフォルトの設定では 30 日程度だったような気がします) ことに注意してください。CRL をアプリケーションに読み込ませる設定した場合に、その CRL 自体の有効期限が失効してしまった場合、正当な証明書を用いてもその有効性が確認できずに、無条件で「無効」として扱われてしまうため、逐次 CRL の差し替えと再読み込みの処理が必要になります。


[ メッセージ編集済み 編集者: あんとれ 編集日時 2006-01-20 12:53 ]
junichi
会議室デビュー日: 2006/01/19
投稿数: 7
投稿日時: 2006-01-23 10:02
加納正和,あんとれさん、ご親切にありがとうございました。

もしかしたら、Postfixの設定にもかかわるかもしれないということですね。
今の検証環境ではSmtpサーバは入れてないんですが、できればpopサーバのみで
制限できたらということが条件だったのですが。。。
それ以外はお金をかけること。。ですよね^^; SSL恐るべしです!

pop3d-sslにCRLを読み込ませて見ない限りは、先に進めそうもないですね。
調べてみましたが、pop3d-sslにCRLを読み込ませるような設定は全くないみたいです。
この方法はもう諦めようかと思ってます。

よって、次はimap + PAM での外部受信の限定に切り替えて検証してみようかと思います。助言どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)