キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
6893
閲覧回数
5
いいね!
0
コメント
hiryokoy
Cisco Employee
Cisco Employee

 

[はじめに]

- 目的

当社製品に限らず電子証明書を使った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作成

適当に専用の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から不要な箇所を削除・編集してます)をコピー

openssl.cfg
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上に多くあるので不明なものは
確認ください。

 

[CA証明書の作成]

- Root CA

自分で自分の署名をするので、

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です。
入力しても実際には表示されません。

 

- 中間CA

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$

のようなファイルが作成されています。

 

[非CA証明書(サーバ用/クライアント用)の作成]

- サーバ用証明書

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のクライアント証明書を作成しておきます。

 

[CRLの作成]

ここまでで

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$

- CRLの使用

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が成功していることを意味してます。

- OCSPの使用

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は

root_ca_certificate.gif
Users and Identity Stores > Certificate Authorities でAddします。
CRLのURLも設定されています。

 

svr1crt.pemは

server_certificate.gif
System Administration > Configuration > Local Server Certificates > Local Certificates
でAddします。

 

OCSP設定は
ocsp_responder.gif
Network Resources > OCSP Services でCreateします。
CRLの設定の代わりにOCSPのCheckを有効にすることで動作します。

 

クライアントへは(ここではWindows)
windows_mmc.gif
MMCから証明書のsnap-inを開きクライアント証明書(pkcs12)、(中間)CA証明書をインポートします。

 

[よく使いそうなコマンド]

  • 証明書と秘密鍵からpkcs12形式の証明書を作成
    Windowsでクライアント証明書をimportする際等に使用します。
    openssl pkcs12 -export -inkey pc1key.pem -in pc1crt.pem -out pc1.p12
  • PEM <-> DER変換
    PEM(-----BEGIN CERTIFICATE-----等で始まるtext形式)を扱えずDER(Binary形式)が必要な製品がありえます。
    openssl x509 -inform pem -outform der -in pc1crt.pem -out pc1crt.der
  • 証明書の閲覧
    openssl x509 -text -noout < pc1crt.pem
  • 証明書の検証
    rcacrt.pem->icacrt.pem->pc1crt.pemのチェーンが成立しているか確認する。
    openssl verify -CAfile <(cat rcacrt.pem icacrt.pem) pc1crt.pem
Getting Started

検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう

シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします