Skip to content

Instantly share code, notes, and snippets.

@shigeki
Created December 15, 2015 04:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shigeki/102cd71b34627c5bf330 to your computer and use it in GitHub Desktop.
Save shigeki/102cd71b34627c5bf330 to your computer and use it in GitHub Desktop.
セキュリティ・ミニキャンプ in 北海道 2015 専門講座 事前学習課題

セキュリティ・ミニキャンプ in 北海道 2015 専門講座 事前学習課題

TLS, HTTP/2演習 大津繁樹

注意事項

本専門講座の演習は、演習者各自にインターネットのクラウド上のサーバを1つ割り当て、管理者権限を使って作業を進めます。

演習サーバは実際にインターネットにつながっているため、世界中から絶えず不正侵入を試みる攻撃を受けています。仮に外部から演習サーバへ侵入を許すと、他のシステムに攻撃する 踏み台やDDoSを行うノードとして利用され、全く関係のない第3者に迷惑を及ぼすことがあります。

このようなリスクを避けるため、演習サーバ上の作業では細心の注意を払い、演習に必要な作業のみ行ってください。講師やチュータの許可なく、資料に記載されている以外のソフトウ ェアを演習サーバにインストールしたり、演習に不要なオペレーションを行ったりすることは禁止です。

また、サーバ上で何か不正侵入されているような疑わしい挙動を見つけた場合には、講師・チューター・事務局に速やかに連絡してください。

常にセキュリティリスクを意識して作業に取り組むことが大事です。

TLS, HTTP/2事前学習課題

1. 持参端末から演習用サーバへの接続確認

専門講座当日にPC端末を持参できるかどうか確認してください。PC端末は演習サーバへ接続するために利用します。もし持参できない場合は、速やかに事務局に連絡してください。

端末に必要な機能は以下の項目です。

  • OS インストールされているOSは、Windows/Mac/Linux/その他 特に指定しませんが、セキュリティ対応がされているバージョンであることが必要です。また、演習で利用するアプリ(ブラ ウザー、Wireshark、sshクライアント)が動作できるものに限ります。 持参するPCは、必ずセキュリティアップデートは最新なものにアップデートしてください。CPUやメモリ、ハードディスクの空き容量は、演習で利用するアプリが起動できる程度が確保されていれば構いません。

  • WIFI接続 専門講座の会場では、WIFI接続使って接続を行う予定です。持参する端末でWIFI接続の設定が可能か確認してください。 有線LANのインターフェイスのみ持つ端末の場合は必ず事務局に相談してください。

  • ブラウザー Google ChromeのStable版を https://www.google.co.jp/chrome/ からダウンロードし、インストールしておいてください。インストール後に必ずしも規定のブラウザーに設定する必要はありません。 Chromeブラウザーで外部のWebサイトが閲覧できることを確認してください。

  • Wireshark 最新のStable版をインストールして、自身の端末でパケットキャプチャできることを確認してください。 https://www.wireshark.org/download.html インストールするバージョンや種類が不明であったり、動作が確認できない場合はチューターや講師に尋ねてください

  • sshクライアント 演習サーバへは ssh を使って接続を行います。 sshクライアントは、MacやLinuxには標準でインストールされていますが、Windowsは各種ターミナルソフトに付随して利用できます。 どのsshクライアントを利用したらよいか不明な場合は、チューターや講師に問い合わせてください。 演習サーバは、パスワードでログインすることを許可していません。 sshクライアントをインストールしたら、sshで利用する鍵生成を行い、公開鍵データをサイボウズの掲示板まで送付してください。送付後、演習用サーバに公開鍵を登録します。登録 されたアカウント名は seccamp です。 指定された演習サーバにログインできることを確認してください。

  $ssh seccamp@server??.hokkaido.koulayer.com

2. TLSサーバ証明書の取得

演習で利用するTLSサーバ証明書を取得するまでの一連の手続きを事前演習として行います。

ここでは jizen_works というディレクトリ内で作業する例を示します。

seccamp@server21:~$ cd jizen_work/
seccamp@server21:~/jizen_work$

2.1 opensslコマンドの確認

演習サーバ上でopensslコマンドが実行できることを確認します。

seccamp@server21:~/jizen_work$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

2.2 乱数データの生成

乱数を生成するシードを格納したデータを生成してファイルに保存します。

seccamp@server21:~/jizen_work$ vi random.dat

(任意の長さで自由にランダムな文字列を入力する)

保存(:wq)

手入力ではなく他に十分ランダムだと思われるデータを利用しても構いません。

2.3 秘密鍵の生成

乱数データを利用して2048ビット長の秘密鍵を生成します。 -rand の引数に乱数データファイル名を、-out の引数に生成する秘密鍵ファイル名を指定します。

seccamp@server21:~/jizen_work$ openssl genrsa -rand random.dat -out private.key 2048
116 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
................................................................................................................................................................+++
..........+++
e is 65537 (0x10001)

2.4 秘密鍵の確認

秘密鍵ファイルが生成していることを確認します。

seccamp@server21:~/jizen_work$ ls -l private.key
-rw-r--r-- 1 seccamp adm 1679 Nov 27 16:24 private.key

秘密鍵が2048bit長で生成されているか確認します。

seccamp@server21:~/jizen_work$ openssl rsa -text -in private.key  -noout
Private-Key: (2048 bit)
modulus:
    00:b4:49:8b:20:e1:37:75:d5:e0:b9:7e:6c:7c:af:
    (以下略)

2.5 秘密鍵の保護

