2017-10-12 08:06 PM
当社製品に限らず電子証明書を使ったAAA処理の検証では製品で自己署名証明書を作成したり
製品でCSRを作成しそれをPrivate CAで署名、公的な証明書発行機関で署名の必要がありますが、
OpenSSLを使用することでWindows/MAC/Linuxのような通常の端末だけで証明書の発行まで可能です。
本ドキュメントでは証明書の作成、当社製品への適用例を挙げ検証の敷居が低くなればと思います。
OpenSSLは多くのMAC/Linuxで最初から使えると思いますので、terminalでwhich opensslで確認ください。
WindowsではOpenSSLインストーラのバイナリやCygwin(https://cygwin.com/)でOpenSSLの導入が可能です。
本ドキュメントではCygwinでinstallしたOpenSSLを使用します。
openssl関連ドキュメントでは多くの場合サーバ上で1つCAをたてる目的でOpenSSLに付属のCA.shを使用して
いますが、本ドキュメントでは複数の検証のための複数の証明書chainや容易に作成容易にやり直しが可能な
例を示します。
以降太字は実際の入力になります。
適当に専用のdirectoryを作成し、opensslにpathが通っていることを確認
hiyoko@hiyoko-PC ~/certlab$ mkdir lab10
hiyoko@hiyoko-PC ~/certlab$ cd lab10
hiyoko@hiyoko-PC ~/certlab/lab10$ which openssl
/usr/bin/openssl
このdirectoryに以下の方法で各ファイルをそれぞれ作成
hiyoko@hiyoko-PC ~/certlab/lab10$ echo "01" > serial
hiyoko@hiyoko-PC ~/certlab/lab10$ echo "00" > crlnumber
hiyoko@hiyoko-PC ~/certlab/lab10$ touch index.txt
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl.cfg
openssl.cfgには以下(オリジナルのopenssl.cnfから不要な箇所を削除・編集してます)をコピー
HOME = . RANDFILE = $ENV::HOME/.rnd [ ca ] default_ca = CA_default # The default ca section [ CA_default ] dir = . database = $dir/index.txt new_certs_dir = $dir serial = $dir/serial crlnumber = $dir/crlnumber RANDFILE = $dir/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert name_opt = ca_default # Subject Name options cert_opt = ca_default # Certificate field options crl_extensions = crl_ext default_days = 365 default_crl_days= 30 default_md = default # use public key default MD preserve = no # keep passed DN ordering policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 2048 distinguished_name = req_distinguished_name x509_extensions = rca string_mask = utf8only [ req_distinguished_name ] [ usr_cert ] [ crl_ext ] authorityKeyIdentifier=keyid:always [ rca ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints = CA:true keyUsage = digitalSignature, cRLSign, keyCertSign [ ica ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always, issuer basicConstraints = CA:TRUE, pathlen:0 keyUsage = digitalSignature, cRLSign, keyCertSign [ svr ] extendedKeyUsage = serverAuth nsComment = "OpenSSL Generated Certificate" basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectKeyIdentifier = hash authorityKeyIdentifier = keyid, issuer crlDistributionPoints = URI:http://www.hogesystems.com/revoke.crl authorityInfoAccess = OCSP;URI:http://ocsp.hogesystems.com subjectAltName = @alt_names [alt_names] DNS.1 = srv1.hogesystems.com DNS.2 = srv1.hogesystems.co.jp [ usr ] extendedKeyUsage = clientAuth, emailProtection nsComment = "OpenSSL Generated Certificate" basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectKeyIdentifier = hash authorityKeyIdentifier = keyid, issuer crlDistributionPoints = URI:http://www.hogesystems.com/revoke.crl authorityInfoAccess = OCSP;URI:http://ocsp.hogesystems.com [ ocsp ] basicConstraints = CA:FALSE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, digitalSignature, keyEncipherment, nonRepudiation extendedKeyUsage = critical, OCSPSigning
この例では架空のHoge Systems社(東京港区六本木)の証明書chainを作成します。
以降ファイル名で使用しているkeyは秘密鍵、crtは証明書、csrは署名要求の意味です。
Subject/passphrase等は適宜変更ください。
検証が終了したらこのdirectoryを削除、別パラメータでchainを作る場合は別direcotryで上記を準備ください。
OpenSSLのコマンドには非常に多くのオプションがありますが、優良なdocumentがInternet上に多くあるので不明なものは
確認ください。
自分で自分の署名をするので、
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl req -new -x509 -config openssl.cfg -extensions rca -newkey rsa:2048 -keyout rcakey.pem -subj "/C=JP/ST=Tokyo/L=Roppongi/O=HogeSystems/OU=RCA/CN=rca.hogesystems.com/emailAddress=rca-admin@hogesystems.com" -days 3650 > rcacrt.pem
Generating a 2048 bit RSA private key
.......................................................................................+++
...............+++
writing new private key to 'rcakey.pem'
Enter PEM pass phrase: cisco123
Verifying - Enter PEM pass phrase: cisco123
hiyoko@hiyoko-PC ~/certlab/lab10$
"rca"はopenssl.cfg内で使用しているSection名です(Root CA)。
"cisco123"はroot CAの秘密鍵で署名する際のpassphraseです。
入力しても実際には表示されません。
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl req -new -config openssl.cfg -sha256 -newkey rsa:2048 -keyout icakey.pem -subj "/C=JP/ST=Tokyo/L=Roppongi/O=HogeSystems/OU=ICA/CN=ica.hogesystems.com/emailAddress=ica-admin@hogesystems.com" > icacsr.pem
Generating a 2048 bit RSA private key
.........................................................+++
......................................................................................+++
writing new private key to 'icakey.pem'
Enter PEM pass phrase: cisco1234
Verifying - Enter PEM pass phrase: cisco1234
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl ca -config openssl.cfg -notext -extensions ica -md sha256 -keyfile rcakey.pem -cert rcacrt.pem -days 1825 -in icacsr.pem > icacrt.pem
Using configuration from openssl.cfg
Enter pass phrase for rcakey.pem: cisco123
Check that the request matches the signature
Signature ok
Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Oct 11 05:41:16 2017 GMT Not After : Oct 10 05:41:16 2022 GMT Subject: countryName = JP stateOrProvinceName = Tokyo organizationName = HogeSystems organizationalUnitName = ICA commonName = ica.hogesystems.com emailAddress = ica-admin@hogesystems.com X509v3 extensions: X509v3 Subject Key Identifier: 9F:34:27:66:FF:92:0B:68:A1:BF:60:51:57:49:B0:C5:28:A7:CC:49 X509v3 Authority Key Identifier: keyid:0E:23:BA:E3:35:2B:DF:85:9D:56:4B:4D:08:06:2A:BB:54:C9:BB:01 X509v3 Basic Constraints: CA:TRUE, pathlen:0 X509v3 Key Usage: Digital Signature, Certificate Sign, CRL Sign
Certificate is to be certified until Oct 10 05:41:16 2022 GMT (1825 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
hiyoko@hiyoko-PC ~/certlab/lab10$
"ica"はopenssl.cfg内で使用している名前です(Intermediate CA)
"cisco1234"は中間CAの秘密鍵で署名する再のpassphraseです。
ここまでで
hiyoko@hiyoko-PC ~/certlab/lab10$ ls
01.pem icacsr.pem index.txt.attr rcacrt.pem serial.old crlnumber icakey.pem index.txt.old rcakey.pem icacrt.pem index.txt openssl.cfg serial
hiyoko@hiyoko-PC ~/certlab/lab10$
のようなファイルが作成されています。
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl req -new -config openssl.cfg -sha256 -newkey rsa:2048 -keyout svr1key.pem -subj "/C=JP/ST=Tokyo/L=Roppongi/O=HogeSystems/OU=JTAC/CN=svr01.hogesystems.com/emailAddress=svr01-admin@hogesystems.com" -out svr1csr.pem
Generating a 2048 bit RSA private key
...............+++
.........................................................................+++
writing new private key to 'svr1key.pem'
Enter PEM pass phrase: cisco
Verifying - Enter PEM pass phrase: cisco
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl ca -config openssl.cfg -notext -extensions svr -md sha256 -keyfile icakey.pem -cert icacrt.pem -in svr1csr.pem -out svr1crt.pem -days 365
Using configuration from openssl.cfg
Enter pass phrase for icakey.pem: cisco1234
Check that the request matches the signature
Signature ok
Certificate Details: Serial Number: 2 (0x2) Validity Not Before: Oct 11 05:49:23 2017 GMT Not After : Oct 11 05:49:23 2018 GMT Subject: countryName = JP stateOrProvinceName = Tokyo organizationName = HogeSystems organizationalUnitName = JTAC commonName = svr01.hogesystems.com emailAddress = svr01-admin@hogesystems.com X509v3 extensions: X509v3 Extended Key Usage: TLS Web Server Authentication Netscape Comment: OpenSSL Generated Certificate X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: Digital Signature, Key Encipherment X509v3 Subject Key Identifier: B3:CD:2F:FE:00:3E:00:F5:9B:05:86:D0:F7:A0:05:D2:FF:2F:12:AE X509v3 Authority Key Identifier: keyid:9F:34:27:66:FF:92:0B:68:A1:BF:60:51:57:49:B0:C5:28:A7:CC:49 X509v3 CRL Distribution Points: Full Name: URI:http://www.hogesystems.com/revoke.crl Authority Information Access: OCSP - URI:http://ocsp.hogesystems.com X509v3 Subject Alternative Name: DNS:srv1.hogesystems.com, DNS:srv1.hogesystems.co.jp
Certificate is to be certified until Oct 11 05:49:23 2018 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
hiyoko@hiyoko-PC ~/certlab/lab10$
当社製品ではISE, ACS, ASA等にimportすることを想定したServer証明書になります。
X509v3 Extended Key UsageをTLS Web Server Authenticationとしています。
"svr"はopenssl.cfg内で使用している名前です。
"cisco"はこの証明書の秘密鍵のpassphraseです。
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl req -new -config openssl.cfg -sha256 -newkey rsa:2048 -keyout pc1key.pem -subj "/C=JP/ST=Tokyo/L=Roppongi/O=HogeSystems/OU=JTAC/CN=pc01.hogesystems.com/emailAddress=emp01@hogesystems.com" -out pc1csr.pem
Generating a 2048 bit RSA private key
......................................+++
..........................+++
writing new private key to 'pc1key.pem'
Enter PEM pass phrase: cisco
Verifying - Enter PEM pass phrase: cisco
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl ca -config openssl.cfg -notext -extensions usr -md sha256 -keyfile icakey.pem -cert icacrt.pem -in pc1csr.pem -out pc1crt.pem -days 365
Using configuration from openssl.cfg
Enter pass phrase for icakey.pem: cisco1234
Check that the request matches the signature
Signature ok
Certificate Details: Serial Number: 3 (0x3) Validity Not Before: Oct 11 06:03:30 2017 GMT Not After : Oct 11 06:03:30 2018 GMT Subject: countryName = JP stateOrProvinceName = Tokyo organizationName = HogeSystems organizationalUnitName = JTAC commonName = pc01.hogesystems.com emailAddress = emp01@hogesystems.com X509v3 extensions: X509v3 Extended Key Usage: TLS Web Client Authentication, E-mail Protection Netscape Comment: OpenSSL Generated Certificate X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: Digital Signature, Key Encipherment X509v3 Subject Key Identifier: 74:AC:2F:CB:E3:DC:E3:1B:02:B8:F7:FC:2A:F4:40:6C:BB:7F:8C:F3 X509v3 Authority Key Identifier: keyid:9F:34:27:66:FF:92:0B:68:A1:BF:60:51:57:49:B0:C5:28:A7:CC:49 X509v3 CRL Distribution Points: Full Name: URI:http://www.hogesystems.com/revoke.crl Authority Information Access: OCSP - URI:http://ocsp.hogesystems.com
Certificate is to be certified until Oct 11 06:03:30 2018 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
hiyoko@hiyoko-PC ~/certlab/lab10$
802.1xのsupplicantや当社のAnyConnectにimportすることを想定したClient証明書になります。
X509v3 Extended Key UsageをTLS Web Client Authenticationとしています。
"usr"はopenssl.cfg内で使用している名前です。
"cisco"はこの証明書の秘密鍵のpassphraseです。
もう一つpc2/emp02のクライアント証明書を作成しておきます。
ここまでで
hiyoko@hiyoko-PC ~/certlab/lab10$ ls
01.pem icacsr.pem openssl.cfg pc2key.pem svr1csr.pem 02.pem icakey.pem pc1crt.pem rcacrt.pem svr1key.pem 03.pem index.txt pc1csr.pem rcakey.pem 04.pem index.txt.attr pc1key.pem serial crlnumber index.txt.attr.old pc2crt.pem serial.old icacrt.pem index.txt.old pc2csr.pem svr1crt.pem
hiyoko@hiyoko-PC ~/certlab/lab10$
のようなファイルが作成されています。
pc1のクライアント証明書だけrevokeしておきます。
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl ca -config openssl.cfg -cert rcacrt.pem -keyfile rcakey.pem -revoke pc1crt.pem
Using configuration from openssl.cfg
Enter pass phrase for rcakey.pem: cisco123
Revoking Certificate 03.
Data Base Updated
ここまで触れていなかったindex.txtをみてみると
hiyoko@hiyoko-PC ~/certlab/lab10$ cat index.txt
V 221010054116Z 01 unknown /C=JP/ST=Tokyo/O=HogeSystems/OU=ICA/CN=ica.hogesystems.com/emailAddress=ica-admin@hogesystems.com V 181011054923Z 02 unknown /C=JP/ST=Tokyo/O=HogeSystems/OU=JTAC/CN=svr01.hogesystems.com/emailAddress=svr01-admin@hogesystems.com R 181011060330Z 171011062912Z 03 unknown /C=JP/ST=Tokyo/O=HogeSystems/OU=JTAC/CN=pc01.hogesystems.com/emailAddress=emp01@hogesystems.com V 181011061448Z 04 unknown /C=JP/ST=Tokyo/O=HogeSystems/OU=JTAC/CN=pc02.hogesystems.com/emailAddress=emp02@hogesystems.com
pc01のみRとなっておりこれがrevokeを意味します。
先のコマンドではindex.txtを編集しただけなのでCRLを作成します。
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl ca -gencrl -config openssl.cfg -cert icacrt.pem -keyfile icakey.pem > icacrl.pem
Using configuration from openssl.cfg
Enter pass phrase for rcakey.pem: cisco123
これでicacrl.pemというCRLが作成されます。
hiyoko@hiyoko-PC ~/certlab/lab10$ ls
01.pem icacrt.pem index.txt.old pc2csr.pem serial.old 02.pem icacsr.pem openssl.cfg pc2key.pem svr1crt.pem 03.pem icakey.pem pc1crt.pem icacrl.pem svr1csr.pem 04.pem index.txt pc1csr.pem rcacrt.pem svr1key.pem crlnumber index.txt.attr pc1key.pem rcakey.pem crlnumber.old index.txt.attr.old pc2crt.pem serial
hiyoko@hiyoko-PC ~/certlab/lab10$
HTTP serverをこのdirectoryで起動しておくと、ISE/ACS/ASA等からCRLのdownloadができます。
ソフトウェアは何でも構いませんが、ここではpythonを使用しています。
pythonもopenssl同様cygwinでのinstallが可能でMAC/Linuxでは初めから使用可能です。
hiyoko@hiyoko-PC ~/certlab/lab10$ python -m SimpleHTTPServer 8080
Serving HTTP on 0.0.0.0 port 8080 ... 10.6.8.100 - - [10/Oct/2017 20:14:32] "GET /icacrl.pem HTTP/1.1" 200 - 10.6.8.100 - - [10/Oct/2017 20:14:32] "GET /icacrl.pem HTTP/1.1" 200 - (snip)
上記は10.6.8.100のAAA serverからのCRLのdownloadが成功していることを意味してます。
OpenSSLはocspのserver(responder)にもなります。
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl ocsp -ignore_err -index index.txt -CA rcacrt.pem -rsigner rcacrt.pem -rkey rcakey.pem -port 80
Enter pass phrase for rcakey.pem: Waiting for OCSP client connections...
で待ち受けるので別terminalやAAA serverからQueryを送信すれば
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl ocsp -issuer rcacrt.pem -nonce -CAfile rcacrt.pem -url http://localhost -serial 3
Response verify OK 3: revoked This Update: Oct 11 07:20:29 2017 GMT Revocation Time: Oct 11 06:29:12 2017 GMT
hiyoko@hiyoko-PC ~/certlab/lab10$ openssl ocsp -issuer rcacrt.pem -nonce -CAfile rcacrt.pem -url http://localhost -serial 4
Response verify OK 4: good This Update: Oct 11 07:20:32 2017 GMT
のようにCRL通りのresponseを返します(先にRevokeをした証明書のSerialNoは3です)。
作成した証明書の適用例を簡単に記載します(例はACS5.8です)。
rcacrt.pem/icacrt.pemは
Users and Identity Stores > Certificate Authorities でAddします。
CRLのURLも設定されています。
svr1crt.pemは
System Administration > Configuration > Local Server Certificates > Local Certificates
でAddします。
OCSP設定は
Network Resources > OCSP Services でCreateします。
CRLの設定の代わりにOCSPのCheckを有効にすることで動作します。
クライアントへは(ここではWindows)
MMCから証明書のsnap-inを開きクライアント証明書(pkcs12)、(中間)CA証明書をインポートします。
検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう
シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします
下記より関連するコンテンツにアクセスできます