無線LANのメリットや運用の注意点、電波や規格などの用語、要件定義や基本設計から
設定・構築・テストにいたるまで、たくさんのことをまとめています。
さらに、Arubaの機器を中心とした無線LANの設計と設定を解かりやすく解説しています。

カテゴリ:6.各種サーバの設定 > 6-6 OpenSSLによる証明書の発行

 PEAPを使うときにはRADIUSサーバに,EAP-TLSを使うときにはRADIUSサーバとクライアントにそれぞれ電子証明書が必要になる。 電子証明書の発行の流れを理解しておこう。

証明書発行の流れ




















(1)秘密鍵・公開鍵ペアの作成
 秘密鍵と公開鍵のペアを作る。秘密鍵の取扱いには注意が必要である。秘密鍵を入手した第三者は,なりすましができるからだ。

(2)CSRの作成
 CSR(証明書署名要求)とは,CAに対して「証明書に署名してください」というお願いをするための情報である。市役所で住民票をもらうために書く申請用紙だと思えばよいだろう。
 CSRには,国名,組織名(会社名),サーバ名,公開鍵などの情報が含まれる。

(3)CSRの送付
 できあがったCSRを,CA(認証局)に送付する。

(4)CAによる署名
 CAでは,本人性の確認行う。証明書を作成して,CAの公開鍵を使って署名する。市役所の公印みたいなものだと思えばよい。

(5)証明書の返送
 CAは,できあがった証明書を要求者に送り返す。

(6)サーバへのインポート
 できあがった証明書と,秘密鍵をセットにしてサーバにインポートする。RADIUSサーバの場合,設定ファイルを置くディレクトリにファイルとして保管する。



CentOS6.3でのCA構築方法。

①OpenSSLの設定を変更しておく。最近の推奨値である鍵長2048bit、メッセージダイジェストsha256に変更する。
# vi /etc/pki/tls/openssl.cnf

106~107行目
default_bits            = 1024
default_md              = sha1
  ↓
default_bits            = 2048
default_md              = sha256

75行目
 default_md      = default               # use public key default MD
  ↓
 default_md      = sha256               # use public key sha256
CA証明書の使用用途(KeyUsage,ExtendedKeyUsage)を指定しておく。[ v3_ca]セクションで、次の行を有効にしておく。それぞれの意味は、NIIのサイトに詳しい解説がある。
basicConstraints = critical,CA:true
keyUsage = cRLSign, keyCertSign , digitalSignature,keyAgreement , keyCertSign , keyEncipherment
extendedKeyUsage = serverAuth, clientAuth

さらに、CSRを作成するときの手間を減らすための設定をする。毎回国名や組織名を入力するのは大変手間がかかる。そこで、入力の手間を減らせるようにopenssl.cnfを変更する。変更した内容が、入力時のデフォルト値になる。

[ req_distinguished_name ]セクションを変更する。内容はサンプルなので、CAを作成したときの名前にあわせて変更する。
・130行目付近
  countryName_default             = XX
   ↓
  countryName_default             = jp

・135行目付近
   #stateOrProvinceName_default    = Default Province
   ↓
   stateOrProvinceName_default   = Japan


・141行目付近
   0.organizationName_default      = Default Company Ltd
   ↓
   0.organizationName_default    = viva-musen

また、クライアント証明書やサーバ証明書を発行するためのテンプレートも作っておく。最終行に追加しておく。これは、証明書の種類がクライアント証明書やサーバ証明書であると言うことを示す情報だ。
[ clientAuth ]
extendedKeyUsage = clientAuth
basicConstraints=CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

[ serverAuth ]
extendedKeyUsage = serverAuth , clientAuth
basicConstraints=CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer


②CA管理用のスクリプトを修正。
# cd /etc/pki/tls/misc/
# cp CA CA.sh

# vi CA.sh

65行目
CADAYS="-days 1095"     # 3 years

CADAYS="-days 3650"     # 10 years  ・・・CA証明書の有効期間は長い方が運用上楽。

130行目
 -out ${CATOP}/$CAREQ
 ↓
 -out ${CATOP}/$CAREQ -sha256 -newkey rsa:2048  ・・・鍵長は2048bitにしておこう。