秘密鍵は漏洩した場合にサーバのTLS通信のセキュリティ確保ができなくなります。ファイルパーミッションを自身のリードオンリーに変更します。

seccamp@server21:~/jizen_work$ chmod 400 private.key
seccamp@server21:~/jizen_work$ ls -l
total 8
-r-------- 1 seccamp adm 1679 Nov 27 16:24 private.key
-rw-r--r-- 1 seccamp adm  116 Nov 27 16:23 random.dat

2.6 CSRの生成

サーバ証明書を発行する認証局(CA)に提出するCSR(Certificate Signing Request)ファイルを生成します。

CSRの生成は以下のコマンドを利用します。-key には秘密鍵のファイル名を -out には出力するCSRのファイル名を指定します。

seccamp@server21:~/jizen_work$ openssl req -new -key private.key -out server21_csr.pem

コマンド起動後にCSRに記載する情報を入力します。

 Country Name (2 letter code) [AU]:  国名を英語2文字で入力(JP)
 State or Province Name (full name) [Some-State]:  都道府県名を入力(Hokkaido)
 Locality Name (eg, city) []:  空欄ままリターン
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:  組織名を入力(Security Camp)
 Organizational Unit Name (eg, section) []:  空欄ままリターン
 Common Name (e.g. server FQDN or YOUR name) []:  各自に割り当てられた演習サーバ名(ドメインを含む)を入力します。(server??.hokkaido.koulayer.com)
 ここ以降は空欄のままリターンで続けてください。

例として以下のような入力になります。

seccamp@server21:~/jizen_work$ openssl req -new -key private.key -out server21_csr.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Hokkaido
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Security Camp
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:server21.hokkaido.koulayer.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

2.7 CSRの確認

CSRが生成できていることを確認します。 CSRの生成時に入力したデータ がSubjectフィールドに記載されています。間違いがないか確認してください。

seccamp@server21:~/jizen_work$ openssl req -text -in server21_csr.pem -noout
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP, ST=Hokkaido, O=Security Camp, CN=server21.hokkaido.koulay
er.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:

記載が間違っている場合は、同じ秘密鍵を使えばなんどもやり直しをすること ができます。

2.8 CSRの提出

CSRの生成が確認できたら、掲示板にCSRファイルを添付して通知してください。 CSRファイルはテキストファイルなのでコピー&ペーストでも構いません。ま た公開情報しか含まれていないので秘匿する必要はありません。

演習者からの通知をうけ講師が認証局に申請してサーバ証明書を取得します。

2.9 サーバ証明書の取得

講師から掲示板でサーバ証明書を渡します。演習者は受け取った証明書ファイ ルの中身を確認してください。

2.10 サーバ証明書の確認

認証局から発行された証明書は zip ファイルで渡されます。 ここでは server21.hokkaido.koulayer.com のCSRで発行された例を示します。 各自のサーバ名に読み替えて作業をしてください。

seccamp@server21:~/jizen_work$ ls -l server21.hokkaido.koulayer.com_sha256_en.zip
-rw-r----- 1 seccamp adm 20102 Nov 29 18:06 server21.hokkaido.koulayer.com_sha256_en.zip

zipファイルの中身はさらに4つのzipファイルが格納されています。

seccamp@server21:~/jizen_work$ unzip server21.hokkaido.koulayer.com_sha256_en.zip
Archive:  server21.hokkaido.koulayer.com_sha256_en.zip
  inflating: for IIS.zip
  inflating: for Apache.zip
  inflating: for Nginx.zip
  inflating: for Other Server.zip

for\ Other\ Server.zip を解凍してファイルの中身を確認します。

seccamp@server21:~/jizen_work$ unzip for\ Other\ Server.zip
Archive:  for Other Server.zip
  inflating: 3_user_server21.hokkaido.koulayer.com.crt
  inflating: 2_issuer_Intermediate.crt
  inflating: 1_cross_Intermediate.crt
  inflating: root.crt

3_user_server21.hokkaido.koulayer.com.crt が発行されたサーバ証明書にな るので中身を確認します。

seccamp@server21:~/jizen_work$ openssl x509 -text -in 3_user_server21.hokkaido.koulayer.com.crt -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            60:77:fb:85:03:96:10:06:6c:62:ca:8a:f2:76:68:06
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, O=WoSign CA Limited, CN=WoSign CA Free SSL Certificate G2
        Validity
            Not Before: Nov 27 07:13:30 2015 GMT
            Not After : Nov 27 07:13:30 2016 GMT
        Subject: CN=server21.hokkaido.koulayer.com

Subject に記載されている CNフィールドが自分の演習サーバ名と同じである ことを確認します。

2.11 秘密鍵とサーバ証明書の対応の確認

最後に秘密鍵とサーバ証明書が同一の公開鍵を持つものか確認します。

サーバ証明書から公開鍵ファイルを取り出します(ここではserver21_pub.pem のファイル名で出力)。

seccamp@server21:~/jizen_work$ openssl x509 -pubkey -in
3_user_server21.hokkaido.koulayer.com.crt -noout > server21_pub.pem

秘密鍵から公開鍵を生成します(ここでは private_pubkey.pem)。

seccamp@server21:~/jizen_work$ openssl rsa -pubout -in private.key -out private_pubkey.pem
writing RSA key

両者の diff をとって差分がないことを確認します。

seccamp@server21:~/jizen_work$ diff server21_pub.pem private_pubkey.pem

以上で事前学習は終わりです。秘密鍵は失わないように厳重に管理しておきま す。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment