11
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ssl証明書まとめ

Posted at

簡単なところからちょっと応用的なところまでまとめる。

#sslとは?
secure socket layerの略。
インターネット上で通信を暗号化する技術。

何を暗号化するのか?

passwordや暗証番号など。

どのような技術を用いているか。

  • 公開鍵暗号
  • 共通鍵暗号
  • ハッシュ

証明書作成

証明書発行の手順

  1. サーバ管理者が秘密鍵ファイルを(server.key)を作成。
  2. サーバ管理者が秘密鍵ファイルから、公開鍵(public key)と電子署名を組み合わせて、証明書要求ファイルを作成する。サーバ管理者はこの証明書要求ファイルを認証局に送付する。
  3. 認証局は自分の秘密鍵で、証明書要求ファイルに署名し、サーバ証明書(server.crt)を作成し、返却する。

image

CSRとは

certificate signing requestまたはcertification requestの略。
内容は以下のものからなる。

  • 公開鍵
  • 申請者の署名
  • 識別名

識別名とは
common name
organization
など証明書要求を作る際に入力する項目のこと。

実際に確認してみる。確認の際にはまずcat等のコマンドで
作成したCSRの内容をコピーし,下記のように

$openssl req -text -noout

と打った後にコピーしたCSRの内容をペーストすると見れる。

