- 追加された行はこの色です。
- 削除された行はこの色です。
OpenSSHを利用した。SSH公開鍵認証ログイン、SSL証明書、S/MIMEによる暗号化手順のまとめ
#contents
*公開鍵認証方式に切り替えるメリット [#d46e1243]
+SSHパスワードログインを無効にすることができる(見知らぬIPからの総当り攻撃の99%はこれで遮断できる)
+秘密鍵を適切に管理する限りにおいてはパスワード認証よりも安全
*SSH鍵交換方式によるログイン [#i0742522]
-パスワードと違い秘密鍵とパスフレーズ併用でログインする。画像付詳細は[[@ITの記事:http://www.atmarkit.co.jp/flinux/rensai/linuxtips/429usekeyssh.html]]などを参考にされたし
大まかな流れとしては
+クライアント側で秘密鍵と公開鍵の生成
+公開鍵のみログインしたいサーバーのauthorized_keysに追加する。
+秘密鍵を用いてログイン
クライアント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 dsa (SSH1しか使えないのであれば -t rsaとする)
ユーザーディレクトリの.ssh/id_rsa(秘密鍵)と.ssh/id_rsa.pub(公開鍵)が作成される。公開鍵をログインしたいサーバーに送る
-ここからログインしたいサーバー側作業に移る。
公開鍵はログインさせたいユーザーの.ssh/authorized_keysに公開鍵を追記すればいい。
cat id_rsa.pub >> .ssh/authorized_keys
上記のコマンドでなければ新規作成、あれば追記される。なおこのauthorized_keysのパーミッションは600にしておかなければ公開鍵認証は失敗する。
**[[linuxで作った鍵をputtyで使う:http://www.atmarkit.co.jp/flinux/rensai/linuxtips/432makesshkey.html]] [#v9f7a273]
+上記手順で作成
+puttygenでインポートする。パスフレーズとコメントは修正可能
*sshで接続した時に警告が出て接続できない場合 [#p2a51e6d]
各ユーザーの.sshにホスト名とホストの公開鍵を保存している。再インストールなどを行ってホストの公開鍵が変更されると、今までのホストの公開鍵と違うのでsshクライアントはワーニングをだす。puttyなら続行できるがlinuxのsshクライアントは続行させてくれない。以下のメッセージが出る。
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
-対処法としては公開鍵を消せばよい。
rm ~/.ssh/known_hosts
なお、ログイン先サーバを再インストールもしていないのにこのメッセージが出る時は本当におかしいのでdnsの設定などを確かめるべし。
*ホストベースの認証の設定 [#x1192e0d]
-ユーザ単位ではなくアクセス元ホストベースで公開鍵認証を行うことができる。
クライアント側で秘密鍵を元に公開鍵を作成し、サーバー側でその公開鍵を登録するという流れは変わらない。
**クライアント側作業 [#qb85f26f]
-公開鍵の作成
これから調べる!!!
HostbasedAuthentication yes
*SSL証明書の作成 [#p80d58ce]
-秘密鍵を作成してそれを基に証明書を作成する。主にSSLやSMIMEの利用のため
**証明書の作成(CSRを作成しない最短手順) [#ee5ad7d5]
openssl genrsa -out server.key -des3 1024
-2048bitの有効期限1年で作成する
openssl genrsa -out server.key -des3 2048
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"
cat server.key server.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のものとまったく同一フォーマットでよい。また暗号化解除には証明書作成時の秘密鍵が必要となる。メールに使わなくても可逆暗号化方式として覚えておくとよい。
http://www.atmarkit.co.jp/fsecurity/rensai/securitytips/029openssl.html
**OpenSSLコマンドでS/MIME暗号化をする [#ce23a263]
-証明書があれば下記で暗号化可能。入力ファイルの日本語のエンコードはiso-2022-jpに変換しておく(nkf -j 元ファイル > 元ファイル-iso-2022-jp)
openssl smime -encrypt -des3 -in original.txt -out enc.txt server.crt
openssl smime -decrypt -des3 -in enc.txt -out decode.txt -inkey server.key -recip server.crt
-メール送信のための情報付で暗号化する場合
openssl smime -encrypt -des3 -in hoge.txt -out enc.txt -subject test -to [email protected] -from [email protected] 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(プラグインの導入が必要)
*クライアント認証 [#w2f53f03]
証明書がないとアクセス出来ないという最強の認証
<Directory "d:/xampp/htdocs/restricted">
#SSLの強制
SSLRequireSSL
#クライアント証明書の強制
SSLVerifyClient require
SSLVerifyDepth 1
# http://nai.homelinux.net/ssl.html
</Directory>
#counter