〜 卓越した品質へ 〜

前回,OpenSSLでCAを構築しました。そのCAからユーザ証明書を発行してみましょう。ユーザ証明書の発行は次の,2パターンの方法があります。

1.CAが鍵ペアを生成して,証明書を発行する。
2.鍵ペアはユーザが作成して,CAはユーザからもらった公開鍵に署名をつける。

それでは順番にユーザ証明書を発行していってみましょう。

CAが鍵ペアを生成して,証明書を発行する

これはCAがPKCS#12ファイルを作成して,ユーザに配布するパターンです。PKCS#12ファイルはパスワードで暗号化されていますので,PKCS#12ファイルとパスワードをユーザに配布する必要があります。この2つは,別々のルートで配布します。
例えば,PKCS#12ファイルを添付して,メール本文にパスワードを書いて送った場合,メールを盗聴されてしまうと,鍵ペアと証明書が取得されてしまいます。メールでファイルを添付したら,パスワードは電話で通知するなどの措置を取ります。

それではユーザ用証明書を発行していきます。
手順としては,次のようになります。
(1)証明書リクエストファイルを生成する。
(2)公開鍵に署名をする。
(3)PKCS#12ファイルを生成する。

(1)証明書リクエストファイルを生成する

コマンドプロンプトから「CA.pl -newreq」を実行します。

C:\myCA>perl C:\OpenSSL-Win32\bin\CA.pl -newreq
C:\myCA>perl C:\OpenSSL-Win32\bin\CA.pl -newreq
Generating a 2048 bit RSA private key
......+++
.......+++
writing new private key to 'newkey.pem'
Enter PEM pass phrase:					# ← newkey.pemファイルのパスワードを設定
Verifying - Enter PEM pass phrase:			# ← newkey.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) []:Edogawa						# ← 町の名前を入れる
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Trusted Design	# ← 会社名を入れる
Organizational Unit Name (eg, section) []:CertUsers	# ← ユーザグループ名を入れる
Common Name (e.g. server FQDN or YOUR name) []:user1	# ← ユーザ名を入れる
Email Address []:user1@trusted-design.net		# ← メールアドレスを入れる

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:				# ← 何も入れずにリターン
An optional company name []:				# ← 何も入れずにリターン
Request is in newreq.pem, private key is in newkey.pem

(2)公開鍵に署名をする

(1)で生成した証明書リクエストファイルにCAの秘密鍵で署名をします。CAが署名をすることで証明書が生成されます。

C:\myCA>perl C:\OpenSSL-Win32\bin\CA.pl -sign
C:\myCA>perl C:\OpenSSL-Win32\bin\CA.pl -sign
Using configuration from C:\OpenSSL-Win32\bin\openssl.cfg
Enter pass phrase for ./demoCA/private/cakey.pem:			# ← CA生成時に入力したCA秘密鍵のパスワードを入力
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number:
            c3:b0:ac:cb:99:9b:d8:db
        Validity
            Not Before: Mar 19 22:35:27 2016 GMT
            Not After : Mar 19 22:35:27 2036 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            localityName              = Edogawa
            organizationName          = Trusted Design
            organizationalUnitName    = CertUsers
            commonName                = user1
            emailAddress              = user1@trusted-design.net
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                2B:72:8F:AD:C4:3F:27:38:A1:0D:5F:07:0E:37:00:29:72:CF:C6:18
            X509v3 Authority Key Identifier:
                keyid:D0:59:65:97:90:8C:DA:A2:EC:5F:79:94:4C:AF:5E:94:FB:C1:B2:23

Certificate is to be certified until Mar 19 22:35:27 2036 GMT (7305 days)
Sign the certificate? [y/n]:y			# ← yでリターン


1 out of 1 certificate requests certified, commit? [y/n]y		# ← yでリターン
Write out database with 1 new entries
Data Base Updated
Signed certificate is in newcert.pem

(3)PKCS#12ファイルを生成する

myCAのフォルダを見ると[newreq.pem][newcert.pem][newkey.pem]の3つのファイルが生成されています。この3つのファイルは今までの手順で作成した,ユーザの証明書リクエストファイル,証明書ファイル,秘密鍵ファイルです。PKCS#12ファイルを生成するためには,このうちの証明書ファイルと,秘密鍵ファイルが必要です。この2つのファイルをパッケージ化するとPKCS#12ファイルになるのです。

C:\myCA>perl C:\OpenSSL-Win32\bin\CA.pl -pkcs12
C:\myCA>perl C:\OpenSSL-Win32\bin\CA.pl -pkcs12
Enter pass phrase for newkey.pem:				# ← 上で入力したnewkey.pemのパスワードを入力
Enter Export Password:							# ← PKCS#12ファイルのパスワードを設定
Verifying - Enter Export Password:				# ← PKCS#12ファイルのパスワードを確認入力
PKCS #12 file is in newcert.p12

鍵ペアはユーザが作成して,CAはユーザからもらった証明書に署名をつける

鍵ペアはユーザが作成して,CAはユーザからもらった証明書に署名をつけるパターンは,上のパターンの「(1)証明書リクエストファイルを生成する」をユーザのPCで実行することになります。ユーザからの証明書リクエストファイル「newreq.pem」を見ると,次のようなファイルになっています。

-----BEGIN CERTIFICATE REQUEST-----
MIIC2zCCAcMCAQAwgZUxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzEQMA4G
A1UEBwwHRWRvZ2F3YTEXMBUGA1UECgwOVHJ1c3RlZCBEZXNpZ24xEjAQBgNVBAsM
CUNlcnRVc2VyczEOMAwGA1UEAwwFdXNlcjExJzAlBgkqhkiG9w0BCQEWGHVzZXIx
QHRydXN0ZWQtZGVzaWduLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBAMA1knTWQfLAaNgxKcFbAOPyit/iPvxV5BRv4jMoohz/twqRerL29cxR9NFn
AwVMZCKRB+BposvuJA8AbbNGjIHWesBg4mxmQEBgVfvZz5we0ViNCzSfoglDn/KN
xGGX1TRaITfjTucue84dy0v41UnlOgRBQvukhyH37dDgG6C3jflcV45aLNsY7TqE
slmbDp/+goGnOkw5Gxf3RYBBKxcp+ZgpwGU3TWMEXWwJTeaQi6fsUuU3etAcuScq
V1jozpC8cmlOG35VtuDQGIoFPvB17T1WLpwwQ166LIZBsjYl3F6G3UQ9L2ZUXIc5
3R3T7hZHYHrLte9ientWfmZq1SUCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQC1
8oGM1S5aIdcW3VTGgde2PDZaoOD+e6gy3IR8wErGpynuT+AkRSPa5abPY6+npnDZ
A4o/ZDltPwmy2baobKj2DvQmZEKnQqwwH7OpNrdXp/P2BK/FXm0lcZloTk5sbX2u
V4eWjzpld3qnFxWZ1ybg3vJCoWcYUK/Y3BCkhF/gjjKxBsOAxw492XcuckoxDt8u
9g4Q6d9GDIf4kiAvK5ile8DUGtv7iacrHorjrEm0Hh6sIN1EuF/WJNw6kcFK7z/E
bLHiwjqOc2s6TIANVdrNf8WpsPQqcwFOtFGI6R7HxkrVvkzlY89ZCtuKGtL79rF+
UEJv8QW5gc+uELuOnY2X
-----END CERTIFICATE REQUEST-----

これが証明書リクエストファイル(CSR)と言われるもので,PKCS#8の形式になっていると,普通のCAなら受け取ることができます。このファイルをCAに渡して署名してもらうと,ユーザ証明書の出来上がりです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.