&tag(Apache/オレオレ証明書でSSL); *目次 [#ida449c4] #contents *関連ページ [#x4933a65] *参考情報 [#vbeae3fd] *概要 [#j5830f85] -ちゃんとしたSSL対応Webサーバーを設置する場合、普通、有料サービスを使う必要がある(無料のもあるけど)。 -ただしイントラネットなどで、経路を暗号化するためだけに、自前で証明書を作成し利用することもできる。証明書の種類がたくさんあるので最初に整理すると次のようになる。[[オレオレ証明書をopensslで作る(詳細版) - ろば電子が詰まっている:http://d.hatena.ne.jp/ozuma/20130511/1368284304]]より。 ,ファイル名,機能 ,server.key,秘密鍵 (Private Key) ,server.csr,証明書署名要求 (CSR) ,server.crt,サーバ証明書(CRT) -サーバー側で秘密鍵を作成し、認証局(CA)に証明書要求をわたし、返却されたサーバー証明書を、Webサーバーで使用する。 -認証局は、その秘密鍵が本当に、その通信相手のものかを証明するために必要。 -この認証局を自分でやってしまうのがオレオレ認証となる。 -ただしこのままだとブラウザに警告が表示される、ルート証明書をクライアントのブラウザに入れると警告は表示されなくなる。ただしこれには弊害が指摘されている。 --[[高木浩光@自宅の日記 - オレオレ警告の無視が危険なこれだけの理由:http://takagi-hiromitsu.jp/diary/20071125.html]] --[[高木浩光@自宅の日記 - PKIよくある勘違い(2)「安全に配布すればルート証明書を入れさせてよい」, PKIよくある勘違い(3)「プライベート認証局が妥当なら..:http://takagi-hiromitsu.jp/diary/20050205.html]] -ながながと書かれているが、用はプライベートで運営している認証局のセキュリティ保全ができず、認証局の秘密鍵が流出した場合、そのプライベートなルート証明書をインストールしたクライアントのセキュリティが危険にさらされるということらしい。 -ということで、テスト目的ならば、警告表示状態でオレオレ証明書サーバーを使ってもらうのが妥当かも。 *具体的手順 [#cbc2f760] -[[opensslでRSA暗号と遊ぶ - ろば電子が詰まっている:http://d.hatena.ne.jp/ozuma/20130510/1368114329]]と[[Apache/SSL自己証明書の作成とmod sslの設定 - maruko2 Note.:http://www.maruko2.com/mw/Apache/SSL%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8mod_ssl%E3%81%AE%E8%A8%AD%E5%AE%9A]]がわかりやすい。 **秘密鍵(server.key)の作成 [#l289a2ae] -適当なディレクトリで以下のコマンドを実行。 # openssl genrsa 2048 > server.key -2048は2048バイトの鍵作成オプション。パスフレーズは適当に。-aes128オプションを追加すると秘密鍵が暗号化されるが、Apache起動時にパスフレーズが必要となるので現実的ではない。 **証明書署名要求(server.csr)の作成 [#xa3a9219] -以下のコマンドで実行する。 openssl req -new -key server.key > server.csr -途中のドメイン情報で、Common Nameだけはサーバーのドメインとピッタリ一致させとかないといけない。 #pre{{ Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]:Kanda,Chiyoda-ku Organization Name (eg, company) [Default Company Ltd]:Akihabara Inc. Organizational Unit Name (eg, section) []:Akihabara Development Division Common Name (eg, your name or your server's hostname) []:akihabara.development.com Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: }} **サーバー証明書(server.crt)の作成 [#r6e9edae] -この秘密鍵はサーバー秘密鍵と別のほうが良い?とりあえず同じでもいいらしい。 openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt **Apacheの設定 [#s9dae7c8] -server.crtと、server.keyを、/etc/httpd/conf/keys以下にコピーしておく。 -CentOSの場合、ssl.confで設定する。全体のアクセス制限が、ssl.confのアクセス制限より優先されるらしいので注意。 #pre{{ DocumentRoot "/home/swww" SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateFile /etc/httpd/conf/keys/server.crt SSLCertificateKeyFile /etc/httpd/conf/keys/server.key }} **確認 [#p1efb9df] -apacheを再起動しhttpsでアクセスして確認。 *SSLクライアント認証 [#v1cca895] *SSLクライアント認証簡易版 [#v1cca895] -証明書がインストールしてあるクライアントだけ接続可能にすることもできる。 -[[Apacheでクライアント認証してみる · mechamogera/MyTips Wiki · GitHub:https://github.com/mechamogera/MyTips/wiki/Apache%E3%81%A7%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E8%AA%8D%E8%A8%BC%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B]]より。 **クライアント用秘密鍵の作成(client.key) [#r2b921b8] -以下のコマンドで生成。 openssl genrsa -out client.key 1024 **クライアント用証明書要求の生成(client.csr) [#a8387500] -以下のコマンドで生成。 openssl req -new -key client.key -out client.csr -sha1 **クライアント用証明書の生成 [#j79af35b] -以下のコマンドで生成。 openssl x509 -in client.pem -out client.crt -req -signkey client.key -days 365 -sha1 **p12ファイルの生成。 [#b453a6bf] -以下のコマンドで生成。 openssl pkcs12 -export -inkey server.key -in server.crt -out server.p12 **Apacheの設定の変更 [#id624bfb] -SSLCACertificateFileを指定する。 SSLCACertificateFile /cert/client.crt -サーバーを再起動して、server.p12ファイルあればアクセスできることを確認。