https、SSL証明書はベリサイン等のサーバー屋さんから買うのが普通なのですが、自分で証明書を作ることも可能です。
自分で作った証明書は、
通称オレオレ証明書と呼ばれ、
世間的には信頼がありませんが、運用としてクライアント認証して使うとかなら、何ら問題はありません。
ちなみに、無料の証明書 Let's Encryptを使った証明書の使用例は以下にまとめました。
目次
ルートCAの作成
CentOS 6でオレオレ証明書を作る手順は以下の通りです。まずルートCAを作成します。
以下はwideCAという名称を使った例です。
1 2 3 4 5 |
# cd /etc/pki # mkdir wideCA # cp tls/misc/CA wideCA/ # cp tls/openssl.cnf wideCA/ # echo 01 > wideCA/crlnumber |
/etc/pki/wideCA/CAを修正します。
1 2 3 4 5 |
# diff CA CA.orig 63d62 < SSLEAY_CONFIG="-config /etc/pki/wideCA/openssl.cnf" 72d70 < CATOP=/etc/pki/wideCA |
/etc/pki/wideCA/opensslを修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# diff openssl.cnf openssl.cnf.orig 42c42 < dir = /etc/pki/wideCA # Where everything is kept --- > dir = /etc/pki/CA # Where everything is kept 130c130 < countryName_default = JP --- > countryName_default = XX 135c135 < stateOrProvinceName_default = Hyogo --- > #stateOrProvinceName_default = Default Province 138c138 < localityName_default = Kobe --- > localityName_default = Default City 141c141 < 0.organizationName_default = AAA Co.,Ltd. --- > 0.organizationName_default = Default Company Ltd 191,192d190 < keyUsage = digitalSignature, keyEncipherment < extendedKeyUsage = serverAuth 195c193 < #nsComment = "OpenSSL Generated Certificate" --- > nsComment = "OpenSSL Generated Certificate" 249c247 < keyUsage = cRLSign, keyCertSign --- > # keyUsage = cRLSign, keyCertSign |
秘密鍵を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# ./CA -newca CA certificate filename (or enter to create) Making CA certificate ... Generating a 2048 bit RSA private key .........+++ ......+++ writing new private key to '/etc/pki/wideCA/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) [JP]: State or Province Name (full name) [Hyogo]: Locality Name (eg, city) [Kobe]: Organization Name (eg, company) [AAA Co.,Ltd.]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:wideCA Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/pki/wideCA/openssl.cnf Enter pass phrase for /etc/pki/wideCA/private/./cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 9988389725175282937 (0x8a9de388c73bfcf9) Validity Not Before: Jun 9 04:11:18 2015 GMT Not After : Jun 8 04:11:18 2018 GMT Subject: countryName = JP stateOrProvinceName = Hyogo organizationName = AAA Co.,Ltd. commonName = wideCA X509v3 extensions: X509v3 Subject Key Identifier: 23:75:52:6A:EC:85:FB:FF:06:27:DF:81:66:BA:74:F7:A5:CC:86:1A X509v3 Authority Key Identifier: keyid:23:75:52:6A:EC:85:FB:FF:06:27:DF:81:66:BA:74:F7:A5:CC:86:1A X509v3 Basic Constraints: CA:TRUE X509v3 Key Usage: Certificate Sign, CRL Sign Certificate is to be certified until Jun 8 04:11:18 2018 GMT (1095 days) Write out database with 1 new entries Data Base Updated |
ルートCAファイル
説明 | ファイル名 |
CA証明書 | cacert.pem, newcerts/8A9DE388C73BFCF9.pem |
CA秘密鍵 | private/cakey.pem |
CA証明書発行要求 | certs/00.pem |
サーバー証明書の作成
次にサーバー証明書を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# ./CA -newreq Generating a 2048 bit RSA private key ....................................................................................................+++ .........+++ writing new private key to 'newkey.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) [JP]: State or Province Name (full name) [Hyogo]: Locality Name (eg, city) [Kobe]: Organization Name (eg, company) [AAA Co.,Ltd.]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:aaa.bbb.ccc Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Request is in newreq.pem, private key is in newkey.pem |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# ./CA -sign Using configuration from /etc/pki/wideCA/openssl.cnf Enter pass phrase for /etc/pki/wideCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 9988389725175282940 (0x8a9de388c73bfcfc) Validity Not Before: Jun 9 10:00:52 2015 GMT Not After : Jun 8 10:00:52 2016 GMT Subject: countryName = JP stateOrProvinceName = Hyogo localityName = Kobe organizationName = AAA Co.,Ltd. commonName = aaa.bbb.ccc X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Subject Key Identifier: 33:68:B1:90:02:E4:5B:DF:5F:CD:C2:99:69:F0:E8:F4:4D:98:F1:B0 X509v3 Authority Key Identifier: keyid:23:75:52:6A:EC:85:FB:FF:06:27:DF:81:66:BA:74:F7:A5:CC:86:1A Certificate is to be certified until Jun 8 10:00:52 2016 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 Certificate: Data: Version: 3 (0x2) Serial Number: 9988389725175282940 (0x8a9de388c73bfcfc) Signature Algorithm: sha256WithRSAEncryption Issuer: C=JP, ST=Hyogo, O=AAA Co.,Ltd., CN=wideCA Validity Not Before: Jun 9 10:00:52 2015 GMT Not After : Jun 8 10:00:52 2016 GMT Subject: C=JP, ST=Hyogo, L=Kobe, O=AAA Co.,Ltd., CN=aaa.bbb.ccc Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:d2:4d:ad:1b:7a:7f:90:1e:72:90:39:42:da:60: 37:48:2d:58:36:a2:b9:6d:f8:74:36:45:ad:ba:52: 67:91:d7:97:f2:0a:31:b3:2a:5a:d4:25:9e:4a:36: 10:10:36:3f:c8:e5:17:a9:5c:7d:17:ee:33:82:f3: 58:a8:00:4d:d2:eb:17:cc:94:ca:11:a2:3b:3a:f7: 53:37:96:39:f9:f9:9d:b9:a9:64:00:ce:92:7d:7e: 68:2b:bf:41:2c:bf:d3:25:9a:d4:00:28:17:95:36: 53:4a:ff:a7:23:62:a0:75:a2:c7:6d:2a:ce:7d:bc: 13:9a:24:8b:b7:38:77:1b:17:c0:93:5a:b9:9d:e0: ad:99:d3:d1:8d:60:ed:0c:07:88:b4:39:cd:bb:5c: ac:d7:d4:4a:ee:29:0a:0c:e9:e1:b4:66:6b:6a:9a: 3e:90:6f:21:d9:b6:25:0a:69:a0:49:c1:e9:6d:56: 5f:59:d6:bf:3b:48:d2:86:af:ce:32:65:9d:99:c1: ab:fb:d1:84:61:41:f7:61:bd:38:85:5e:4d:fd:96: 35:df:a2:b3:3a:5f:f2:9f:7c:73:13:b4:4f:02:23: dd:04:68:72:d8:ba:e0:b1:73:f7:c5:ff:b0:c8:78: c1:88:d0:0c:06:c3:9a:e3:2d:42:82:82:70:d9:99: e5:bf Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Subject Key Identifier: 33:68:B1:90:02:E4:5B:DF:5F:CD:C2:99:69:F0:E8:F4:4D:98:F1:B0 X509v3 Authority Key Identifier: keyid:23:75:52:6A:EC:85:FB:FF:06:27:DF:81:66:BA:74:F7:A5:CC:86:1A Signature Algorithm: sha256WithRSAEncryption 48:d0:4e:56:f1:09:cf:8a:c1:72:97:0b:b1:db:49:ec:5c:b9: f5:74:86:2f:0a:4c:00:75:a9:c0:37:72:a9:5c:04:09:ab:96: 9c:cd:ae:ff:f1:ad:66:80:7d:e1:cc:04:39:fe:15:b4:b2:db: 70:fa:de:25:82:5f:8a:13:a7:6b:4a:67:6c:12:2d:56:62:be: 5c:a8:2d:f0:5d:a4:41:a9:85:1a:20:30:24:5a:e5:ad:60:f5: f2:6a:cb:80:2f:6b:1d:e2:f9:40:8d:c2:ef:8b:0b:81:ed:41: 1f:4f:c1:fd:6a:03:34:16:0f:12:83:45:db:72:0a:1e:54:e8: 53:ef:58:57:d0:c5:4b:f9:35:58:ac:0f:47:16:23:ab:79:a1: e0:9a:35:43:32:37:5e:1a:46:22:f0:37:48:41:5a:f4:fe:79: 85:52:b7:56:d7:86:e8:f9:a3:1d:cb:8a:72:60:55:ba:96:c2: df:b8:c7:08:19:78:90:4f:58:d1:fa:fb:84:b3:23:f7:34:8e: 74:3a:b7:bb:2d:7a:57:34:46:49:de:bd:74:8b:16:e9:0b:af: 29:38:d2:d6:96:d1:42:ca:c1:58:45:f6:02:8d:58:58:73:fd: 89:3c:2e:f1:a9:f8:26:4d:6f:18:4e:6b:05:cb:14:a2:d9:c4: f7:d5:81:b5 -----BEGIN CERTIFICATE----- MIIDqjCCApKgAwIBAgIJAIqd44jHO/z8MA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV BAYTAkpQMQ4wDAYDVQQIDAVIeW9nbzEiMCAGA1UECgwZV2lkZXNvZnQgRGVzaWdu ZSBDby4sTHRkLjEPMA0GA1UEAwwGd2lkZUNBMB4XDTE1MDYwOTEwMDA1MloXDTE2 MDYwODEwMDA1MlowZjELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBUh5b2dvMQ0wCwYD VQQHDARLb2JlMSIwIAYDVQQKDBlXaWRlc29mdCBEZXNpZ25lIENvLixMdGQuMRQw EgYDVQQDDAthYWEuYmJiLmNjYzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBANJNrRt6f5AecpA5QtpgN0gtWDaiuW34dDZFrbpSZ5HXl/IKMbMqWtQlnko2 EBA2P8jlF6lcfRfuM4LzWKgATdLrF8yUyhGiOzr3UzeWOfn5nbmpZADOkn1+aCu/ QSy/0yWa1AAoF5U2U0r/pyNioHWix20qzn28E5oki7c4dxsXwJNauZ3grZnT0Y1g 7QwHiLQ5zbtcrNfUSu4pCgzp4bRma2qaPpBvIdm2JQppoEnB6W1WX1nWvztI0oav zjJlnZnBq/vRhGFB92G9OIVeTf2WNd+iszpf8p98cxO0TwIj3QRocti64LFz98X/ sMh4wYjQDAbDmuMtQoKCcNmZ5b8CAwEAAaNvMG0wCQYDVR0TBAIwADALBgNVHQ8E BAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0OBBYEFDNosZAC5FvfX83C mWnw6PRNmPGwMB8GA1UdIwQYMBaAFCN1Umrshfv/BiffgWa6dPelzIYaMA0GCSqG SIb3DQEBCwUAA4IBAQBI0E5W8QnPisFylwux20nsXLn1dIYvCkwAdanAN3KpXAQJ q5acza7/8a1mgH3hzAQ5/hW0sttw+t4lgl+KE6drSmdsEi1WYr5cqC3wXaRBqYUa IDAkWuWtYPXyasuAL2sd4vlAjcLviwuB7UEfT8H9agM0Fg8Sg0XbcgoeVOhT71hX 0MVL+TVYrA9HFiOreaHgmjVDMjdeGkYi8DdIQVr0/nmFUrdW14bo+aMdy4pyYFW6 lsLfuMcIGXiQT1jR+vuEsyP3NI50Ore7LXpXNEZJ3r10ixbpC68pONLWltFCysFY RfYCjVhYc/2JPC7xqfgmTW8YTmsFyxSi2cT31YG1 -----END CERTIFICATE----- Signed certificate is in newcert.pem |
1 2 3 4 |
# openssl x509 -in newcerts/8A9DE388C73BFCFC.pem -out www.crt # openssl rsa -in newkey.pem -out www.key Enter pass phrase for newkey.pem: writing RSA key |
以上でaaa.bbb.cccのサーバー証明書が作成されました。
mod_ssl ディレクティブ | ファイル |
SSLCertificateFile | www.crt |
SSLCertificateKeyFile | www.key |
failed to update database TXT_DB error number2 発生時の対処
何か途中で作成の失敗があって、再度作成しようとしたら以下のエラーが出ました。
1 2 |
failed to update database TXT_DB error number 2 |
このエラーが出たときは、index.txtを開いて作成しようとして失敗した証明書の行を削除します。
Apache2.4での設定
あらかじめ、mod_sslをインストールしておきます。
1 |
# yum install mod_ssl |
次に、
/etc/httpd/conf.d/ssl.conf
を開き、
SSLCertificateFile
と
SSLCertificateKeyFile
について作成したファイルを指定します。
この後、Apacheをreloadします。
1 |
# service httpd reload |
以上でApacheの設定が完了しました。
ブラウザからアクセスして見るとChromeでは以下のエラーが表示されます。
この接続ではプライバシーが保護されません
攻撃者が、aaa.bbb.ccc 上のあなたの情報(パスワード、メッセージ、クレジット カード情報など)を不正に取得しようとしている可能性があります。
NET::ERR_CERT_AUTHORITY_INVALID
セキュリティで保護されたページに戻る詳細情報を表示しない
このサーバーが aaa.bbb.ccc であることを確認できませんでした。このサーバーのセキュリティ証明書は、ご使用のパソコンのオペレーティング システムによって信頼されているものではありません。原因としては、不適切な設定や、悪意のあるユーザーによる接続妨害が考えられます。
aaa.bbb.ccc にアクセスする(安全ではありません)
オレオレ証明書はブラウザからは認められていないことが分かります。
ブラウザのhttpsのあたりをクリックします。
「証明書情報」を押します。
以下の証明書の情報が表示されます。
まとめ
サーバーの世界では、証明書についてベリサイン等のサーバー屋さんから買えば信頼出来るっていう考えが成り立っています。
私はベリサインの実態もよくわかっていない中で奇妙な世界だと思っていました。
ベリサインが証明書の安全性のために特別な活動をしているのでしょうか?
あるいは、いわば既得権益なんでしょうか?
奇妙に感じつつもこの世界では、これが信なので多くのユーザーがログインする仕組みを提供するにはSSLの証明書を買うしか方法はないようです。
ちなみにSSLの証明書は安いやつで問題ありません。
この種は安いから性能が低いとか安いから信頼性が低いとかないので安いものをお薦めします。
↓ココのSSL証明書は日本語で申し込める中ではかなり安くていいと思います。
さくらのVPSサーバー
↓月額685円からの低価格&高パフォーマンスのVPS、さくらのVPSはコチラ
SSDプランが月々685円から使える!さくらのVPS
コメント
[…] […]