OpenSSHを利用した。SSH公開鍵認証ログイン、SSL証明書、S/MIMEによる暗号化手順のまとめ

#contents

*/var/log/secureに出る攻撃ログ [#hdb37ad9]

-パスワード認証した場合
 Mar 14 23:43:25 v157-7-139-75 sshd[23528]: error: Received disconnect from 39.110.208.111 port 60587:14: No supported authentication methods available [preauth]


-/etc/hosts.denyではじかれたとき
Mar 14 23:45:28 v157-7-139-75 sshd[24160]: refused connect from fs276ed06f07.ap.nuro.jp (39.110.208.111)

-ポートがあっていない時は何も出ない

*OpenSSHのクライアント側設定 [#vad7f386]

**~/.ssh/config [#e4afd797]

SSH接続時の情報を定義しておくことができる。

 Host serverA
  User         login
  HostName     www.example.com
  IdentityFile ~/.ssh/id_dsa_example_com
  Port 10022

接続するときは

 ssh serverA

**~/.ssh/configを利用した多段SSH [#u07e2e1f]

http://rcmdnk.github.io/blog/2014/06/08/comptuer-linux-windows-putty/

-~/.ssh/configに以下のように記載する。

 Host fumidai
 
 Host dest
   ProxyCommand ssh -W %h:%p fumidai

-接続コマンドはdestに対して行う。

 ssh dest

*公開鍵認証方式に切り替えるメリット [#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にする(これをしないと無効)

※puttyで作った鍵はそのままではputtyでしか使えません。以下のようにopenssh形式に変換する必要があります。

-linuxのputtygenの場合
 puttygen private.ppk -O private-openssh -o convert.rsa

Guiであれば、秘密鍵をロードしたあとOpenSSH形式に変換すればよい。

**linux [#w89eaaf5]

-公開鍵認証でログインしたいユーザーのホームディレクトリで以下のコマンドを実行。1024bitで作成。

 ssh-keygen -t dsa -b 1024 (SSH1しか使えないのであれば -t rsaとする)


ユーザーディレクトリの.ssh/id_rsa(秘密鍵)と.ssh/id_rsa.pub(公開鍵)が作成される。公開鍵をログインしたいサーバーに送る(以下のssh-copy-idコマンドを使えば一瞬で終わる)

 ssh-copy-id -i .ssh/id_dsa.pub user@配置先サーバーIP


-ここからログインしたいサーバー側作業に移る。

公開鍵はログインさせたいユーザーの.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/configファイル [#s754fb68]

各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

-利用するときはHostの後の設定名を使う

*sshで接続した時に警告が出て接続できない場合 [#p2a51e6d]

各ユーザーの.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


*ホストベースの認証の設定 [#x1192e0d]

-ユーザ単位ではなくアクセス元ホストベースで公開鍵認証を行うことができる。

クライアント側で秘密鍵を元に公開鍵を作成し、サーバー側でその公開鍵を登録するという流れは変わらない。

**クライアント側作業 [#qb85f26f]

-公開鍵の作成



 これから調べる!!!

 HostbasedAuthentication yes


*SSL証明書の作成 [#p80d58ce]

-秘密鍵を作成してそれを基に証明書を作成する。主にSSLやSMIMEの利用のため

**秘密鍵作成からCSR作成まで(2015年版) [#g3258d41]

 # 作成場所(Apache)
 cd /etc/pki/tls/certs/
 # 2048bitで作成
 openssl genrsa -des3 -out server.key 2048
 # 確認
 openssl rsa -text -noout -in server.key | head -n 1
 # 最初からパスフレーズなしで作成
 openssl genrsa -out server.key 2048
 # パスフレーズ除去
 openssl rsa -in server.key -out new_server.key
 # これでもいけるらしい
 ssh-keygen -p -f ~/.ssh/id_rsa
 # csr作成
 openssl req -new -key server.key -out server.csr

**発行済み証明書のCSR確認(外部から) [#v5e2ac93]

 openssl s_client -connect ssl.example.org:443 -showcerts

**Apacheで使う証明書作成(KEY,CSR,CRTの順) [#i357896a]

 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

あとは鍵からパスフレーズ除去するだけ

**証明書の作成(CSRを作成しない最短手順) [#ee5ad7d5]

-2048bitの有効期限1年で作成する

 openssl genrsa -out server.key -des3 2048
 openssl req -new -x509 -days 365 -key server.key -out server.crt

**自己証明書の場所 [#ba7f303b]

yumパッケージでインストールすると/etc/pki/tls/certs以下にすでに作成済みの証明書がある。もちろん自己証明書だ。

**秘密鍵のパスフレーズを除去する(Apacheの再起動時にパスフレーズありだと都合悪いので) [#aa0de064]

 openssl rsa -in server.key -out server.key

**証明書にまつわるファイル [#hc9237f5]

|key|秘密鍵|誰にも見えないように|
|csr|証明書発行要求|上記最短手順ではCSRは作られない|
|crt|証明書|公開鍵で見られてもよい|

**Windowsで使えるようにPKCS12形式に変換 [#za5465a9]
 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 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(プラグインの導入が必要)

*クライアント認証 [#w2f53f03]

証明書がないとアクセス出来ないという最強の認証

 <Directory "d:/xampp/htdocs/restricted">
	#SSLの強制
 	SSLRequireSSL
 	#クライアント証明書の強制
 	SSLVerifyClient require
 	SSLVerifyDepth  1
 	# http://nai.homelinux.net/ssl.html
 </Directory>


#counter

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS