日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

<< 過去

未来 >>

証明書は自動発行すれば良い

このサーバーのE-mailの認証にSSLクライアント証明書を使うようにしたという話を書いた。

パスワードを没収されたので

証明書によって認証することで、パスワード認証に伴うリスクは軽減される。

それはよいのだが、秘密鍵の管理というところには少し課題がある。


これまで、証明書の有効期限は100年に設定して、証明書と秘密鍵をセットにしたPKCS#12形式にして、

それをオンラインストレージにおいて、適宜、端末にインポートして使っていた。

オンラインストレージは自分しかアクセス出来ないはずだし、PKCS#12形式のデータにはパスワードがかかっている。

とはいえ、このファイルが流出してパスワードを割られると、何があったかわからないまま認証されてしまう。


証明書発行も手動で手間がかかっていたので、自動化を試みることにした。

そのフローは次の通りである。

  1. WebサイトにLinuxのユーザー名・パスワードでログインする
  2. 登録されているE-mailアドレス(例えばGmail)にワンタイムパスワードを送る
  3. ワンタイムパスワードを確認して、秘密鍵・証明書をサーバーで作成する
  4. PKCS#12形式(ランダムなパスワードをかける)で端末にダウンロードして、証明書ストアに登録する

ユーザー名・パスワードで認証して、E-mailで2段階目の認証をするというのは、Googleの2段階認証に似てるかな。

Gmailのアカウントが乗っ取られなければ、Linuxのユーザー認証を突破されても助かると。

この程度やれば十分なんじゃないかね。

秘密鍵と証明書のセットはサーバー上で作成するが、作成後はまもなくパスワードロックされたPKCS#12形式にする。

パスワードは画面に表示されるので、これをコピーして、ダウンロードしたPKCS#12形式のデータに適用して端末に登録する。

そのPKCS#12形式のデータも10分後には消してしまえば、秘密鍵がサーバーから流出することはないだろう。


証明書に登録する情報だが、ユーザーを識別するCN(一般名)はE-mailアドレス、O(組織名)は氏名に固定している。

OU(部署名)には、その証明書を使用する端末名を書いて、どの証明書をどこに使っているかわかるようにしている。

それでOpenSSLの初期設定では、これらの情報の組み合わせ(DN)が一致する証明書は複数発行できない。

同じDNの証明書を発行するなら、以前使っていた証明書を失効させないといけない。

というわけで失効を管理する仕組みもWeb上に作ることにした。

こちらもLinuxのユーザー名・パスワードでログインして、ワンタイムパスワード認証をすると、

そのユーザーの証明書リストが表示され、証明書を選べば失効させられると。

失効証明書は毎日自動的に更新するようにした。


これを実現するには、認証局を管理するユーザーを作って、そこに認証局の管理をさせたり、

そのユーザーはLinuxのユーザー認証をできるようにしたり。

いろいろやるべきことはあったのだが、出来てしまえば証明書を簡単に作ったり消したりできるようになった。

証明書の有効期限も4ヶ月にした。

長いか短いかはいろいろ考えはあると思うが、時々更新しないと忘れるだろうというのもある。


課題としては、証明書が端末に紐付いていることは保証できないということ。

僕の運用では1つの証明書は1つの端末にしか入れないことにしてるけど、仕組み上は保証されていない。

このへん、ハードウェア(ICカードなど)に証明書を入れる方法は徹底されているわけだけど。

とはいえ、クライアント証明書を発行する方法は、そういう特別なハードウェアが必ずしもいらないのは長所ではあって、

そうじゃなければ個人で導入はとてもとてもと。


あと類似するところでSSHのログイン用の秘密鍵の管理も課題がある。

ローカルに配置するとその端末でしかログインできない、

かといってオンラインストレージにおくと流出の懸念なしとは言えない。

こっちの方がミッションクリティカルなので、さてどうしたもんかと。

まだ考え中ですね。


Author : Hidemaro
Date : 2019/11/25(Mon) 23:58
コンピュータ・インターネット | Comment | trackback (0)
blog comments powered by Disqus

トラックバック

トラックバックURL取得

Tools