電子署名(署名リクエスト)

 今回は「署名リクエスト(CSR)」についてです。

1. 署名リクエスト – CSR (Certificate Signing Request)

CSRというのは「自身(個人でも組織でも)の住所・名前・メールアドレスなどの情報を、公開鍵暗号の秘密鍵と紐つけて作ったデータ」です。「紐つける」というのは秘密鍵そのものを込めることではなく、生成されたデータにその秘密鍵とペアとなる公開鍵を込める作業になります。

CSRはウェブサイトの暗号化通信を実装する際に必要な「サーバー証明書」を発行してもらう際にも必要です。実際にCSRを生成する作業は下記の通りです。

上記の実行結果は下記です。

公開鍵
—–BEGIN PUBLIC KEY—–
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu12cLtGphx04sRkUx4Rq
I/7YHylTR+XJFjKM5ZWKaymOyTSB6+8L4nC7Eik22xtJcxvX6imbJs4UiGpWs4ef
jGWQShfJxZLUvuKJsp90e4B1EmVs9jKm779gWBDHU52+oeU45Q+kgwhvFuKGw/a3
vVWdUfDsuzdtQnd8kyGBwX5tBCN4APEWoHiJWzxw1u38cL2Dn1cxkzKpCapTUedb
3pXWqfroszv2vQ/mTDs4yiAw08q2sH1NfD6x4oYtNHtA3r22P0RQp9hvQMxGHYu/
Jm+Mh25n8I9DzJvxsLiVGHJQWI9MJE2EsdEb1/MqW7CcE8xNp07gHFBUU/Mjq7uD
XwIDAQAB
—–END PUBLIC KEY—–

生成されたCSR(base64_encodeされた状態)
—–BEGIN CERTIFICATE REQUEST—–
MIIC3TCCAcUCAQAwgZcxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzERMA8G
A1UEBwwITWluYXRva3UxFTATBgNVBAoMDFRlc3QgTGltaXRlZDESMBAGA1UECwwJ
VGVzdCBUZWFtMRMwEQYDVQQDDApGaXJzdCBMYXN0MSUwIwYJKoZIhvcNAQkBFhZG
aXJzdC5MYXN0QGV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAu12cLtGphx04sRkUx4RqI/7YHylTR+XJFjKM5ZWKaymOyTSB6+8L4nC7
Eik22xtJcxvX6imbJs4UiGpWs4efjGWQShfJxZLUvuKJsp90e4B1EmVs9jKm779g
WBDHU52+oeU45Q+kgwhvFuKGw/a3vVWdUfDsuzdtQnd8kyGBwX5tBCN4APEWoHiJ
Wzxw1u38cL2Dn1cxkzKpCapTUedb3pXWqfroszv2vQ/mTDs4yiAw08q2sH1NfD6x
4oYtNHtA3r22P0RQp9hvQMxGHYu/Jm+Mh25n8I9DzJvxsLiVGHJQWI9MJE2EsdEb
1/MqW7CcE8xNp07gHFBUU/Mjq7uDXwIDAQABoAAwDQYJKoZIhvcNAQEFBQADggEB
ALOY0uNgBGO2SA4WAN9Qz6ZmJru3LansaiI4xuHhVTtffWcDSlINkIbvfOAEWDr6
2o0kk3X9Ga/18WPhE/6/zbwOMALZpcKNAE3kuZ4eEvTl2nNGKP7FpccEaT9Rri6T
CNwNvPrkiH92y+zAIOgZdEna7SlxT/4WetSSdOH9wfK4Q2Q38AgTZuCyVHIERzU4
C8uGwj7NQK5OyvEdWzZOcvZ6elg+R6o81u1A0fXQ91NYIF5++/wyPIMxnqIlingN
2v8rZfOZ0MpkYvJhXmaJlmlm9gnGKmCp2SEcyAVzk0+EHPOccnk3d2AHi3JyHfww
zTcP/OLsRFn4yiTKVtuCCN0=
—–END CERTIFICATE REQUEST—–

CSRに込められた名前・住所・メールアドレスなどの情報
array(7) {
[“C”]=>
string(2) “JP”
[“ST”]=>
string(8) “Tokyo”
[“L”]=>
string(17) “Minatoku”
[“O”]=>
string(12) “Test Limited”
[“OU”]=>
string(9) “Test Team”
[“CN”]=>
string(10) “First Last”
[“emailAddress”]=>
string(22) “First.Last@example.com”
}

CSRから抽出された公開鍵
—–BEGIN PUBLIC KEY—–
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu12cLtGphx04sRkUx4Rq
I/7YHylTR+XJFjKM5ZWKaymOyTSB6+8L4nC7Eik22xtJcxvX6imbJs4UiGpWs4ef
jGWQShfJxZLUvuKJsp90e4B1EmVs9jKm779gWBDHU52+oeU45Q+kgwhvFuKGw/a3
vVWdUfDsuzdtQnd8kyGBwX5tBCN4APEWoHiJWzxw1u38cL2Dn1cxkzKpCapTUedb
3pXWqfroszv2vQ/mTDs4yiAw08q2sH1NfD6x4oYtNHtA3r22P0RQp9hvQMxGHYu/
Jm+Mh25n8I9DzJvxsLiVGHJQWI9MJE2EsdEb1/MqW7CcE8xNp07gHFBUU/Mjq7uD
XwIDAQAB
—–END PUBLIC KEY—–

というように、CSRが生成されて名前・住所・メールアドレスなどや公開鍵が含まれていることがわかります。このCSRに対し、第三者が署名をすることで「この名前・住所・メールアドレスなどや公開鍵について私が確認しましたよ」と示す証明書(これがSSL/TLS通信でのサーバ証明書)となります。なお、CSRへの署名は第三者ではなく自分自身で行うことも可能(自己署名証明書 self-signed certificateと呼んで信用度の度合いは下げて扱われます)です。

ウェブサイトの暗号化通信は、サーバー証明書に含まれる公開鍵を使ってブラウザで情報を暗号化し、それを受け取ったサーバーは秘密鍵で復号するので、サーバーにはサーバ証明書内の公開鍵にひもついた秘密鍵を持っておくことになります。

CSRへの署名は別の署名(とそれに対応する秘密鍵)で行われます。こうして考えると署名した署名の署名は誰がするのだという無限ループに陥るように思うでしょう。結局は「Certificate Authority(CA)」と呼ばれる「認証局となる大御所(Verisignとか)」がおこなったかが署名の信用度を決めているのが実情です。


次回はようやく要約関数に言及します。

0
Would love your thoughts, please comment.x
()
x