opensslコマンド
作成 : 2003/02/16
修正 : 2003/10/13
修正 : 2011/05/22
デフォルトで使用されるランダム情報ファイルやポリシー、CA の秘密鍵ファイルや証明書ファイルは、openssl.cnf で定義される。 openssl.cnf は、/usr/local/ssl ディレクトリ(デフォルト)に置かれる。
CA の開設
CA を開設するには、/usr/local/ssl/misc/CA.sh を使用する。 ./demoCA ディレクトリに、cacert.pem(CA 証明書)や private/cakey.pem(CA 秘密鍵)が作成される。 CA.sh から /usr/local/ssl/bin/openssl を実行しているので、パスを通しておくこと。
# misc/CA.sh -newca CA certificate filename (or enter to create) (Enter) Making CA certificate ... Generating a 1024 bit RSA private key ................++++++ ......................++++++ writing new private key to './demoCA/private/./cakey.pem' Enter PEM pass phrase: パスフレーズ Verifying - Enter PEM pass phrase: パスフレーズ ----- 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) [AU]: JP State or Province Name (full name) [Some-State]: Tokyo Locality Name (eg, city) []: Chuo-ku Organization Name (eg, company) [Internet Widgits Pty Ltd]: TEST Organizational Unit Name (eg, section) []: Labo Common Name (eg, YOUR name) []: Admin Email Address []: root@localhost
RSA秘密鍵の作成
秘密鍵を作成するには、openssl genrsa を使用する。 例では、DES3 で暗号化された 1024 ビット(デフォルトは 512 ビット)の RSA 秘密鍵 server.key を作成している。 秘密鍵は、他の人がアクセスできない場所に保存しておくこと!
# openssl genrsa -des3 -out server.key 1024 Generating RSA private key, 1024 bit long modulus .................++++++ ...................................................++++++ e is 65537 (0x10001) Enter pass phrase for server.key: パスフレーズ Verifying - Enter pass phrase for server.key: パスフレーズ
server.key の中身を見てみる。
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,BB9E603E3C4A94FC Dxg1wRjJHiUwZN5F1RCSbC/76g0LCWAZRJ7yjA2vsxSAaXQ8Frn2I8cAG4di5dvV EMlAtH7f6OCa6NMNvaTtESIidahrK09RpP1qs/iSi3BkGNHtQ8ITMhg1YdRO+fUX KmSS6Bz3hn9xqpM3N3L9ngGHs01LeXQSCeid2SidlqLBn88ytHs/jqc1rdKjblHq KyCb5Jk6QfLDjeHYptZwwEI/JqNxu5uzyCLLlWvgSW33poQu3dspOmFa0KIQAhLf L69nSP09z1fZLKNBvXw6En8cZzPYa4lJU6toseiUaCg1VZ9+GVpbsjww5In7s74e LlmOF/DfXxXQlzI5FWCDwgqEf79uUKA4IlG/wOUH3jtsVb5WIGZaoA4R+srWtuDx 5yNzoUKrtb88oLRE/G5NJjvWvHZKJj+hZFKoeanhqrkl2UTys82a4w7TxbS9Izir tnBubo9Cv1bUkq3BlN7EemAmBbXer1ZyDHcvKeMScl+/f+6ieeeSZe7UAuBINWIA 9q7ipwHmHDbYFgy/64Ka37JRjxkONJAS0K0/I93U/4fI0WwAP+750j8GWjuW+oFZ skCu2jyuwHpEvSNT/FhCp0BZnBmi5dQ/+45ViBcA50E1eEPAM2LyZe5ad+gopE2S F7EexE70zvUADAAzSCActPYo6kJiNrZ0bK7FwgZXa/pU3qCaqtSOWjeLqxkbcWC4 NF1NUz8uLUqPAv6DEyHBp4cMubdP15mizf8neCNwwKuJ9Nq25WJBkHZXpwK5fT67 CZTF3lkZqiHSYpgbu0yt0ZtkArwsjjLYPGpgO5fiQ6s= -----END RSA PRIVATE KEY-----
RSA秘密鍵のテキスト表示
秘密鍵をテキスト形式で表示するには、openssl rsa -text を使用する。
# openssl rsa -in server.key -text Enter pass phrase for server.key: パスフレーズ Private-Key: (1024 bit) modulus: 00:bc:a2:fe:70:44:e1:50:71:9c:a1:c3:43:34:be: f5:32:82:ee:e8:35:6a:87:e0:b8:75:34:fc:24:15: 9f:95:48:5c:d5:10:13:94:fc:7f:03:3b:43:e7:70: a2:93:d2:3f:5c:df:c9:27:4e:ef:13:73:7d:fa:d5: 22:e5:d5:39:89:7d:cb:3d:8b:70:d2:ce:69:5e:57: af:14:05:3b:75:48:ea:f5:e2:1e:c1:ce:38:c7:70: b8:2b:cc:76:47:2d:42:b9:50:0c:e4:9d:15:17:e8: 95:9a:2a:8d:d9:6a:e5:db:f7:98:6a:7e:22:f2:ff: d4:2d:f8:52:a4:ed:02:e9:a3 publicExponent: 65537 (0x10001) privateExponent: 4a:7d:b3:2c:72:86:e7:55:76:1d:0b:16:c7:05:81: 9e:68:c6:1f:3c:b8:cc:df:98:f7:ef:ec:81:f3:68: 09:73:81:f5:41:5b:fa:41:9b:86:93:28:c5:84:5d: 2f:32:9f:82:f5:7c:61:e1:71:d7:a4:8b:e3:39:b7: 86:3b:25:74:d0:41:69:73:7c:4e:e3:ac:65:cc:7c: 00:99:08:92:32:a1:56:92:60:15:b6:2d:3c:d8:27: 81:e9:52:24:57:69:60:8f:b2:17:b2:9c:10:55:03: dd:6a:bf:bf:c7:1c:84:a5:3e:76:82:5b:80:2a:6c: 4e:b2:b8:8e:7e:81:41:c1 prime1: 00:e7:d4:b6:21:9a:fe:9f:f6:f2:c5:e4:33:38:20: bc:4c:3e:a4:fe:c8:eb:8a:cc:d8:79:9e:f8:8a:fe: 4c:cc:43:8d:07:75:fd:6a:c9:40:b9:62:34:ab:01: 58:39:aa:86:a0:e1:5d:e6:04:d7:65:8e:30:35:78: e2:4f:5b:b1:0f prime2: 00:d0:4d:7b:19:60:af:b3:5c:3f:7b:9d:f5:67:cc: fb:08:59:9b:ca:a8:9c:5a:a8:71:02:4a:e0:50:8b: 12:94:23:e4:42:b5:0f:31:26:b2:88:d1:8f:ed:92: e3:b9:da:c0:8c:6a:a5:b6:16:f5:f4:85:86:6f:9b: c9:31:7a:96:2d exponent1: 15:0f:cc:24:2d:72:a8:91:c4:e8:99:9c:d5:a2:93: b8:d1:90:27:dd:95:18:9d:17:a5:a4:fd:ab:93:02: e3:23:d7:f2:2f:94:00:59:9c:59:bb:44:51:ac:e3: 99:09:97:05:92:b3:f7:2b:c5:6d:e2:87:1a:b4:8a: ca:ee:e7:9d exponent2: 01:aa:5c:ed:9b:04:4c:9e:d4:33:1c:d4:35:7c:42: 15:93:01:d7:e0:f9:3f:10:51:b6:fe:fa:44:2a:98: 7f:6e:ba:08:7e:82:1c:96:7e:9e:f1:6e:01:2c:47: 7d:d8:ed:e9:31:81:19:af:9d:4f:d3:31:7b:fa:f6: e4:da:62:11 coefficient: 0e:f0:4e:c6:36:0e:f8:ce:a3:12:1d:f3:43:77:f2: f1:42:04:bf:31:d0:5e:46:65:f8:bd:e9:b1:dd:dd: 3f:ba:f6:05:ad:ea:40:be:da:e4:3f:56:38:86:fe: 7a:41:fe:6b:10:77:c8:84:14:00:d8:77:42:60:24: 48:34:c6:1f
RSA秘密鍵のパスフレーズ削除
Apache で ssl を使用する場合、起動時に秘密鍵のパスフレーズを聞いてくるので、途中で止まってしまう。 例では、秘密鍵 server.key を復号化して、パスフレーズを入力しなくても秘密鍵を使用できるようにしている。
# openssl rsa -in server.key -out server.key Enter pass phrase for server.key: パスフレーズ writing RSA key
パスフレーズを削除した後の server.key の中身を見てみる。
-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQC8ov5wROFQcZyhw0M0vvUygu7oNWqH4Lh1NPwkFZ+VSFzVEBOU /H8DO0PncKKT0j9c38knTu8Tc3361SLl1TmJfcs9i3DSzmleV68UBTt1SOr14h7B zjjHcLgrzHZHLUK5UAzknRUX6JWaKo3ZauXb95hqfiLy/9Qt+FKk7QLpowIDAQAB AoGASn2zLHKG51V2HQsWxwWBnmjGHzy4zN+Y9+/sgfNoCXOB9UFb+kGbhpMoxYRd LzKfgvV8YeFx16SL4zm3hjsldNBBaXN8TuOsZcx8AJkIkjKhVpJgFbYtPNgngelS JFdpYI+yF7KcEFUD3Wq/v8cchKU+doJbgCpsTrK4jn6BQcECQQDn1LYhmv6f9vLF 5DM4ILxMPqT+yOuKzNh5nviK/kzMQ40Hdf1qyUC5YjSrAVg5qoag4V3mBNdljjA1 eOJPW7EPAkEA0E17GWCvs1w/e531Z8z7CFmbyqicWqhxAkrgUIsSlCPkQrUPMSay iNGP7ZLjudrAjGqlthb19IWGb5vJMXqWLQJAFQ/MJC1yqJHE6Jmc1aKTuNGQJ92V GJ0XpaT9q5MC4yPX8i+UAFmcWbtEUazjmQmXBZKz9yvFbeKHGrSKyu7nnQJAAapc 7ZsETJ7UMxzUNXxCFZMB1+D5PxBRtv76RCqYf266CH6CHJZ+nvFuASxHfdjt6TGB Ga+dT9Mxe/r25NpiEQJADvBOxjYO+M6jEh3zQ3fy8UIEvzHQXkZl+L3psd3dP7r2 Ba3qQL7a5D9WOIb+ekH+axB3yIQUANh3QmAkSDTGHw== -----END RSA PRIVATE KEY-----
X.509証明書要求(CSR:Certification Signing Request )の作成
証明書は、証明書要求を CA に送り、それに CA が署名をつけることで作成される。 証明書要求を作成するには、openssl req を使用する。 例では、秘密鍵 server.key を使用して、証明書要求 server.csr を作成している。 デフォルトでは、openssl.cnf でCA 秘密鍵ファイルやポリシーを定義する。
注意! デフォルトの openssl.cnf のポリシーでは、証明書要求と CA の Country Name、State or Province Name、Organization Name が同じでないとエラーになってしまう。
注意! Apache ssl のサーバ証明書要求を作成する場合は、Common Name を httpd.conf(または ssl.conf)の ServerName と同じにしておくこと。
# openssl req -new -key server.key -out server.csr Enter pass phrase for server.key: パスフレーズ 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) [AU]: JP State or Province Name (full name) [Some-State]: Tokyo Locality Name (eg, city) []: Chuo-ku Organization Name (eg, company) [Internet Widgits Pty Ltd]: TEST Organizational Unit Name (eg, section) []: Server Common Name (eg, YOUR name) []: Admin Email Address []: admin@localhost Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: (Enter) An optional company name []: (Enter)
server.csr の中身を見てみる。
-----BEGIN CERTIFICATE REQUEST----- MIIBvzCCASgCAQAwfzELMAkGA1UEBhMCSlAxDjAMBgNVBAgTBVRva3lvMRAwDgYD VQQHEwdDaHVvLWt1MQ0wCwYDVQQKEwRURVNUMQ8wDQYDVQQLEwZTZXJ2ZXIxDjAM BgNVBAMTBUFkbWluMR4wHAYJKoZIhvcNAQkBFg9hZG1pbkBsb2NhbGhvc3QwgZ8w DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALyi/nBE4VBxnKHDQzS+9TKC7ug1aofg uHU0/CQVn5VIXNUQE5T8fwM7Q+dwopPSP1zfySdO7xNzffrVIuXVOYl9yz2LcNLO aV5XrxQFO3VI6vXiHsHOOMdwuCvMdkctQrlQDOSdFRfolZoqjdlq5dv3mGp+IvL/ 1C34UqTtAumjAgMBAAGgADANBgkqhkiG9w0BAQQFAAOBgQB+twvKkoxS4Ybw5gKd kcwFjOsK0l6Ad/AE3DYeCzOXXBI1spnkrXFPsoY71eDEMA2xSY4A6vw4zuxWIjt+ L/CegCDohmre2oUqNpaq5ZKIAoyoD+WClBOIdmCWwwBURpxx6WHPGdqCI+fRfpjA W7Xo9/HH6QYyywTuinOvL2BLPw== -----END CERTIFICATE REQUEST-----
X.509証明書要求のテキスト表示
証明書要求をテキスト形式で表示するには、openssl req -text を使用する。 Signature は、データのハッシュ値をサーバの秘密鍵で暗号化している。 証明書要求を受け取った CA は、サーバの公開鍵(データの RSA Public Key)で復号化し、認証する。
# openssl req -in server.csr -text
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=JP, ST=Tokyo, L=Chuo-ku, O=TEST, OU=Server, CN=Admin/emailAddress=admin@localhost
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:bc:a2:fe:70:44:e1:50:71:9c:a1:c3:43:34:be:
f5:32:82:ee:e8:35:6a:87:e0:b8:75:34:fc:24:15:
9f:95:48:5c:d5:10:13:94:fc:7f:03:3b:43:e7:70:
a2:93:d2:3f:5c:df:c9:27:4e:ef:13:73:7d:fa:d5:
22:e5:d5:39:89:7d:cb:3d:8b:70:d2:ce:69:5e:57:
af:14:05:3b:75:48:ea:f5:e2:1e:c1:ce:38:c7:70:
b8:2b:cc:76:47:2d:42:b9:50:0c:e4:9d:15:17:e8:
95:9a:2a:8d:d9:6a:e5:db:f7:98:6a:7e:22:f2:ff:
d4:2d:f8:52:a4:ed:02:e9:a3
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: md5WithRSAEncryption
7e:b7:0b:ca:92:8c:52:e1:86:f0:e6:02:9d:91:cc:05:8c:eb:
0a:d2:5e:80:77:f0:04:dc:36:1e:0b:33:97:5c:12:35:b2:99:
e4:ad:71:4f:b2:86:3b:d5:e0:c4:30:0d:b1:49:8e:00:ea:fc:
38:ce:ec:56:22:3b:7e:2f:f0:9e:80:20:e8:86:6a:de:da:85:
2a:36:96:aa:e5:92:88:02:8c:a8:0f:e5:82:94:13:88:76:60:
96:c3:00:54:46:9c:71:e9:61:cf:19:da:82:23:e7:d1:7e:98:
c0:5b:b5:e8:f7:f1:c7:e9:06:32:cb:04:ee:8a:73:af:2f:60:
4b:3f
X.509証明書の作成
証明書は、証明書要求を CA に送り、それに CA が署名をつけることで作成される。 署名は、データのハッシュ値を CA の秘密鍵で暗号化したもの。 署名を CA の公開鍵(ディレクトリサービスなどで公開)で復号化できれば、身元を確認できたことになる。
証明書に署名するには、openssl ca を使用する。 例では、証明書要求 server.csr に署名して、証明書 server.crt を作成している。 デフォルトでは、openssl.cnf でCA 秘密鍵ファイルやポリシーを定義する。 -config で定義ファイルを指定できる。 証明書の有効期間は、openssl.cnfの"default_days"で指定した日数となる。
# openssl ca -in server.csr [-config configfile] -out server.crt Using configuration from /usr/local/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: CA パスフレーズ Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Feb 13 07:04:36 2003 GMT Not After : Feb 13 07:04:36 2004 GMT Subject: countryName = JP stateOrProvinceName = Tokyo organizationName = TEST organizationalUnitName = Server commonName = Admin emailAddress = admin@localhost X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 3E:CF:D0:A3:AE:16:AE:E2:2E:67:3F:CF:40:24:F2:41:16:81:62:1C X509v3 Authority Key Identifier: keyid:85:13:CE:55:94:F3:D6:C9:0A:E1:1F:60:25:E8:6F:40:0E:64:BE:78 DirName:/C=JP/ST=Tokyo/L=Chuo-ku/O=TEST/OU=Labo/CN=Admin/emailAddress=root@localhost serial:00 Certificate is to be certified until Feb 13 07:04:36 2004 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
server.crt の中身を見てみる。
Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=JP, ST=Tokyo, L=Chuo-ku, O=TEST, OU=Labo, CN=Admin/emailAddress=root@localhost Validity Not Before: Feb 13 07:04:36 2003 GMT Not After : Feb 13 07:04:36 2004 GMT Subject: C=JP, ST=Tokyo, O=TEST, OU=Server, CN=Admin/emailAddress=admin@localhost Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bc:a2:fe:70:44:e1:50:71:9c:a1:c3:43:34:be: f5:32:82:ee:e8:35:6a:87:e0:b8:75:34:fc:24:15: 9f:95:48:5c:d5:10:13:94:fc:7f:03:3b:43:e7:70: a2:93:d2:3f:5c:df:c9:27:4e:ef:13:73:7d:fa:d5: 22:e5:d5:39:89:7d:cb:3d:8b:70:d2:ce:69:5e:57: af:14:05:3b:75:48:ea:f5:e2:1e:c1:ce:38:c7:70: b8:2b:cc:76:47:2d:42:b9:50:0c:e4:9d:15:17:e8: 95:9a:2a:8d:d9:6a:e5:db:f7:98:6a:7e:22:f2:ff: d4:2d:f8:52:a4:ed:02:e9:a3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 3E:CF:D0:A3:AE:16:AE:E2:2E:67:3F:CF:40:24:F2:41:16:81:62:1C X509v3 Authority Key Identifier: keyid:85:13:CE:55:94:F3:D6:C9:0A:E1:1F:60:25:E8:6F:40:0E:64:BE:78 DirName:/C=JP/ST=Tokyo/L=Chuo-ku/O=TEST/OU=Labo/CN=Admin/emailAddress=root@localhost serial:00 Signature Algorithm: md5WithRSAEncryption bf:4b:b4:a3:a6:cf:c9:2d:19:d7:93:a1:73:31:3d:e8:ac:89: fb:16:01:1e:42:e6:0c:dc:d7:85:79:5d:ea:64:6f:77:28:8d: 68:f7:e0:33:82:bc:51:57:a9:f2:d0:91:57:8b:97:30:d8:6f: 22:3d:55:58:88:46:34:5e:fc:29:bb:20:84:44:ce:f8:84:fd: 0f:d1:fe:14:e3:e0:97:60:00:cd:d3:69:6c:ce:79:2a:e0:ec: e0:a8:dc:00:72:3e:7a:7e:d5:c7:64:9c:24:2c:1b:d4:ea:1b: 5d:ba:52:ac:fc:53:d0:e4:22:aa:33:57:43:96:fd:b8:4a:32: 8e:77 -----BEGIN CERTIFICATE----- MIIDZzCCAtCgAwIBAgIBATANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJKUDEO MAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxDTALBgNVBAoTBFRFU1Qx DTALBgNVBAsTBExhYm8xDjAMBgNVBAMTBUFkbWluMR0wGwYJKoZIhvcNAQkBFg5y b290QGxvY2FsaG9zdDAeFw0wMzAyMTMwNzA0MzZaFw0wNDAyMTMwNzA0MzZaMG0x CzAJBgNVBAYTAkpQMQ4wDAYDVQQIEwVUb2t5bzENMAsGA1UEChMEVEVTVDEPMA0G A1UECxMGU2VydmVyMQ4wDAYDVQQDEwVBZG1pbjEeMBwGCSqGSIb3DQEJARYPYWRt aW5AbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8ov5wROFQ cZyhw0M0vvUygu7oNWqH4Lh1NPwkFZ+VSFzVEBOU/H8DO0PncKKT0j9c38knTu8T c3361SLl1TmJfcs9i3DSzmleV68UBTt1SOr14h7BzjjHcLgrzHZHLUK5UAzknRUX 6JWaKo3ZauXb95hqfiLy/9Qt+FKk7QLpowIDAQABo4IBBjCCAQIwCQYDVR0TBAIw ADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUw HQYDVR0OBBYEFD7P0KOuFq7iLmc/z0Ak8kEWgWIcMIGnBgNVHSMEgZ8wgZyAFIUT zlWU89bJCuEfYCXob0AOZL54oYGApH4wfDELMAkGA1UEBhMCSlAxDjAMBgNVBAgT BVRva3lvMRAwDgYDVQQHEwdDaHVvLWt1MQ0wCwYDVQQKEwRURVNUMQ0wCwYDVQQL EwRMYWJvMQ4wDAYDVQQDEwVBZG1pbjEdMBsGCSqGSIb3DQEJARYOcm9vdEBsb2Nh bGhvc3SCAQAwDQYJKoZIhvcNAQEEBQADgYEAv0u0o6bPyS0Z15OhczE96KyJ+xYB HkLmDNzXhXld6mRvdyiNaPfgM4K8UVep8tCRV4uXMNhvIj1VWIhGNF78KbsghETO +IT9D9H+FOPgl2AAzdNpbM55KuDs4KjcAHI+en7Vx2ScJCwb1OobXbpSrPxT0OQi qjNXQ5b9uEoyjnc= -----END CERTIFICATE-----
-out で指定したファイルのほかに、demoCA/newcerts/XX.pem が作成される。 また、demoCA/index.txt ファイルに発行した証明書の情報が書き込まれる。 demoCA/index.txt を見てみる。 最初の "V" は Valid (有効)であることを示し、次の "041011105657Z" は証明書の有効期限を示す。
V 041011105657Z 01 unknown /C=JP/ST=Tokyo/O=nina/OU=web/CN=www.nina.jp/emailAddress=webmaster@nina.jp
自己署名X.509証明書の作成
CA で署名してもらうのでなく、自分で署名をつけることもできる。 証明書に署名するには、openssl req を使用する。 例では、秘密鍵 server.key を元に 自己署名証明書 server.crt を作成している。
"-config"で定義ファイルを指定することができる。 "-days n"で、証明書の有効期間を指定する。
# openssl req -new -x509 -key server.key -out server.crt [-config configfile] [-days n] Enter pass phrase for server.key: パスフレーズ 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) [AU]: JP State or Province Name (full name) [Some-State]: Tokyo Locality Name (eg, city) []: Chuo-ku Organization Name (eg, company) [Internet Widgits Pty Ltd]: TEST Organizational Unit Name (eg, section) []: Server Common Name (eg, YOUR name) []: Admin Email Address []: admin@localhost
定義ファイルの例。
[ req ] default_bits = 2048 default_md = sha1 distinguished_name = req_distinguished_name x509_extensions = v3_ca # The extentions to add to the self signed cert # 対話形式にしない。 prompt = no # Passwords for private keys if not present they will be prompted for # 対話形式にしない場合、秘密鍵のパスフレーズをここで指定。 # すでに秘密鍵がある場合は、input_passwordでパスフレーズを指定 input_password = secret # 自己署名証明書と一緒に秘密鍵を作成する場合は、output_passwordでパスフレーズを指定。 output_password = secret [ req_distinguished_name ] # Country Name (2 letter code) #C = # State or Province Name (full name) #ST = # Locality Name (eg, city) #L = # Organization Name (eg, company) #O = # Organizational Unit Name (eg, section) OU = host # Common Name (eg, your name or your server\'s hostname) # サーバ証明書やクライアント証明書ではホストのFQDNを指定。 CN = host.example.com # Email Address emailAddress = mail@example.com [ v3_ca ] # Extensions for a typical CA # PKIX recommendation. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer # This is what PKIX recommends but some broken software chokes on critical # extensions. #basicConstraints = critical,CA:true # So we do this instead. basicConstraints = CA:true # Key usage: this is typical for a CA certificate. However since it will # prevent it being used as an test self-signed certificate it is best # left out by default. # keyUsage = cRLSign, keyCertSign # Some might want this also # nsCertType = sslCA, emailCA # Include email address in subject alt name: another PKIX recommendation # subjectAltName=email:copy # Copy issuer details # issuerAltName=issuer:copy
server.crt の中身を見てみる。
-----BEGIN CERTIFICATE----- MIIDUzCCArygAwIBAgIBADANBgkqhkiG9w0BAQQFADB/MQswCQYDVQQGEwJKUDEO MAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxDTALBgNVBAoTBFRFU1Qx DzANBgNVBAsTBlNlcnZlcjEOMAwGA1UEAxMFQWRtaW4xHjAcBgkqhkiG9w0BCQEW D2FkbWluQGxvY2FsaG9zdDAeFw0wMzAyMTMwNzQyNTdaFw0wMzAzMTUwNzQyNTda MH8xCzAJBgNVBAYTAkpQMQ4wDAYDVQQIEwVUb2t5bzEQMA4GA1UEBxMHQ2h1by1r dTENMAsGA1UEChMEVEVTVDEPMA0GA1UECxMGU2VydmVyMQ4wDAYDVQQDEwVBZG1p bjEeMBwGCSqGSIb3DQEJARYPYWRtaW5AbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQDaArtyUslDG3uKNCObcOKiRioNuxibmp47A9LsRRSQuclS uR6SmJMPXoGqUqorXPL/vPuVbVz1H63Z3T9w548prdARwFjOI6vRwx75vxyHoNRz 3osHouR+fsx+3gnWjCXY+EnzXMFOUlmJYZcGcEmjGtgcdwzAHlDfn7tFnWer4wID AQABo4HeMIHbMB0GA1UdDgQWBBSnx6rM3mqdwB1aPafVNcrNHOI7ADCBqwYDVR0j BIGjMIGggBSnx6rM3mqdwB1aPafVNcrNHOI7AKGBhKSBgTB/MQswCQYDVQQGEwJK UDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxDTALBgNVBAoTBFRF U1QxDzANBgNVBAsTBlNlcnZlcjEOMAwGA1UEAxMFQWRtaW4xHjAcBgkqhkiG9w0B CQEWD2FkbWluQGxvY2FsaG9zdIIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB BAUAA4GBACXjxcA8hOR5O3+uijac+P+65UqvT6SVFa8+FEQ5DlU9GwJRKk8jbCuu pmTkJLxD9aq7KdlnC3c+D+Gq6y0EJMQ+BiRkIDCwsEWIOM4MhWe0FTu9iANFU7gT L/h6k2ZtayjxGvyE1HCKadtPG8P68BWkY5P4g/yU5QgkoaPn2INv -----END CERTIFICATE-----
RSA秘密鍵と自己署名X.509証明書の作成
秘密鍵と自己署名証明書をまとめて作成することができる。 例では、秘密鍵 server.key と自己署名証明書 server.crt を作成している。
"-config"で定義ファイルを指定することができる。 定義ファイルの例は、X.509自己署名証明書の作成を参照。 "-days n"で、証明書の有効期間を指定する。
# openssl req -newkey rsa -x509 -out server.crt -keyout server.key [-config configfile] [-days n] Generating a 1024 bit RSA private key .........++++++ ..++++++ writing new private key to 'server.key' Enter PEM pass phrase: パスフレーズ Verifying - Enter PEM pass phrase: パスフレーズ ----- 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) [AU]: JP State or Province Name (full name) [Some-State]: Tokyo Locality Name (eg, city) []: Chuo-ku Organization Name (eg, company) [Internet Widgits Pty Ltd]: TEST Organizational Unit Name (eg, section) []: Server Common Name (eg, YOUR name) []: Admin Email Address []: admin@localhost
暗号化しない(使用時にパスフレーズの入力を必要としない)秘密鍵を作成することもできる。
# openssl req -new -x509 -nodes -out server.crt -keyout server.key
X.509証明書のテキスト表示
証明書をテキスト形式で表示するには、openssl x509 -text を使用する。
# openssl x509 -in server.crt -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=JP, ST=Tokyo, L=Chuo-ku, O=TEST, OU=Server, CN=Admin/emailAddress=admin@localhost
Validity
Not Before: Feb 13 07:42:57 2003 GMT
Not After : Mar 15 07:42:57 2003 GMT
Subject: C=JP, ST=Tokyo, L=Chuo-ku, O=TEST, OU=Server, CN=Admin/emailAddress=admin@localhost
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:da:02:bb:72:52:c9:43:1b:7b:8a:34:23:9b:70:
e2:a2:46:2a:0d:bb:18:9b:9a:9e:3b:03:d2:ec:45:
14:90:b9:c9:52:b9:1e:92:98:93:0f:5e:81:aa:52:
aa:2b:5c:f2:ff:bc:fb:95:6d:5c:f5:1f:ad:d9:dd:
3f:70:e7:8f:29:ad:d0:11:c0:58:ce:23:ab:d1:c3:
1e:f9:bf:1c:87:a0:d4:73:de:8b:07:a2:e4:7e:7e:
cc:7e:de:09:d6:8c:25:d8:f8:49:f3:5c:c1:4e:52:
59:89:61:97:06:70:49:a3:1a:d8:1c:77:0c:c0:1e:
50:df:9f:bb:45:9d:67:ab:e3
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
A7:C7:AA:CC:DE:6A:9D:C0:1D:5A:3D:A7:D5:35:CA:CD:1C:E2:3B:00
X509v3 Authority Key Identifier:
keyid:A7:C7:AA:CC:DE:6A:9D:C0:1D:5A:3D:A7:D5:35:CA:CD:1C:E2:3B:00
DirName:/C=JP/ST=Tokyo/L=Chuo-ku/O=TEST/OU=Server/CN=Admin/emailAddress=admin@localhost
serial:00
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: md5WithRSAEncryption
25:e3:c5:c0:3c:84:e4:79:3b:7f:ae:8a:36:9c:f8:ff:ba:e5:
4a:af:4f:a4:95:15:af:3e:14:44:39:0e:55:3d:1b:02:51:2a:
4f:23:6c:2b:ae:a6:64:e4:24:bc:43:f5:aa:bb:29:d9:67:0b:
77:3e:0f:e1:aa:eb:2d:04:24:c4:3e:06:24:64:20:30:b0:b0:
45:88:38:ce:0c:85:67:b4:15:3b:bd:88:03:45:53:b8:13:2f:
f8:7a:93:66:6d:6b:28:f1:1a:fc:84:d4:70:8a:69:db:4f:1b:
c3:fa:f0:15:a4:63:93:f8:83:fc:94:e5:08:24:a1:a3:e7:d8:
83:6f
証明書の検証
証明書を検証には、openssl verify を使用する。 例では、CA 証明書 demoCA/cacert.pem で 証明書 server.crt を検証している。
# openssl verify -CAfile demoCA/cacert.pem server.crt
server.crt: OK
証明書を PEM 形式から DER 形式へ変換
証明書の形式を PEM(テキスト)からDER(バイナリ)に変換するには、次のようにする。
# openssl x509 -inform PEM -outform DER -in server.crt -out server.der
秘密鍵と証明書を PKCS#12 形式へ変換
秘密鍵と証明書をまとめて PKCS#12 形式への変換には、openssl pkcs12 を使用する。 ブラウザにクライアント証明書(と秘密鍵)をインストールするときに使用。 例では、秘密鍵 client.key と 証明書 client.crt をまとめて、PKCS#12 形式ファイル client.p12 を作成している。
# openssl pkcs12 -export -inkey private/client.key -in client.crt -out client.p12 Enter pass phrase for private/client.key: ユーザ秘密鍵パスフレーズ Enter Export Password: PKCS12形式ファイルのパスワード Verifying - Enter Export Password: PKCS12形式ファイルのパスワード(再入力)
秘密鍵と証明書のほかに、CA証明書等を一緒にまとめることも可能。
# openssl pkcs12 -export -inkey private/client.key -in client.crt -certfile cacert.crt -out client.p12 Enter pass phrase for private/client.key: ユーザ秘密鍵パスフレーズ Enter Export Password: PKCS12形式ファイルのパスワード Verifying - Enter Export Password: PKCS12形式ファイルのパスワード(再入力)
PKCS#12 形式をPEM形式へ変換
PKCS#12 形式からPEM形式への変換には、openssl pkcs12 を使用する。 例では、PKCS#12 形式ファイル client.p12 を変換してPEM形式ファイル client.pem を作成している。 client.pemには秘密鍵、証明書すべてが出力される。
# openssl pkcs12 -in client.p12 -out client.pem Enter Import Password: PKCS12形式ファイルのパスワード MAC verified OK Enter PEM pass phrase: ユーザ秘密鍵パスフレーズ Verifying - Enter PEM pass phrase: ユーザ秘密鍵パスフレーズ(再入力)
秘密鍵だけ取り出す。
# openssl pkcs12 -nocerts -in client.p12 -out client.key
証明書だけ取り出す。
# openssl pkcs12 -nokeys -in client.p12 -out client.pem
CA証明書を除いたユーザ証明書と秘密鍵だけ取り出す。
# openssl pkcs12 -clcerts -in client.p12 -out client.pem
証明書の失効
証明書を紛失したり、不正に使用された可能性がある場合には、その証明を破棄(失効)させて使用できないようにする。 -revoke で失効させる証明書ファイルを指定する。 例では、demoCA/newcerts/01.pem を失効している。
# openssl ca [-config configfile] -gencrl -revoke demoCA/newcerts/01.pem Using configuration from /usr/share/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: CA パスフレーズ -----BEGIN X509 CRL----- MIIBRzCBsTANBgkqhkiG9w0BAQQFADCBgTELMAkGA1UEBhMCSlAxETAPBgNVBAgT CFlva29oYW1hMRQwEgYDVQQHEwtLYW5hZ2F3YS1rdTENMAsGA1UEChMEbmluYTEL MAkGA1UECxMCQ0ExEDAOBgNVBAMTB25pbmEgQ0ExGzAZBgkqhkiG9w0BCQEWDHJv b3RAbmluYS5qcBcNMDMxMDEyMTEyMjIyWhcNMDMxMTExMTEyMjIyWjANBgkqhkiG 9w0BAQQFAAOBgQA3HmHCIdha344oOhU+GclQ1TUkl/OpbPWLVRh9lg4Cxi+jOGZD rAo1r54MHCyihK+OSmGBZWZBChJCOOoErNsci5oTw1QtyAm+23qEXwMPNsf+Oeab 6vC6Hun04gSatwHDgmzyrxdVIhLskpsq9zJnyyZ2uRp3pp76u9e2ItVwvg== -----END X509 CRL----- Revoking Certificate 01. Data Base Updated
demoCA/index.txt ファイルに失効した証明書の情報が書き込まれる。 demoCA/index.txt を見てみる。 最初の "R" は Revoke (失効)であることを示す。 次の "041011105657Z" は証明書の有効期限を示し、3 つめの "031012112222Z" は失効した時間を示す。
R 041011105657Z 031012112222Z 01 unknown /C=JP/ST=Tokyo/O=nina/OU=web/CN=www.nina.jp/emailAddress=webmaster@nina.jp
証明書失効リスト(CSR:Certificate Revocation List)の作成
証明書を失効しただけでは、証明書を使用するアプリケーションは失効した証明書を知ることができない。 アプリケーションに失効した証明書の情報を教えるために、証明書失効リストを作成しなければならない。 例では、nina.crl という証明書失効リストファイルを作成している。
# openssl ca [-config configfile] -gencrl -out nina.crl Using configuration from /usr/share/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: CA パスフレーズ
nina.crl の中身を見てみる。
-----BEGIN X509 CRL----- MIIBXTCBxzANBgkqhkiG9w0BAQQFADCBgTELMAkGA1UEBhMCSlAxETAPBgNVBAgT CFlva29oYW1hMRQwEgYDVQQHEwtLYW5hZ2F3YS1rdTENMAsGA1UEChMEbmluYTEL MAkGA1UECxMCQ0ExEDAOBgNVBAMTB25pbmEgQ0ExGzAZBgkqhkiG9w0BCQEWDHJv b3RAbmluYS5qcBcNMDMxMDEyMTEyMzU0WhcNMDMxMTExMTEyMzU0WjAUMBICAQEX DTAzMTAxMjExMjIyMlowDQYJKoZIhvcNAQEEBQADgYEADmMS8rksjL3Em/hgZBs6 xKMB4Yv8TioTKOlBtaDLp+hFaEzvzGenMNeKFwjkBN5nXyJDMu3thvuBtoWiB9Tr 3mVRXl/JSpRf9uwyO1vsp7UyVZCwf4er6tzEi26dSPA1TIDaRq32I65YrfLFcUus 7ZOFKBrKBEMPQwYFqVeEz50= -----END X509 CRL-----
証明書失効リストのテキスト表示
証明書失効リストをテキスト形式で表示する。 次の例では、証明書失効リストファイル nina.crl をテキスト形式で表示している。
# openssl crl -in nina.crl -text
Certificate Revocation List (CRL):
Version 1 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: /C=JP/ST=Yokohama/L=Kanagawa-ku/O=nina/OU=CA/CN=nina CA/emailAdd
ress=root@nina.jp
Last Update: Oct 12 11:41:00 2003 GMT
Next Update: Nov 11 11:41:00 2003 GMT
Revoked Certificates:
Serial Number: 01
Revocation Date: Oct 12 11:22:22 2003 GMT
Serial Number: 02
Revocation Date: Oct 12 11:38:51 2003 GMT
Signature Algorithm: md5WithRSAEncryption
13:7e:45:f0:18:78:34:fb:4c:f8:c4:d0:8c:83:a1:7e:bb:d4:
7c:29:70:e6:b3:41:d6:35:34:a0:6d:17:8b:b6:c1:f2:ac:cc:
c9:04:06:b4:5d:07:00:6f:e8:cd:94:32:06:41:05:5d:b9:90:
28:19:1b:89:3f:7b:a8:92:13:90:83:e0:7e:92:54:47:7e:c3:
ef:08:f8:eb:b4:6d:08:62:23:fe:f0:14:03:92:42:75:35:5c:
49:14:74:7e:87:28:54:c5:f0:5b:cc:39:a8:b4:e5:8b:df:b4:
b2:a5:9b:4f:12:85:78:96:22:63:51:61:83:7d:f4:42:33:cc:
12:7e
-----BEGIN X509 CRL-----
MIIBcTCB2zANBgkqhkiG9w0BAQQFADCBgTELMAkGA1UEBhMCSlAxETAPBgNVBAgT
CFlva29oYW1hMRQwEgYDVQQHEwtLYW5hZ2F3YS1rdTENMAsGA1UEChMEbmluYTEL
MAkGA1UECxMCQ0ExEDAOBgNVBAMTB25pbmEgQ0ExGzAZBgkqhkiG9w0BCQEWDHJv
b3RAbmluYS5qcBcNMDMxMDEyMTE0MTAwWhcNMDMxMTExMTE0MTAwWjAoMBICAQEX
DTAzMTAxMjExMjIyMlowEgIBAhcNMDMxMDEyMTEzODUxWjANBgkqhkiG9w0BAQQF
AAOBgQATfkXwGHg0+0z4xNCMg6F+u9R8KXDms0HWNTSgbReLtsHyrMzJBAa0XQcA
b+jNlDIGQQVduZAoGRuJP3uokhOQg+B+klRHfsPvCPjrtG0IYiP+8BQDkkJ1NVxJ
FHR+hyhUxfBbzDmotOWL37SypZtPEoV4liJjUWGDffRCM8wSfg==
-----END X509 CRL-----