この製品のドキュメントセットは、偏向のない言語を使用するように配慮されています。このドキュメントセットでの偏向のない言語とは、年齢、障害、性別、人種的アイデンティティ、民族的アイデンティティ、性的指向、社会経済的地位、およびインターセクショナリティに基づく差別を意味しない言語として定義されています。製品ソフトウェアのユーザインターフェイスにハードコードされている言語、RFP のドキュメントに基づいて使用されている言語、または参照されているサードパーティ製品で使用されている言語によりドキュメントに例外が存在する場合があります。シスコのインクルーシブ ランゲージの取り組みの詳細は、こちらをご覧ください。
シスコは世界中のユーザにそれぞれの言語でサポート コンテンツを提供するために、機械と人による翻訳を組み合わせて、本ドキュメントを翻訳しています。ただし、最高度の機械翻訳であっても、専門家による翻訳のような正確性は確保されません。シスコは、これら翻訳の正確性について法的責任を負いません。原典である英語版(リンクからアクセス可能)もあわせて参照することを推奨します。
このドキュメントでは、マルチレベルCAを作成して、Cisco IOS® XEデバイスと互換性のある汎用証明書を作成する方法について説明します。
次の項目に関する知識があることが推奨されます。
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
この目的は、デバイス証明書に署名するためのルートCAと中間CAを持つ2つのレベルのローカル認証局(CA)を作成することです。証明書が署名されると、Cisco IOS XEデバイスにインポートされます。
注:このドキュメントでは、Linux固有のコマンドを使用してファイルを作成および配置します。OpenSSLを使用できる他のオペレーティングシステムでも同じ操作を実行できるように、コマンドについて説明します。
OpenSSLがインストールされているマシンの現在の作業ディレクトリからopenssl.confというテキストファイルを作成します。これらの行をコピーアンドペーストして、証明書署名に必要な設定をOpenSSLに提供します。必要に応じてこのファイルを編集できます。
[ ca ]
default_ca = IntermCA
[ RootCA ]
dir = ./RootCA
certs = $dir/RootCA.db.certs
crl_dir = $dir/RootCA.db.crl
database = $dir/RootCA.db.index
unique_subject = yes
new_certs_dir = $dir/RootCA.db.certs
certificate = $dir/RootCA.crt
serial = $dir/RootCA.db.serial
#crlnumber = $dir/RootCA.db.crlserial
private_key = $dir/RootCA.key
RANDFILE = $dir/RootCA.db.rand
name_opt = ca_default
cert_opt = ca_default
############################# Modify default days for certificates signed by Root CA (Intermediate certs only) ##################################
default_days = 360
default_md = sha256
preserve = no
policy = optional_policy
[ IntermCA ]
dir = ./IntermCA
certs = $dir/IntermCA.db.certs
crl_dir = $dir/IntermCA.db.crl
database = $dir/IntermCA.db.index
unique_subject = yes
new_certs_dir = $dir/IntermCA.db.certs
certificate = $dir/IntermCA.crt
serial = $dir/IntermCA.db.serial
private_key = $dir/IntermCA.key
RANDFILE = $dir/IntermCA.db.rand
name_opt = ca_default
cert_opt = ca_default
# Certificate field options
############################# Modify default days for certificates signed by Intermediate CA cert (device certificates)##################################
default_days = 1000
#default_crl_days = 1000
default_md = sha256
# use public key default MD
preserve = no
policy = optional_policy
[ optional_policy ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca # The extentions to add to the signed cert
string_mask = nombstr
[ req_distinguished_name ]
countryName = Country Name
countryName_default = MX
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or province
stateOrProvinceName_default = CDMX
localityName = Locality
localityName_default = CDMX
organizationName = Organization name
organizationName_default = Cisco lab
organizationalUnitName = Organizational unit
organizationalUnitName_default = Cisco Wireless
commonName = Common name
commonName_max = 64
[ req_attributes ]
# challengePassword = A challenge password
# challengePassword_min = 4
# challengePassword_max = 20
#This section contains the extensions used for the Intermediate CA certificate
[ v3_ca ]
# Extensions for a typical CA
basicConstraints = CA:true
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
subjectAltName = @Intermediate_alt_names
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
[ crl_ext ]
# CRL extensions.
#authorityKeyIdentifier=keyid:always,issuer:always
#DEFINE HERE SANS/IPs NEEDED for Intermediate CA device certificates
[Intermediate_alt_names]
DNS.1 = Intermediate.example.com
DNS.2 = Intermediate2.example.com
#Section for endpoint certificate CSR generation
[ endpoint_req_ext ]
subjectAltName = _alt_names
#Section for endpoint certificate sign by CA
[ Endpoint ]
basicConstraints=CA:FALSE
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
#Change the key usage according to the certificate usage needs
extendedKeyUsage = clientAuth
subjectAltName = _alt_names
#Define here SANS/IPs needed for Endpoint certificates
[endpoint_alt_names]
DNS.1 = Endpoint.example.com
DNS.2 = Endpoint2.example.com
#Section for IOS-XE device certificate CSR generation
[ device_req_ext ]
subjectAltName = @IOS_alt_names
#Section for IOS-XE certificate sign by CA
[ IOS_cert ]
basicConstraints=CA:FALSE
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
#Change the key usage according to the certificate usage needs
extendedKeyUsage = clientAuth , serverAuth
subjectAltName = @IOS_alt_names
#Define here SANS/IPs needed for IOS-XE certificates
[IOS_alt_names]
DNS.1 = IOSXE.example.com
DNS.2 = IOSXE2.example.com
現在のディレクトリにRootCAという名前のフォルダを作成します。その中に、RootCA.db.tmp、RootCA.db.certs、およびRootCA.db.crlという3つのフォルダを作成します。
mkdir RootCA
mkdir RootCA/RootCA.db.tmp
mkdir RootCA/RootCA.db.certs
mkdir RootCA/RootCA.db.crl
RootCAフォルダ内にRootCA.db.serialというファイルを作成します。このファイルには、証明書のシリアル番号の初期値を含める必要があります。この例では、01が選択された値です。
RootCAフォルダ内にRootCA.db.crlserialというファイルを作成します。このファイルには、証明書失効リスト(CRL)番号の初期値が含まれている必要があります。この場合は、01が選択されています。
echo 01 > RootCA/RootCA.db.serial
echo 01 > RootCA/RootCA.db.crlserial
RootCAフォルダ内にRootCA.db.indexというファイルを作成します。
touch RootCA/RootCA.db.index
RootCAフォルダ内にRootCA.db.randという名前のファイルを作成し、内部の乱数生成器のシードとして機能するように、このファイルに8192のランダムバイトを設定します。
openssl rand -out RootCA/RootCA.db.rand 8192
現在のディレクトリにIntermCAというフォルダを作成します。その中に、IntermCA.db.tmp、IntermCA.db.certs、およびIntermCA.db.crlという3つのフォルダを作成します。
mkdir IntermCA
mkdir IntermCA/IntermCA.db.tmp
mkdir IntermCA/IntermCA.db.certs
mkdir IntermCA/IntermCA.db.crl
IntermCAフォルダ内にIntermCA.db.serialというファイルを作成します。このファイルには、証明書のシリアル番号の初期値を含める必要があります。この例では、01が選択された値です。
IntermCAフォルダ内にIntermCA.db.crlserialというファイルを作成します。このファイルには、証明書失効リスト(CRL)番号の初期値が含まれている必要があります。この場合は、01が選択されています。
echo 01 > IntermCA/IntermCA.db.serial
echo 01 > IntermCA/IntermCA.db.crlserial
IntermCAフォルダ内にIntermCA.db.indexという名前のファイルを作成します。
IntermCAフォルダ内にIntermCA.db.randという名前のファイルを作成し、内部の乱数生成器のシードとして機能するように8192のランダムバイトを設定します。
touch IntermCA/IntermCA.db.index
IntermCAフォルダ内にIntermCA.db.randという名前のファイルを作成し、内部の乱数生成器のシードとして機能するように8192のランダムバイトを設定します。
openssl rand -out IntermCA/IntermCA.db.rand 8192
これは、すべての初期ルートおよび中間CAファイルを作成した後のファイル構造です。
mariomed@CSCO-W-PF320YP6:/mnt/c/Users/mariomed/radsecfiles1$ tree
.
├── IntermCA
│ ├── IntermCA.db.certs
│ ├── IntermCA.db.crl
│ ├── IntermCA.db.crlserial
│ ├── IntermCA.db.index
│ ├── IntermCA.db.rand
│ ├── IntermCA.db.serial
│ └── IntermCA.db.tmp
├── RootCA
│ ├── RootCA.db.certs
│ ├── RootCA.db.crl
│ ├── RootCA.db.crlserial
│ ├── RootCA.db.index
│ ├── RootCA.db.rand
│ ├── RootCA.db.serial
│ └── RootCA.db.tmp
└── openssl.cnf
次のコマンドを実行して、ルートCAの秘密キーを作成します。
openssl genrsa -des3 -out ./RootCA/RootCA.key 4096
注意: OpenSSLでは、キーを生成する際にパスフレーズの入力が必要です。パスフレーズのシークレットと、生成された秘密キーを安全な場所に保管します。アクセス権を持つすべてのユーザが、ルートCAとして証明書を発行できます。
openSSLでreq
コマンドを使用して、ルートCA自己署名証明書を作成します。-x509
フラグは、証明書署名要求(CSR)を内部で作成し、自動的に自己署名します。-days
のパラメータとサブジェクト代替名を編集します。共通の名前を入力するようプロンプトが表示されます。入力する共通名(CN)がサブジェクト代替名(SAN)と一致していることを確認します。
openssl req -new -key ./RootCA/RootCA.key -out ./RootCA/RootCA.crt -config openssl.cnf -x509 -days 3650 -addext "subjectAltName = DNS:RootCA"
生成されたファイルはRootCA.crtという名前で、RootCAフォルダ内にあります。このファイルはルートCA証明書です。
ルートフォルダ内に署名済み中間CA証明書を格納するフォルダを作成します。
mkdir ./RootCA/RootCA.db.certs/IntermCA
中間証明書用の秘密キーを作成します。
openssl genrsa -des3 -out ./RootCA/RootCA.db.certs/IntermCA/IntermCA.key 4096
注意: OpenSSLでは、キーを生成する際にパスフレーズの入力が必要です。パスフレーズのシークレットと、生成された秘密キーを安全な場所に保管します。このCAにアクセスできるユーザは、中間CAとして証明書を発行できます。
中間CA証明書署名要求を作成します。端末から、証明書情報の入力を求めるプロンプトが表示されます。
openssl req -new -key ./RootCA/RootCA.db.certs/IntermCA/IntermCA.key -out ./RootCA/RootCA.db.certs/IntermCA/IntermCA.csr -config openssl.cnf
openssl.cnfファイルのRootCAセクションを使用して、中間CSRに署名します。
openssl ca -config openssl.cnf -name RootCA -extensions v3_ca -out ./RootCA/RootCA.db.certs/IntermCA/IntermCA.crt -infiles ./RootCA/RootCA.db.certs/IntermCA/IntermCA.csr
生成されたファイルはIntermCA.crtという名前で、RootCAフォルダ内にあります。このファイルはルートCA証明書です。
中間CAの初期ファイルの一部として作成した独自のフォルダに、中間の証明書とキーを移動します。
cp ./RootCA/RootCA.db.certs/IntermCA/IntermCA.crt ./RootCA/RootCA.db.certs/IntermCA/IntermCA.key ./IntermCA/
これは、最初のルートCAと中間CAの両方の秘密キーと証明書を作成した後のファイル構造です。
mariomed@CSCO-W-PF320YP6:/mnt/c/Users/mariomed/radsecfiles$ tree
.
├── IntermCA
│ ├── IntermCA.crt <------Intermediate CA certficate
│ ├── IntermCA.db.certs
│ ├── IntermCA.db.crl
│ ├── IntermCA.db.crlserial
│ ├── IntermCA.db.index
│ ├── IntermCA.db.rand
│ ├── IntermCA.db.serial
│ ├── IntermCA.db.tmp
│ └── IntermCA.key <------Intermediate CA private key
├── RootCA
│ ├── RootCA.crt <------Root CA certficate
│ ├── RootCA.db.certs
│ │ ├── 01.pem
│ │ └── IntermCA
│ │ ├── IntermCA.crt
│ │ ├── IntermCA.csr
│ │ └── IntermCA.key
│ ├── RootCA.db.crl
│ ├── RootCA.db.crlserial
│ ├── RootCA.db.index
│ ├── RootCA.db.index.attr
│ ├── RootCA.db.index.old
│ ├── RootCA.db.rand
│ ├── RootCA.db.serial
│ ├── RootCA.db.serial.old
│ ├── RootCA.db.tmp
│ └── RootCA.key <------Root CA private key
└── openssl.cnf
Cisco IOS XEデバイス証明書を保存する新しいフォルダを作成します。
mkdir ./IntermCA/IntermCA.db.certs/IOSdevice
デバイス秘密キーIOSdevice.keyとデバイスCSR IOSdevice.csrを作成します。device_req_extセクションを使用して、そのセクションのSANをCSRに追加します。
openssl req -newkey rsa:4096 -sha256 -keyout ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.key -nodes -config openssl.cnf -out ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.csr -reqexts device_req_ext
CSRに指定する共通名がSANに一致するように、opnessl.cnfファイルの[IOS_alt_names]セクションを変更します。
#Define here SANS/IPs needed for IOS-XE certificates
[IOS_alt_names]
DNS.1 = IOSXE.example.com
DNS.2 = IOSXE2.example.com
中間CA IntermCAセクションでIOS XEデバイスCSRに署名します。openSSLコンフィギュレーションファイルをポイントするには-config
を、IOS_certセクションをポイントするには-extensions
を使用します。これにより、署名付き証明書にSANが保持されます。
openssl ca -config openssl.cnf -extensions IOS_cert -name IntermCA -out ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.crt -infiles ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.csr
この手順の後、IOS XEデバイス用の有効な証明書IOSdevice.crtを作成し、一致する秘密キーIOSdevice.keyを指定しました。
この時点で、ローカルCAを導入し、IOS XEデバイスに対して1つの証明書を発行しました。このCAを使用して、エンドポイントID証明書を生成することもできます。これらの証明書は、9800ワイヤレスLANコントローラでのローカルEAP認証や、RADIUSサーバでのdot1x認証などを実行する場合にも有効です。このセクションでは、エンドポイント証明書を生成できます。
エンドポイント証明書を保存するフォルダを作成します。
mkdir ./IntermCA/IntermCA.db.certs/Endpoint
CSRに指定する共通名がSANと一致するように、openSSL.cnfファイル[ endpoint_alt_names ]セクションを変更します。
#Define here SANS/IPs needed for Endpoint certificates
[endpoint_alt_names]
DNS.1 = Endpoint.example.com
DNS.2 = Endpoint2.example.com
セクションendpoint_req_ext for SANsを使用して、エンドポイントの秘密キーとWLC CSRを作成します。
openssl req -newkey rsa:2048 -keyout ./IntermCA/IntermCA.db.certs/Endpoint/Endpoint.key -nodes -config openssl.cnf -out ./IntermCA/IntermCA.db.certs/Endpoint/Endpoint.csr -reqexts endpoint_req_ext
エンドポイントデバイス証明書に署名します。
openssl ca -config openssl.cnf -extensions Endpoint -name IntermCA -out ./IntermCA/IntermCA.db.certs/Endpoint/Endpoint.crt -infiles ./IntermCA/IntermCA.db.certs/Endpoint/Endpoint.csr
ルートCAと中間CAを含むファイルを同じファイルに作成し、Cisco IOS XEデバイスへのインポートに必要なcertfile.crtという名前を付けて./IntermCA/IntermCA.db.certs/WLC/フォルダに保存します。
cat ./RootCA/RootCA.crt ./IntermCA/IntermCA.crt > ./IntermCA/IntermCA.db.certs/IOSdevice/certfile.crt
9800シリーズのWLCでは、証明書インポート用のpfxファイルの作成に、さまざまなコマンドを使用します。pfxファイルを作成するには、Cisco IOS XEバージョンに応じて、次のコマンドのいずれかを実行します。
証明書インポートプロセスの詳細については、『Catalyst 9800 WLCでのCSR証明書の生成とダウンロード』を参照してください
17.12.1より前のバージョンの場合:
openssl pkcs12 -export -macalg sha1 -legacy -descert -out ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.pfx -inkey ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.key -in ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.crt -certfile ./IntermCA/IntermCA.db.certs/IOSdevice/certfile.crt
バージョン17.12.1以降:
openssl pkcs12 -export -out ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.pfx -inkey ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.key -in ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.crt -certfile ./IntermCA/IntermCA.db.certs/IOSdevice/certfile.crt
Cisco IOS XEデバイスにIOSdevice.pfx証明書をインポートします。
WLC# configure terminal
WLC(config)#crypto pki import
pkcs12 [tftp://
/
| ftp://
/
| http://
/
| bootflash:
] password
注:このガイド用に作成したCA証明書が、デバイス証明書を検証する必要のあるデバイスによって信頼されていることを確認してください。たとえば、Cisco IOS XEデバイスでデバイス証明書がWeb管理の目的で使用される場合、管理ポータルにアクセスするすべてのコンピュータまたはブラウザで、信頼ストアにCA証明書が必要です。
Cisco IOS XEデバイスが展開したCAから確認できるオンライン証明書失効リストがないため、証明書の失効チェックを無効にします。
検証パスの一部であるすべてのトラストポイントで無効にする必要があります。ルートCAトラストポイントは、文字列-rrr1が末尾に追加された中間/デバイストランスポイントと同じ名前です。
9800#configure terminal
9800(config)#crypto pki trustpoint IOSdevice.pfx
9800(config)#revocation-check none
9800(config)#exit
9800(config)#crypto pki trustpoint IOSdevice.pfx-rrr1
9800(config)#revocation-check none
9800(config)#exit
作成した証明書の証明書情報を確認するには、Linuxターミナルで次のコマンドを実行します。
openssl x509 -in
-text -noout
完全な証明書情報が表示されます。
Cisco IOS XEデバイスの証明書情報を確認します。
コマンドshow crypto pki certificates verbose
を使用すると、デバイスで使用可能なすべての証明書の証明書情報が出力されます。
9800#show crypto pki certificates verbose
CA Certificate <------Type of certificate
Status: Available
Version: 3
Certificate Serial Number (hex): 2A352E27C69021ECE1AA61751CA1F233E0636FB1
Certificate Usage: General Purpose
Issuer: <-------------DN for issuer
cn=RootCA
ou=Cisco Wireless
o=Cisco lab
l=CDMX
st=CDMX
c=MX
Subject: <--------------DN for subject
cn=RootCA
ou=Cisco Wireless
o=Cisco lab
l=CDMX
st=CDMX
c=MX
Validity Date: <--------Validity date
start date: 14:54:02 Central Jul 22 2024
end date: 14:54:02 Central Jul 20 2034
Subject Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit) <--------------Key size
Signature Algorithm: SHA256 with RSA Encryption
Fingerprint MD5: 432021B5 B4BE15F5 A537385C 4FAB9A94
Fingerprint SHA1: 86D18427 BE619A2A 6C20C314 9EDAAEB2 6B4DFE87
X509v3 extensions:
X509v3 Subject Key ID: 57DEEBD8 3214CA05 176F0CD6 6C842EBC 9ABFF7D8
X509v3 Basic Constraints:
CA: TRUE
X509v3 Subject Alternative Name:
RootCA <------------SANs
IP Address :
OtherNames :
X509v3 Authority Key ID: 57DEEBD8 3214CA05 176F0CD6 6C842EBC 9ABFF7D8
Authority Info Access:
Cert install time: 16:42:09 Central Jul 22 2024
Associated Trustpoints: WLC.pfx-rrr1 <----------Associated trustpoint
Storage: nvram:RootCA#6FB1CA.cer
証明書がCisco IOS XEにインポートされると、新しく作成されたトラストポイントの失効チェックが有効になります。インポートされた証明書トラストポイントを検証に使用する必要があるデバイスに証明書が提示されると、デバイスは存在しない証明書失効リスト(CRL)を検索し、失敗します。メッセージが端末に表示されます。
Jul 17 21:50:39.068: %PKI-3-CRL_FETCH_FAIL: CRL fetch for trustpoint WLC1.pfx failed
Reason : Enrollment URL not configured.
証明書の検証パスにある各トラストポイントに、revocation-check none
コマンドが含まれていることを確認します。
改定 | 発行日 | コメント |
---|---|---|
1.0 |
14-Oct-2024 |
初版 |