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

/var/log/secureに出る攻撃ログ

OpenSSHのクライアント側設定

/.ssh/config

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

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

接続するときは

ssh serverA

/.ssh/configを利用した多段SSH

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

Host fumidai

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

公開鍵認証方式に切り替えるメリット

  1. SSHパスワードログインを無効にすることができる(見知らぬIPからの総当り攻撃の99%はこれで遮断できる)
  2. 秘密鍵を適切に管理する限りにおいてはパスワード認証よりも安全

SSH鍵交換方式によるログイン

大まかな流れとしては

  1. クライアント側で秘密鍵と公開鍵の生成
  2. 公開鍵のみログインしたいサーバーのauthorized_keysに追加する。
  3. 秘密鍵を用いてログイン

クライアントOSや利用しているターミナルソフトにより、作成方法が違います。WindowsからLinuxにアクセスする場合は鍵生成ツールがセットになっていて、シンプルなputtyがお勧め。

windows

sshkeygen.exeをputtyのページから入手。
rsa2で、ビットの長さを768ビットにする(redhat,vine,debian,FreeBSDで確認)
作った公開鍵を.ssh/authorized_keysに一行でコピー(途中に改行が入らぬように!)
authorized_keysのパーミッションを600にする(これをしないと無効)

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

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

linux

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で使う

  1. 上記手順で作成
  2. puttygenでインポートする。パスフレーズとコメントは修正可能

.ssh/configファイル

各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にホスト名とホストの公開鍵を保存している。再インストールなどを行ってホストの公開鍵が変更されると、今までのホストの公開鍵と違うので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

SSL証明書の作成

秘密鍵作成からCSR作成まで(2015年版)

# 作成場所(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確認(外部から)

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

Apacheで使う証明書作成(KEY,CSR,CRTの順)

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を作成しない最短手順)

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

自己証明書の場所

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

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

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

証明書にまつわるファイル

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

Windowsで使えるようにPKCS12形式に変換

cat server.key server.crt | openssl pkcs12 -export -out client.p12 -name "test"

OpenSSLをHTTPSクライアントとして利用

openssl s_client -connect www3.coins.tsukuba.ac.jp:https -state

自己認証局の作成

/usr/local/openssl/misc/CA.shを利用する。

S/MIME

S/MIME暗号化とは

証明書を利用してメールの本体を暗号化するものである。証明書はSSLのものとまったく同一フォーマットでよい。また暗号化解除には証明書作成時の秘密鍵が必要となる。メールに使わなくても可逆暗号化方式として覚えておくとよい。

http://www.atmarkit.co.jp/fsecurity/rensai/securitytips/029openssl.html

OpenSSLコマンドでS/MIME暗号化をする

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で作成

SMIME暗号化

対応メーラー

クライアント認証

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

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

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-10-14 (金) 13:16:53