EAP-TLS用のクライアント証明書をOpenSSLで発行する方法を説明する。

PKIの仕組みにおいては、秘密鍵はユーザ側で作成するのが望ましいとされるが、なかなかエンドユーザにそれを求めるのは難しい。そこで、ここではCA局で秘密鍵・証明書を作成する手順を説明する。最終的には、PKCS#12という秘密鍵・クライアント証明書・CA証明書をひとまとめにした.p12ファイル形式を作成する。この.p12形式ファイルは、クライアント側でまとめてインストールできるので非常に便利である。

①ユーザの秘密鍵(user_key.pem)の作成
ここでは、testuser4というユーザに対して証明書を発行する。

#  openssl genrsa -aes256 2048 > testuser4_key.pem
Generating RSA private key, 2048 bit long modulus
..+++
...............................+++
e is 65537 (0x10001)
Enter pass phrase: ・・・ユーザの秘密鍵のパスフレーズを入力
Verifying - Enter pass phrase: ・・・ユーザの秘密鍵のパスフレーズを再入力

#

②CSRを作成する。
# openssl req -new -key testuser4_key.pem -out testuser4_csr.pem -reqexts clientAuth
Enter pass phrase for testuser4_key.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) [jp]:  ・・・openssl.cnfに設定したデフォルトが表示されるので、そのままでOK
State or Province Name (full name) [Japan]: ・・・openssl.cnfに設定したデフォルトが表示されるので、そのままでOK
Locality Name (eg, city) []: ・・・EnterでOK
Organization Name (eg, company) [viva-musen]: ・・・openssl.cnfに設定したデフォルトが表示されるので、そのままでOK
Organizational Unit Name (eg, section) []: ・・・EnterでOK
Common Name (eg, your name or your server's hostname) []:testuser4 ・・・ユーザ名を入力
Email Address []: ・・・EnterでOK

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

③CAで署名し、証明書を発行する
# openssl ca -in testuser4_csr.pem -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem -out testuser4_cert.pem
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:・・・CAの秘密鍵のパスフレーズを入力
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number:
            bb:09:ba:8e:7c:**:**:**
        Validity
            Not Before: Dec  9 04:57:49 2012 GMT
            Not After : Dec  9 04:57:49 2013 GMT
        Subject:
            countryName               = jp
            stateOrProvinceName       = Japan
            organizationName          = viva-musen
            commonName                = testuser4
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                2B:21:62:85:9C:06:2B:11:4C:C9:C5:71:6C:0D:B1:B8:C4:F7:81:B9
            X509v3 Authority Key Identifier:
                keyid:7D:75:1A:61:C0:7D:57:0D:6F:9D:45:27:2A:5D:C3:3B:0D:06:E0:9B

Certificate is to be certified until Dec  9 04:57:49 2013 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
#

④PKCS#12形式のファイルに、秘密鍵・ユーザ証明書・CA証明書をパッケージングする
# openssl pkcs12 -export -inkey testuser4_key.pem -in testuser4_cert.pem -certfile /etc/pki/CA/cacert.pem -out testuser4.p12
Enter pass phrase for testuser4_key.pem: ・・・ユーザの秘密鍵のパスフレーズを入力
Enter Export Password: ・・・PKCS#12ファイルのパスワードを入力する
Verifying - Enter Export Password: ・・・PKCS#12ファイルのパスワードを再入力する
#

ここで出来上がった、.p12ファイルを各ユーザに配布する。