$ openssl req  -text -noout
-----BEGIN CERTIFICATE REQUEST-----
MIICtjCCAZ4CAQAwcTELMAkGA1UEBhMCSlAxDjAMBgNVBAgTBVRva3lvMRIwEAYD
VQQHEwlNaW5hdG8ta3UxFjAUBgNVBAoTDVNTTCBUZXN0IENvcnAxFDASBgNVBAsT
C3Rlc3QtMjAxNjA1MRAwDgYDVQQDEwd0ZXN0LmpwMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEA0FKYiv6u5sSAMln/y7PStD094/om343VPcwQJEHAnqg3
UKPbwZXJYpd8D6TJk7dLA3Wv3XHuTvN8SGJZu+L2jK7jcwpy9wm1iSwnkzWzlZus
jV97rMxWTmdarAC4M4B/WEAmn2I8+b+h1TL8Si14Q5JY/YLIsgXXGoQKFUL1Egx3
5Qex8NPJ3OkkM5ISIJrJU+BMg/0tNLEe5wLIP1aLxBsmezaGTi3OnJvfC2vfDeej
07yjtAYiHjD1jkWFCjNtWAblxNlTFMGPT5FfFolpRhBXM/7gKgGyUQxB/w+0xZFp
/oKNShd8xsnu6RWFZ2f7iLtN4BlOQMQqT/f5zTIdlwIDAQABoAAwDQYJKoZIhvcN
AQEFBQADggEBAI2wOElmUhebghfw9wXcqXiQekjk/FEfNBO7N8e+AAxOfQRkkyXB
pzqVSAbK9MxbGW3tuB2wC8var1/G6a2RntIEypXDz+cR2+sWxoH3OfQ9bT8f/5xL
TCJ5azM1O/zu3P+gbM3iytZi8D/Vw7UlpyhHMplUaueaYxvMdhrBu+InrBBv3IvJ
M4spFzZrEzGqpUrQ+2WMHGr6867+Td0J2qkpZFIkGoOdsVg/igqD6hkiOsh5PjBW
SufIOsqol5pCynbESWdvM9mLLI/3tNpig0dZMwGKEIRnZDwIjl9kCqDqvGORHOWp
X9cwvVtTZNUQAZHjCiYt/Tjlp9ovUJMaCMs=
-----END CERTIFICATE REQU
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP, ST=Tokyo, L=Minato-ku, O=SSL Test Corp, OU=test-201605, CN=test.jp
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (2048 bit)
                Modulus (2048 bit):
                    00:d0:52:98:8a:fe:ae:e6:c4:80:32:59:ff:cb:b3:
                    d2:b4:3d:3d:e3:fa:26:df:8d:d5:3d:cc:10:24:41:
                    c0:9e:a8:37:50:a3:db:c1:95:c9:62:97:7c:0f:a4:
                    c9:93:b7:4b:03:75:af:dd:71:ee:4e:f3:7c:48:62:
                    59:bb:e2:f6:8c:ae:e3:73:0a:72:f7:09:b5:89:2c:
                    27:93:35:b3:95:9b:ac:8d:5f:7b:ac:cc:56:4e:67:
                    5a:ac:00:b8:33:80:7f:58:40:26:9f:62:3c:f9:bf:
                    a1:d5:32:fc:4a:2d:78:43:92:58:fd:82:c8:b2:05:
                    d7:1a:84:0a:15:42:f5:12:0c:77:e5:07:b1:f0:d3:
                    c9:dc:e9:24:33:92:12:20:9a:c9:53:e0:4c:83:fd:
                    2d:34:b1:1e:e7:02:c8:3f:56:8b:c4:1b:26:7b:36:
                    86:4e:2d:ce:9c:9b:df:0b:6b:df:0d:e7:a3:d3:bc:
                    a3:b4:06:22:1e:30:f5:8e:45:85:0a:33:6d:58:06:
                    e5:c4:d9:53:14:c1:8f:4f:91:5f:16:89:69:46:10:
                    57:33:fe:e0:2a:01:b2:51:0c:41:ff:0f:b4:c5:91:
                    69:fe:82:8d:4a:17:7c:c6:c9:ee:e9:15:85:67:67:
                    fb:88:bb:4d:e0:19:4e:40:c4:2a:4f:f7:f9:cd:32:
                    1d:97
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha1WithRSAEncryption
        8d:b0:38:49:66:52:17:9b:82:17:f0:f7:05:dc:a9:78:90:7a:
        48:e4:fc:51:1f:34:13:bb:37:c7:be:00:0c:4e:7d:04:64:93:
        25:c1:a7:3a:95:48:06:ca:f4:cc:5b:19:6d:ed:b8:1d:b0:0b:
        cb:da:af:5f:c6:e9:ad:91:9e:d2:04:ca:95:c3:cf:e7:11:db:
        eb:16:c6:81:f7:39:f4:3d:6d:3f:1f:ff:9c:4b:4c:22:79:6b:
        33:35:3b:fc:ee:dc:ff:a0:6c:cd:e2:ca:d6:62:f0:3f:d5:c3:
        b5:25:a7:28:47:32:99:54:6a:e7:9a:63:1b:cc:76:1a:c1:bb:
        e2:27:ac:10:6f:dc:8b:c9:33:8b:29:17:36:6b:13:31:aa:a5:
        4a:d0:fb:65:8c:1c:6a:fa:f3:ae:fe:4d:dd:09:da:a9:29:64:
        52:24:1a:83:9d:b1:58:3f:8a:0a:83:ea:19:22:3a:c8:79:3e:
        30:56:4a:e7:c8:3a:ca:a8:97:9a:42:ca:76:c4:49:67:6f:33:
        d9:8b:2c:8f:f7:b4:da:62:83:47:59:33:01:8a:10:84:67:64:
        3c:08:8e:5f:64:0a:a0:ea:bc:63:91:1c:e5:a9:5f:d7:30:bd:
        5b:53:64:d5:10:01:91:e3:0a:26:2d:fd:38:e5:a7:da:2f:50:
        93:1a:08:cb

デジタル署名

## デジタル署名で何ができるか?

  • 改ざんやなりすましの検知
  • 否認の防止

具体的に発生する行為は?

  • メッセージの署名の作成
  • メッセージの署名を検証

どのようにして行うか?

  • 署名は署名者が秘密鍵を用いて行う。(=秘密鍵で暗号化する。)
  • 署名の検証は検証者たちが公開鍵を用いて行う。(=公開鍵で復号化する。)

