OpenSSHを利用した。SSH公開鍵認証ログイン、SSL証明書、S/MIMEによる暗号化手順のまとめ #contents *公開鍵認証方式に切り替えるメリット [#d46e1243] +パスワードログインを無効にすることができる(見知らぬIPからの総当り攻撃の99%はこれで遮断できる) +秘密鍵を適切に管理する限りにおいてはパスワード認証よりも安全 *SSH鍵交換方式によるログイン [#i0742522] -パスワードと違い秘密鍵とパスフレーズ併用でログインする。画像付詳細は[[@ITの記事:http://www.atmarkit.co.jp/flinux/rensai/linuxtips/429usekeyssh.html]]などを参考にされたし 大まかな流れとしては +クライアント側で秘密鍵と公開鍵の生成 +公開鍵のみサーバーのauthorized_keysに追加する。 クライアントOSにより、作成方法が違います。 クライアントOSや利用しているターミナルソフトにより、作成方法が違います。WindowsからLinuxにアクセスする場合は鍵生成ツールがセットになっていて、シンプルなputtyがお勧め。 **windows [#w4eed119] sshkeygen.exeをputtyのページから入手。 rsa2で、ビットの長さを768ビットにする(redhat,vine,debian,FreeBSDで確認) 作った公開鍵を.ssh/authorized_keysに一行でコピー(途中に改行が入らぬように!) authorized_keysのパーミッションを600にする(これをしないと無効) **linux [#w89eaaf5] -公開鍵認証でログインしたいユーザーのホームディレクトリで以下のコマンドを実行 ssh-keygen -t rsa ユーザーディレクトリの.ssh/id_rsa(秘密鍵)と.ssh/id_rsa.pub(公開鍵)が作成される。公開鍵をログインしたいサーバーに送る -ここからログインしたいサーバー側作業に移る。 公開鍵はログインさせたいユーザーの.ssh/authorized_keysに公開鍵を追記すればいい。 cat id_rsa.pub >> .ssh/authorized_keys 上記のコマンドでなければ新規作成、あれば追記される。なおこのauthorized_keysのパーミッションは600にしておかなければ公開鍵認証は失敗する。 パスフレーズ除去(Apacheの秘密鍵やバッチ処理などでパスフレーズがあると処理が止まってしまう場合のみ行うこと) openssl rsa -in privkey.key -out privkey.key_new **[[linuxで作った鍵をputtyで使う:http://www.atmarkit.co.jp/flinux/rensai/linuxtips/432makesshkey.html]] [#v9f7a273] +上記手順で作成 +puttygenでインポートする。パスフレーズとコメントは修正可能 *ホストベースの認証の設定 [#x1192e0d] -ユーザ単位ではなくアクセス元ホストベースで公開鍵認証を行うことができる。 クライアント側で秘密鍵を元に公開鍵を作成し、サーバー側でその公開鍵を登録するという流れは変わらない。 **クライアント側作業 [#qb85f26f] -公開鍵の作成 これから調べる!!! HostbasedAuthentication yes *SSL証明書の作成 [#p80d58ce] -秘密鍵を作成してそれを基に証明書を作成する。主にSSLやSMIMEの利用のため **証明書の作成(最短手順) [#ee5ad7d5] openssl genrsa -out server.key -des3 1024 openssl req -new -x509 -days 365 -key server.key -out server.crt **秘密鍵のパスフレーズを除去する(Apacheの再起動時にパスフレーズありだと都合悪いので) [#aa0de064] openssl rsa -in server.key -out server.key **証明書にまつわるファイル [#hc9237f5] |key|秘密鍵|誰にも見えないように| |csr|証明書発行要求|上記手順ではCSRは作られない| |crt|証明書|みんなに配布する| **Windowsで使えるようにPKCS12形式に変換 [#za5465a9] cat test.key test.crt | openssl pkcs12 -export -out client.p12 -name "test" *OpenSSLをHTTPSクライアントとして利用 [#s090590d] openssl s_client -connect www3.coins.tsukuba.ac.jp:https -state *[[自己認証局の作成:http://park15.wakwak.com/~unixlife/practical/openssl.html]] [#p11d6927] /usr/local/openssl/misc/CA.shを利用する。 *S/MIME [#y6ef7e4f] **S/MIME暗号化とは [#kf136f52] 証明書を利用してメールの本体を暗号化するものである。証明書はSSLのものとまったく同一フォーマットでよい。また暗号化解除には証明書作成時の秘密鍵が必要となる。 **OpenSSLコマンドでS/MIME暗号化をする [#ce23a263] 証明書があれば下記で暗号化可能。入力ファイルの日本語のエンコードはiso-2022-jp nkf -j openssl smime -encrypt -des3 -in hoge.txt -out enc.txt server.crt openssl smime -decrypt -des3 -in enc.txt -out orig.txt -inkey server.key -recip server.crt openssl smime -encrypt -des3 -in hoge.txt -out enc.txt -subject test -to hoge@hoge.com -from geho@geho.com tu.crt 送信は以下 sendmail -t < enc.txt *[[JDK付属のkeytoolで作成:http://www.ki.rim.or.jp/~kuro/Java/JavaKey/JavaKey-02.html]] [#b9e220b5] *SMIME暗号化 [#y75a5277] **対応メーラー [#i571eca0] -outlook,Thunderbird,Becky(プラグインの導入が必要) #counter