CentOS7:SSL自己発行局の設置から俺々証明書の作成と承認まで
2018年6月30日Linux Tips, Security Tips, テクニカル, トピックス
この内容を書こうと思ったのは従来オレオレ証明書を作成するありがちな記事はプライベートキーとサーバ証明書を作る方法で終わっているケースが多い。残念ながら現代のブラウザーはもはやこれだけでは表示できない。(厳密には危険の警告が表示されてしまう)。何故こうなるか理由は元々ブラウザーには世界の著名なSSL証明書の発行局の証明書が内蔵されている。自分で作ったものは証明局の発行がないから不正と判断されてしまう。ならば簡単で自己発行局を作成し証明書をブラウザーへインポートすればよいのである。
ということで今回はCentOS7で時々作成する自己発行局の作成から発行手順までを解説する。できるだけ簡単に完結にまとめようと思います。
一般的にスクリプトを使って生成するやり方もあるのですが、応用が効くのは素の手順で行うこちらの方法なので参考にしてください。openssl.cnfのファイルは/etc/pki/openssl.cnfの位置にありこれは場所やファイル名を変更しないほうが良いです。そのままにしたほうが簡単。自己発行局はオリジナルで/etc/pkiの配下に適当なフォルダーを作成してそこで作業を行います。別の場所に作業場所を作った場合も/etc/pkiにソフトリンクを貼っておけば問題なく発行が行なえます。尚、Ubuntuでも同様の手順で可能か実験してみたところ、パッケージライブラリーが足りないとか、ディレクトリが足りないとか、ファイルがないとかエラー出ますがコピーして用意すれば同様に発行できることを確認しました。
SSL証明書自己発行局構築(自己発行局の場所:/etc/pki/myCA)
最終的にca.crtとca.keyが生成されています。発行局とサーバ証明書は対になっているためDNS.xで指定したサーバ証明書用のドメインが変わる度に再作成とブラウザへのインストールが必要です。発行局自体にDNSのスコープ(利用範囲)があることを理解してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# cd /etc/pki # mkdir myCA # cd tls # vi openssl.cnf <--- 中身の確認だけ。 # cd .. /etc/pki # cd myCA # echo "01" > serial # touch index.txt # echo "unique_subject = no" > index.txt.attr # mkdir private # openssl req -new -x509 -sha256 -days 36500 -newkey rsa:4096 -out ca.crt -keyout private/ca.key # openssl rsa -in private/ca.key -out private/ca.key |
/etc/pki/tls/openssl.cnfのサンプルダウンロード
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 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 |
[ CA_default ] dir = /etc/pki/myCA # Where everything is kept [ policy_match ] countryName = match stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ policy_anything ] countryName = JP stateOrProvinceName = TOKYO localityName = TOSHIMA-KU organizationName = FAKE COMPANY, LIMITED. organizationalUnitName = WEB SOLUTION commonName = fake.dummy-ca.net emailAddress = myname@yourhost.net [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = JP countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = TOKYO localityName = Locality Name (eg, city) localityName_default = TOSHIMA-KU 0.organizationName = Organization Name (eg, company) 0.organizationName_default = Default Company Ltd # we can do this but it is not needed normally :-) #1.organizationName = Second Organization Name (eg, company) #1.organizationName_default = World Wide Web Pty Ltd organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = WEB TEAM commonName = Common Name (eg, your name or your server\'s hostname) commonName_max = 64 emailAddress = username@yourhost.net emailAddress_max = 64 [ usr_cert ] # These extensions are added when 'ca' signs a request. # This goes against PKIX guidelines but some CAs do it and some software # requires this to avoid interpreting an end user certificate as a CA. basicConstraints=CA:TRUE subjectAltName=@alt_names [ v3_req ] # Extensions to add to a certificate request subjectAltName = @alt_names basicConstraints = CA:TRUE keyUsage = cRLSign, keyCertSign [ alt_names ] DNS.1 = fake.dummy-ca.com DNS.2 = shape-packet.com DNS.3 = sai.hayabusa.jp |
SSLサーバ証明書発行依頼(CSRファイルの作成)
1 2 3 4 |
# cd /etc/pki/myCA # mkdir newcerts # openssl req -new -sha256 -days 36500 -newkey rsa:4096 -out server.csr -keyout private/server.key # openssl rsa -in private/server.key -out private/server.key |
自己発行局へサーバ証明書の承認処理とSSLサーバ証明書の生成(server.crtの生成)
1 |
# openssl ca -days 36500 -keyfile private/ca.key -cert ca.crt -in server.csr -out server.crt |
あとはWEBサーバに証明書を設置するのとca.crtを自分の使っているパソコンのブラウザへ証明書をインポートしてください。これを実施しないとSSL証明書を入れても警告画面になりますので要注意です。
2019年の12月以降はSSL化に対する規制は厳しくなる予定なのでオレオレ証明書を作る場合はブラウザー拒否されないように、ここで生成した自己発行局証明書は必須となります。お客様に入れる場合はお客様のブラウザにインポートする必要があります。もっとも通常はユーザに使って頂く場合は有料の安い証明書でもいいとは思いますが。
- サーバ証明書 /etc/pki/myCA/server.crt
- サーバ秘密鍵 /etc/pki/myCA/private/server.key
- CAルート鍵 /etc/pki/myCA/ca.crt