*基本的にメッセージに対して直接署名することはない。
(メッセージのハッシュ値に対して行う。)

よって
メッセージ⇨ハッシュ関数を通してハッシュ値作成⇨秘密鍵で署名がフローになる。

公開鍵暗号とデジタル署名の鍵の使い方について

秘密鍵 公開鍵
公開鍵暗号 受信者が復号化に使う 送信者たちが暗号化に使う
デジタル署名 署名者が署名の作成に使う 検証者たちが検証に使う
鍵は誰が持つ? 個人が持つ 必要な人は誰でも持っていて良い

認証局

認証局(certification authority:CA)は証明書の管理を行う人。
発行された証明書の内容は以下のようなものが含まれる。

  • 申請者(運営者情報)
  • 発行者(認証局)情報
  • 申請者の公開鍵
  • 認証局の署名

中間証明書とルート証明書の違い

SSL接続する時ブラウザは下層から順に証明書をたどり、最上位のルート証明書までは確認して検証する。

具体的には認証局はサーバ証明書を発行するとともに、認証局の証明書も送られてくる。
もしその認証局も他の認証局から署名を受けている場合、さらにその署名を受けた認証局の証明書もつけて
送られてくる。

最終的には一番上位に位置するルート認証局と呼ばれる認証局の証明書が必ず送られてくる。

ルート証明書はあらかじめブラウザに組み込まれているので、それを照合することによって、
正当性を確認する。

image

ルート証明書の見方

chromeの場合で説明。

  1.  ブラウザの設定をクリック
  2.  詳細設定を表示をクリック
  3.  HTTPS/SSLの証明書の管理をクリック

暗号化

暗号化までの手順

  1. ユーザーがhttpsから始まるURLのリンクにアクセス
  2. アクセスされたwebサーバはwebブラウザにサーバ証明書を送る。証明書にはサーバの公開鍵が入っている。
  3. クライアントはサーバ証明書を受け取り認証を行う。
  4. 認証が済むとクライアントは共通鍵をサーバの公開鍵を使って暗号化する。
  5. サーバは自身の秘密鍵を使って共通鍵を取り出す。

認証について

クライアントはwebサーバにアクセスし、サーバ証明書を送ってもらう。

  1. ルート証明書の正当性の確認
    送られてきた証明書にはルート証明書の署名が付いているので、ブラウザに組み込まれている署名と比較し、ルート証明書が問題ないことを確認する。
  2. サーバ証明書の正当性の確認
    ルート認証局の署名をルート認証局の公開鍵で復号したデータとサーバ証明書のハッシュ値が一致するかを確認する。

図で見ると以下のような流れになる。

image

一方向性ハッシュ関数

何ができるか?

完全性を証明できる。
つまり、書き換えられたりしていないかの確認ができる。

性質

  • ハッシュ値から元のメッセージを推測するのは困難
  • メッセージが1ビット異なると全く異なるハッシュ値が生成される。

一方向性ハッシュ関数の例

  • MD4,MD5(MD:MEssageDigestの略)
  • SHA-1,SHA-256

# 証明書署名要求ファイルの作成方法

##秘密鍵の作成
opensslコマンドを用いて鍵を作成する。

$ openssl genrsa -rand `echo $RANDOM` 2048 > test-`date "+%Y%m"`.pem
0 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
...................+++
................................................+++
e is 65537 (0x10001)
#確認
$ ls
test-201605.pem

CSRキーを作成

Country等を標準入力する。
Corp名等はテストのため適当に作成。

#CSRキー作成
$ openssl req -new -key test-201605.pem -out CSR-test-`date "+%Y%m"`.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]:Tokyo
Locality Name (eg, city) []:Minato-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:SSL Test Corp
Organizational Unit Name (eg, section) []:test-201605
Common Name (e.g. server FQDN or YOUR name) []:test.jp
Email Address []:

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

#確認
$ ls
CSR-test-201605.pem test-201605.pem

11
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?