[data security showcase sapporo 2015] d27:運用担当者のための openssl 入門 by...

31
システム管理者のためのOpenSSL 1

Upload: insight-technology-inc

Post on 07-Apr-2017

856 views

Category:

Technology


2 download

TRANSCRIPT

システム管理者のためのOpenSSL

1

Who is he?

�自己紹介

�名前

� 志賀 格(しが・ただす)

�所属

� ユーザーサイド株式会社

�お仕事

� お客様企業のネットワークインフラやサーバーの監視や障

害対応

� お客様システム管理者のよろず相談

�年齢

� 30歳� 16進数で表記しています。

2

このセッションの概要

�システム管理者必携のツールとしてのOpenSSLを紹介する。

� SSL/TLSや証明書について少しだけ理解を深める。

3

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

入手方法

� ApacheHaus� http://www.apachehaus.com

� ApacheのWindowsバイナリを配布� 本家ではソースコードしか配布していない。

7

入手方法

� Stunnel for Windows� http://www.stunnel.org

8

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 –connect www.userside.co.jp:443

13

ホスト名

ポート番号

“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

こんなときにOpenSSL

� SSL3.0しか使えないクライアントであるかのようにふるまう。

17

s_client –connect www.userside.co.jp:443 –ssl3

この手の調査に使えるオプション

� -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

最近の話題から

� Chrome45になってTLSで接続できないサイトが少数ある。

� TLSv1.0 への安全でないフォールバックに関する対策(今のところGoogleだけ)

29

“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

終了

� OpenSSLというより、システム管理者様のSSLに関する質問を受け付けたいと思います。

31