[data security showcase sapporo 2015] d27:運用担当者のための openssl 入門 by...
TRANSCRIPT
Who is he?
�自己紹介
�名前
� 志賀 格(しが・ただす)
�所属
� ユーザーサイド株式会社
�お仕事
� お客様企業のネットワークインフラやサーバーの監視や障
害対応
� お客様システム管理者のよろず相談
�年齢
� 30歳� 16進数で表記しています。
2
OpenSSLとは
�暗号化通信を行うためのライブラリモジュール
� Apache HTTP Serverでも使用している
� SSLeayというのがもともとの名前
�本体はライブラリモジュールだが、一緒に配布され
るopensslコマンドラインツールが重宝する(今日のお話のメインはここ)
4
OpenSSLの入手方法(Linux編)
�サーバー系のOSとしてインストールするとたいていOpenSSLは入っている。� 便利な世の中になりました。
� CentOS系であれば以下のコマンドにて� # yum install openssl
� Debian系であれば以下のコマンドにて� # apt-get install openssl
�しかし
� システム管理者は、自分の自由になるLinuxを持っていないかもしれません。
5
OpenSSLの入手方法(Windows編)
� OpenSSLは、オープンソースソフトウェアであり、商用OSであるWindowsには当然含まれていない。
� OpenSSLの本家サイトにあるだろうか?� www.openssl.org にはない。ソースコードのみの配布。
�バイナリ(できればインストーラ)を配布している
ところはないだろうか?
6
OpenSSLの使い方
�起動する。
� コマンドプロンプトを起動
� “cd c:¥program files(x86)¥stunnel¥bin”� Openssl
� OpenSSL> プロンプトが出てくる。� 終わらせるときは exit
9
OpenSSLではどんなことができるのか
�ヘルプを見るのが手っ取り早い
� Helpでも ? でも打って enter キーを押す
� “req”� CSR(証明書要求ファイル)の作成
� “genrsa”� RSA公開鍵を生成
� “enc”� 暗号化・複号
� “dgst”� メッセージダイジェスト(ハッシュ)を生成
10
素数かどうかを教えてくれる
� “prime” というサブコマンドがある� その名の通りで、ある数が素数なのかどうかを回答してく
れる。
� 例
� “prime 17 [Enter]”
� “11 is prime” (回答はなぜか16進数)
�これが「システム管理の何に役に立つのか」
� 役に立たないと思います。
11
一番役に立つと思われる s_client
� “s_client” はSSL/TLSのクライアントとして、Webサーバーなどに接続して結果を得ることができます。
� コマンドラインのSSLクライアントなら wgetや curl ももちろん使えます。
� OpenSSLを使うメリットは、SSLやTLSに関する細かい情報を得たり、制御できることです。
12
“s_client”は何の役に立つの?
� 2014年にあったSSL3.0に関するあの話です。
�新聞でみたんだけど
�プーさんっていう
�深刻な虚弱性があるそうじゃないか。
�ウチのホームページは大丈夫なのかね。
�さっそく調べて報告してくれたまえ。
14
まず行うこと
�プーさん→POODLE(プードル)�虚弱性→脆弱性(ぜいじゃくせい)
�ホームページ→Webサイト・Webサーバー
�その場で訂正したりしないことが重要。
�システム管理者として、というより(以下略)
15
POODLEについて
� SSL3.0にある深刻な脆弱性がみつかりました。�詳細 IPAのサイト
� http://www.ipa.go.jp/security/announce/20141017-ssl.html
�この対策としてサーバーにおけるSSL3.0の無効化が推奨されました。
�しかし、
�ウチのWebサーバがSSL3.0が有効かどうかどうやって調べれば…� 調べ方はIPAのサイトにはなかった…
16
この手の調査に使えるオプション
� -ssl2� SSL2.0
� -tls1� TLS1.0(SSL3.0の後継)
� -tls1_1� TLS1.1
� -tls1_2� TLS1.2
�古いOpenSSLではTLS1.1や1.2は使えないかも。
18
OpenSSLの使い方
�今まで対話モードで使ってました。
�直接コマンドプロンプトからオプションを使って機
能を利用できる。
19
openssl s_client –connect www.userside.co.jp:443
証明書を取得する
� “s_client” の結果をよく見ると、サーバー証明書の情報も表示されている。
20
---Certificate chain
0 s:/C=JP/OU=Domain Control Validated/CN=www.userside.co.jpi:/O=AlphaSSL/CN=AlphaSSL CA - G2
1 s:/O=AlphaSSL/CN=AlphaSSL CA - G2i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
---Server certificate
-----BEGIN CERTIFICATE-----
MIIEvjCCA6agAwIBAgISESGzyXLt7MGw6If1kbfuxGjXMA0GCSqGSIb3DQEBBQUAMC4xETAPBgNVBAoTCEFscGhhU1NMMRkwFwYDVQQDExBBbHBoYVNTTCBDQSAtIEcy
MB4XDTE0MDgyMDA4MTM1MVoXDTE1MDkyMDE5MjU0NVowTTELMAkGA1UEBhMCSlAx
rzDH+VPevoeQYLtHGgyZF60theBexZ43JPrGEZBwmar/fH+fzkcEU1AoajX5LA3MLZqnZpnQAM5OLoGBpwp670xT
-----END CERTIFICATE-----subject=/C=JP/OU=Domain Control Validated/CN=www.userside.co.jp
issuer=/O=AlphaSSL/CN=AlphaSSL CA - G2
証明書をOpenSSLで扱う
�以下のようにリダイレクトしてファイルに落とす。
� openssl s_client –connect
www.userside.co.jp:443 > c:¥temp¥log.txt
�ファイルを開いて証明書部分だけ保存する。
� 証明書は “-----BEGIN CERTIFICATE-----” と “-----END CERTIFICATE-----” に挟まれた中にある。
� ファイルに保存するときはこの、BEGINの行・ENDの行を含めて保存する。
�中身を見たいときはこうする。
� openssl x509 –noout –text < c:¥temp¥cert.cer
21
OpenSSLの設定ファイル
�設定しなくても使えるが、
� Openssl起動時に /usr/local/ssl/openssl.cnfがないと怒られる。
� Windowsの場合、環境変数 OPENSSL_CONF を指定してやるとよい。
� “set OPENSSL_CONF=“C:¥Program Files(x86)¥stunnel¥conf¥openssl.cnf”
22
OpenSSLでハッシュを扱う
�ルーターのファームウェアをダウンロードしたとき
に、ファイルが壊れていないか確認したい。
�たとえばヤマハのファームウェア配布ページには
MD5チェックサムがついている。
23
ハッシュについて
�ハッシュ関数とかダイジェスト関数という
� MD5とかSHA-1はハッシュ関数の名前
�あるファイル(データ)を入力として、決まった長
さの(短い)データを出力する。
� どんな大きなファイルを入力しても、出力サイズは一定
� 1ビットでも入力が異なっていたら、出力結果が異なる
� という性質があるので、ハッシュ関数の出力で同一性の検
査ができる。
�長さは128ビットとか256ビットとか。ハッシュ関数によってさまざま。
24
“dgst” コマンドを使ってみる
�確認したいファームウェア “rtx1200.bin”
�同じサイトで公開されているチェックサム
“rtx1200.md5”� 2a9ff798446a7fad3d2eeb14bd7b980f *rtx1200.bin
� MD5というアルゴリズム(方式)でハッシュをとっている。
� “openssl dgst –md5 rtx1200.bin”� “MD5(rtx1200.bin)=
2a9ff798446a7fad3d2eeb14bd7b980f ”
25
ApacheのSSL設定を調べる
� SSLCipherSuiteというディレクティブがある�とあるサーバーの記述
� “ALL:!ADH:+HIGH:+MEDIUM:+LOW:+SSLv2”
�具体的な暗号アルゴリズムが書いてないので、弱い
暗号が利用されているかもしれない。
26
“openssl ciphers” をつかいます
� “openssl ciphers –v ALL”� 利用できるすべての方式を出力します。
� “openssl ciphers –v “ALL:!ADH:!SSLv2”� 利用できるすべての方式から、ADHとSSLv2は除きます。
27
実際に “ciphers” を使った結果
�結果の見方
� “AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1”
� 一番左側 CipherSuiteという「名前」� SSLv3 というのがプロトコルのバージョン� Kx鍵交換の方法� Au認証の方式� Enc暗号化の方式� Macメッセージ真正性の方式
28
“s_client”コマンドでわかること
�オプションを変えてみるとつながらない場合が分か
る。
� openssl s_client –connect hogehoge.jp:443 –tls1 � これはOK
� openssl s_client –connect hogehoge.jp:443 � NG
� “Secure Renegotiation IS NOT supported” と表示されているサーバーが問題らしい。
30