③新規CAの作成。
# ./CA.sh -newca
CA certificate filename (or enter to create)
(enterを押す)
Making CA certificate ...
Generating a 2048 bit RSA private key
...........+++
.............................+++
writing new private key to '/etc/pki/CA/private/./cakey.pem'
Enter PEM pass phrase: (CAの秘密鍵のパスフレーズを入力)
Verifying - Enter PEM pass phrase:(CAの秘密鍵のパスフレーズを再入力)
-----
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) [XX]:jp ・・・国名を2文字で入力。
State or Province Name (full name) []:Japan ・・・国名または州名を入力(何か入れておかないと、後でエラーになる)
Locality Name (eg, city) [Default City]:. ・・・都市名を入力。空欄にする場合はピリオド。
Organization Name (eg, company) [Default Company Ltd]:viva-musen ・・・組織名(会社名など)を入力
Organizational Unit Name (eg, section) []: ・・・組織単位(部署名など)を入力。
Common Name (eg, your name or your server's hostname) []:viva-musen-CA  ・・・CAの名前を入力
Email Address []: ・・・emailを入力。空欄でも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
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:
            **:09:ba:8e:7c:5f:**:16
        Validity
            Not Before: Dec  8 02:31:43 2012 GMT
            Not After : Dec  6 02:31:43 2022 GMT
        Subject:
            countryName               = jp
            stateOrProvinceName       = Japan
            organizationName          = viva-musen
            commonName                = viva-musen-CA
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                7D:75:1A:**:C0:7D:57:0D:6F:**:45:27:2A:5D:C3:3B:**:06:E0:9B
            X509v3 Authority Key Identifier:
                keyid:**:75:1A:61:C0:7D:57:0D:6F:9D:45:27:2A:**:C3:3B:0D:**:E0:9B

            X509v3 Basic Constraints:
                CA:TRUE
Certificate is to be certified until Dec  6 02:31:43 2022 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated
#chmod 600 /etc/pki/CA/private/cakey.pem
CAの秘密鍵を、root以外がアクセスできないように修正


失敗したら、
# rm -rf /etc/pki/CA/*
を実行してから、再度newscaする。
※CAの構築後は、/etc/pki/CA/のファイルは消してはならない!

この時点で、/etc/pki/CA/にたくさんのファイルができている。
/etc/pki/CA/cacert.pem  ・・・CAの公開鍵証明書(RADIUSサーバやクライアントに配布するファイル)
 →Windowsでインポートする場合には、cacert.cerにリネームしておく。
/etc/pki/CA/private/cakey.pem ・・・CAの秘密鍵(非公開のファイル。厳重に管理すること!)


④出来上がったCA証明書の内容確認
# openssl x509 -in /etc/pki/CA/cacert.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            bb:09:ba:8e:7c:5f:82:16
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=jp, ST=Japan, O=viva-musen, CN=viva-musen-CA
        Validity
            Not Before: Dec  8 02:31:43 2012 GMT
            Not After : Dec  6 02:31:43 2022 GMT
        Subject: C=jp, ST=Japan, O=viva-musen, CN=viva-musen-CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
 ・
 ・
 ・
O7LRl2gxmbq/XUvbXBWouiBuuizpuCyDTJRjsKIhjw/Pi794CVeQyQVj9/WMra3O
U8RtZlIpGKGCEdg=
-----END CERTIFICATE-----



PEAPやEAP-TLSで必要となる、RADIUSサーバの秘密鍵と証明書ファイルの作成方法。

Freeradiusパッケージをインストールすると、デフォルトでサンプルのCAがあるので、まずこれを削除しておく。


# rm -rf /etc/raddb/certs/*

①RADIUSサーバ用の秘密鍵の作成。

作業ディレクトリは、Freeradiusの証明書関係ディレクトリがやりやすい。
# cd /etc/raddb/certs/

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

radius_key.pemファイルができているのを確認する。

②RADIUSサーバ用証明書要求ファイル(CSR)の作成

# openssl req -new -key radius_key.pem -out radius_csr.pem
Enter pass phrase for radius_key.pem: ・・・RADIUSサーバ用の秘密鍵ファイルのパスフレーズを入力
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) [XX]:jp  ・・・国名(2文字)を入力。CAとあわせておく。
State or Province Name (full name) []:Japan  ・・・国名または州名を入力。CAとあわせておく。
Locality Name (eg, city) [Default City]:.
Organization Name (eg, company) [Default Company Ltd]:viva-musen   ・・・組織名(会社名など)を入力。CAとあわせておく。
Organizational Unit Name (eg, section) []:.   ・・・組織単位(部署名など)を入力。
Common Name (eg, your name or your server's hostname) []:radius.viva-musen.net   ・・・共通名(FQDN名やホスト名)を入力。
Email Address []:.

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

CSRファイル(radius_csr.pem)ファイルができたことを確認しておく。

③CSRファイルから、証明書を作成する。
ここからは、CAの作業である。

# openssl ca -in radius_csr.pem -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem -out radius_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:**:ba:8e:7c:5f:**:17
        Validity
            Not Before: Dec  8 04:10:49 2012 GMT
            Not After : Dec  8 04:10:49 2013 GMT
        Subject:
            countryName               = jp
            stateOrProvinceName       = Japan
            organizationName          = viva-musen
            commonName                = radius.viva-musen.net
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                E1:A6:A3:D0:79:**:CC:DA:5B:09:**:88:17:91:09:**:67:8C:**:39
            X509v3 Authority Key Identifier:
                keyid:7D:75:**:61:C0:7D:57:**:6F:9D:45:27:2A:5D:C3:**:0D:06:E0:9B

Certificate is to be certified until Dec  8 04:10: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
#

証明書ファイル(radius_cert.pem)ができたことを確認する。



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ファイルを各ユーザに配布する。


ここでは、p12形式の証明書ファイル(秘密鍵・ユーザ証明書・CA証明書のセット)をインポートする方法を説明する。といっても、何も考えずに.p12ファイルをダブルクリックするだけである。

001


















002



















ここで、p12ファイルを作成したときに設定したパスワードを入力する。
「このキーをエクスポート可能にする」はチェックしないのが望ましい。他者の利用やPCの盗難などによって、秘密鍵を盗まれてしまう恐れがあるからだ。
003



















これも自動でOK。
004


















完了を押すと終わりである。
005


















インポートした証明書は、IEの「ツール」→「インターネットオプション」→「コンテンツ」→「証明書」で確認できる。
「個人」のところにユーザ証明書、「信頼されたルート証明機関」にCA証明書が確認できるはずである。





IEEE802.1Xを構成するとき、どの機器にどんな証明書や鍵が必要になるのかを整理する。

(1)認証局(CA)
・CAの秘密鍵
・CAの電子証明書

(2)RADIUSサーバ
・CAの証明書
・RADIUSサーバの秘密鍵
・RADIUSサーバの電子証明書

(3)EAP-TLSのクライアント
・CAの証明書
・クライアントの秘密鍵
・クライアントの電子証明書

(4)PEAPのクライアント
・CAの証明書

(5)無線LANのAP・WLC
・必要なし

秘密鍵や電子証明書のファイルは、こんな感じの文字列で、そのままでは内容を理解できない。
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQItrKFOSptKcECAggA
・・・・
rcqR+HNnZPxGbP7+WSmQz5YTPlamUdaGOlS7d70sgFcvKmFT+vTqoO6ROULziIp0XUs=
-----END ENCRYPTED PRIVATE KEY-----
そこでopensslコマンドを使うと、秘密鍵や電子証明書の内容を確認することができる。

使い方は次のとおり。

(1)秘密鍵の確認方法
$ openssl rsa -text < 秘密鍵ファイル
Enter pass phrase: ・・・秘密鍵のパスフレーズ入力
Private-Key: (2048 bit)   ・・鍵長
modulus: ・・・モジュラスn(公開鍵の一部だと思ってください)
    00:e3:ee:2f:e9:bb:b6:59:60:e9:c9:e6:6e:22:e3:
  ・・・
    27:2f
publicExponent: 65537 (0x10001) ・・・公開指数e、ここまでが公開鍵
privateExponent: ・・・非公開指数 d、ここからが秘密鍵
    00:9b:ee:60:62:f3:e3:5d:24:1a:ec:e0:32:ea:b5:
  ・・・
    7a:81
prime1: ・・・ n の素因数 p
    00:f4:82:5c:27:4c:22:1d:ed:60:03:b9:87:ad:58:
  ・・・
    7c:fe:ba:98:b8:d1:10:d7:6f
prime2: ・・・ n の素因数 q
    00:ee:a4:5e:fd:ae:f0:8c:5c:06:32:37:7f:41:98:
  ・・・
    26:b8:3f:8c:5e:1c:7d:cc:41
exponent1: ・・・ d mod (p-1)
    00:8a:e1:94:c8:79:75:13:7c:a6:41:d7:5b:1a:7a:
  ・・・
    ec:78:9f:b2:69:9f:ce:aa:1f
exponent2: ・・・ d mod (q-1)
    3d:69:3d:2c:a9:35:2b:d9:8e:9a:a3:9f:72:e0:cd:
  ・・・
    05:b7:0c:c7:37:2b:c4:41
coefficient: ・・・中国剰余定理の係数 q-1 mod p
    00:d4:19:6c:5b:66:4c:47:d6:7e:de:b7:4e:fc:f4:
  ・・・
    da:20:85:fc:51:9d:9a:2e:b5
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA4+4v6bu2WWDpyeZuIuMUnJh6qgWMAF7Sct28mO2nky1Es32h
・・・
RuODjvaZHJ/EQnEKMEc3jeOM6Y8zT0gm9Wmk2JhOvgHaIIX8UZ2aLrU=
-----END RSA PRIVATE KEY-----
なんだかわけがわからないが、見るべきところは鍵長とモジュラス(modulus)である。鍵長は最近では2048bit以上が推奨になっている。モジュラス・公開指数は公開鍵だと思えばよい。証明書のモジュラス・公開指数と一致することで、秘密鍵と電子証明書がペアであることを確認できる。



(2)電子証明書の確認方法
$ openssl x509 -text < 電子証明書ファイル
Certificate:
    Data:
        Version: 3 (0x2)  ・・・X509のバージョン
        Serial Number: ・・・シリアル番号
            bb:09:************82:16
        Signature Algorithm: sha256WithRSAEncryption ・・・署名アルゴリズム
        Issuer: C=jp, ST=Japan, O=viva-musen, CN=viva-musen-CA ・・・発行者(≒CA)
        Validity ・・・有効期間
            Not Before: Dec  8 02:31:43 2012 GMT
            Not After : Dec  6 02:31:43 2022 GMT
        Subject: C=jp, ST=Japan, O=viva-musen, CN=viva-musen-CA  ・・・サブジェクト
        Subject Public Key Info:  ・・・公開鍵の情報
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit) ・・・鍵長
                Modulus: ・・・モジュラス
                    00:e3:ee:2f:e9:bb:b6:59:60:e9:c9:e6:6e:22:e3:
         ・・・ 
                    27:2f
                Exponent: 65537 (0x10001)  ・・・公開指数
         X509v3 extensions:・・・拡張情報
           ・・・
    Signature Algorithm: sha256WithRSAEncryption・・・署名アルゴリズムとCAによる署名
        c3:56:7f:4d:66:aa:15:df:f6:1c:9e:25:c9:09:a5:fa:e6:32:
    ・・・
-----BEGIN CERTIFICATE-----
MIIDZzCCAk+gAwIBAgIJALsJuo58X4IWMA0GCSqGSIb3DQEBCwUAMEoxCzAJBgNV
・・・
U8RtZlIpGKGCEdg=
-----END CERTIFICATE-----
X.509とは電子証明書のファイルフォーマットのことである。標準化されている。
先ほどの秘密鍵と比較したとき、モジュラスと公開指数が一致していることが確認できる。
この二つが一致していれば、電子証明書と秘密鍵がペアであることを確認できる。

その他に見るべき箇所は、発行者・有効期間・サブジェクトなどである。



スポンサードリンク

このページのトップヘ