OpenSSHを利用した。SSH公開鍵認証ログイン、SSL証明書、S/MIMEによる暗号化手順のまとめ
大まかな流れとしては
クライアントOSや利用しているターミナルソフトにより、作成方法が違います。WindowsからLinuxにアクセスする場合は鍵生成ツールがセットになっていて、シンプルなputtyがお勧め。
sshkeygen.exeをputtyのページから入手。 rsa2で、ビットの長さを768ビットにする(redhat,vine,debian,FreeBSDで確認) 作った公開鍵を.ssh/authorized_keysに一行でコピー(途中に改行が入らぬように!) authorized_keysのパーミッションを600にする(これをしないと無効)
※puttyで作った鍵はそのままではputtyでしか使えません。以下のようにopenssh形式に変換する必要があります。
puttygen private.ppk -O private-openssh -o convert.rsa
Guiであれば、秘密鍵をロードしたあとOpenSSH形式に変換すればよい。
ssh-keygen -t dsa -b 1024 (SSH1しか使えないのであれば -t rsaとする)
ユーザーディレクトリの.ssh/id_rsa(秘密鍵)と.ssh/id_rsa.pub(公開鍵)が作成される。公開鍵をログインしたいサーバーに送る
公開鍵はログインさせたいユーザーの.ssh/authorized_keysに公開鍵を追記すればいい。
cat id_rsa.pub >> .ssh/authorized_keys
上記のコマンドでなければ新規作成、あれば追記される。なおこのauthorized_keysのパーミッションは600にしておかなければ公開鍵認証は失敗する。
各SSHで設定するコマンドをまとめておくことができるファイル。
Host localhost HostName localhost IdentityFile ~/.ssh/id_rsa.test.org User root Host example.com HostName www.example.com Port 22222 IdentityFile ~/.ssh/identity User gateway
各ユーザーの.sshにホスト名とホストの公開鍵を保存している。再インストールなどを行ってホストの公開鍵が変更されると、今までのホストの公開鍵と違うのでsshクライアントはワーニングをだす。puttyなら続行できるがlinuxのsshクライアントは続行させてくれない。以下のメッセージが出る。
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
rm ~/.ssh/known_hosts
なお、ログイン先サーバを再インストールもしていないのにこのメッセージが出る時は本当におかしいのでdnsの設定などを確かめるべし。
あくまで自宅サーバーなどセキュリティにゆるい環境限定だが、/etc/ssh/以下の以下のファイルを新サーバーにコピーする。
ssh_host_key ssh_host_rsa_key.pub ssh_host_rsa_key ssh_host_dsa_key ssh_host_dsa_key.pub
クライアント側で秘密鍵を元に公開鍵を作成し、サーバー側でその公開鍵を登録するという流れは変わらない。
これから調べる!!!
HostbasedAuthentication yes
openssl genrsa -aes128 1024 > server.key openssl req -new -key server.key > server.csr openssl x509 -in server.csr -days 3650 -req -signkey rutake.com.key > rutake.com.crt
あとは鍵からパスフレーズ除去するだけ
openssl genrsa -out server.key -des3 2048 openssl req -new -x509 -days 365 -key server.key -out server.crt
openssl rsa -in server.key -out server.key
key | 秘密鍵 | 誰にも見えないように |
csr | 証明書発行要求 | 上記最短手順ではCSRは作られない |
crt | 証明書 | 公開鍵で見られてもよい |
cat server.key server.crt | openssl pkcs12 -export -out client.p12 -name "test"
openssl s_client -connect www3.coins.tsukuba.ac.jp:https -state
/usr/local/openssl/misc/CA.shを利用する。
証明書を利用してメールの本体を暗号化するものである。証明書はSSLのものとまったく同一フォーマットでよい。また暗号化解除には証明書作成時の秘密鍵が必要となる。メールに使わなくても可逆暗号化方式として覚えておくとよい。
http://www.atmarkit.co.jp/fsecurity/rensai/securitytips/029openssl.html
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
証明書がないとアクセス出来ないという最強の認証
<Directory "d:/xampp/htdocs/restricted"> #SSLの強制 SSLRequireSSL #クライアント証明書の強制 SSLVerifyClient require SSLVerifyDepth 1 # http://nai.homelinux.net/ssl.html </Directory>