ラック
Home > ブログ > 記事 > 2017年9月 > Apacheの仮想サイトにSSLを追加する際に色々嵌った

Apacheの仮想サイトにSSLを追加する際に色々嵌った

カテゴリ: サーバ

やりたかったこと

Webminで複数の仮想サイトを建てているApacheサーバで、ある仮想サイトにSSL通信させようとしていました。

証明書の作成

# make testcert.key
umask 77 ; \
        /usr/bin/openssl genrsa -aes128 2048 > testcert.key
Generating RSA private key, 2048 bit long modulus
..............................................................................+++
..........+++
e is 65537 (0x10001)
Enter pass phrase: 
Verifying - Enter pass phrase: 
# make testcert.csr
umask 77 ; \
        /usr/bin/openssl req -utf8 -new -key testcert.key -out testcert.csr
Enter pass phrase for testcert.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) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Bunkyo
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:testcert.example.com
Email Address []:test@testcert.example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
# openssl x509 -in testcert.csr -out testcert.crt -req -signkey testcert.key -days 3650
Signature ok
subject=/C=JP/ST=Tokyo/L=Bunkyo/O=/OU=/CN=testcert.example.com/emailAddress=test@testcert.example.com
Getting Private key
Enter pass phrase for testcert.key: 
#

イメージとしてはこんな感じで公開鍵と秘密鍵を作成(作成の際の入力パラメータは実際のものと変えています)。

嵌った・その1

仮想サーバ追加して起動しようとするとエラーになる。なぜだ。

→仕切り直して再度Webminで仮想サイト作成

  • アドレス: xxx.xxx.xxx.xxx
  • ポート: 443
  • サーバ名: testcert.example.com
  • ディレクティブ:
    Options +Indexes
    AllowOverride All

    追加

  • SSL
    • 証明書/プライベートキーファイル: /etc/pki/tls/certs/testcert.crt
    • プライベートキーファイル: /etc/pki/tls/certs/testcert.key
    • Certificate authorities file: デフォルト(=なし)
    • クライアントSSL証明書: 不要

これでApacheを再起動。今度は起動はしたものの、Vivaldiで

ERR_SSL_PROTOCOL_ERROR

Firefoxで

SSL received a record that exceeded the maximum permissible length. エラーコード: SSL_ERROR_RX_RECORD_TOO_LONG

のエラーが出て接続できない状態に。今回の環境を再確認すると、mod_sslが入っていないことに気付いたのでインストール。

# yum install mod_ssl

## 略

#vi /etc/httpd/httpd.conf

LoadModule ssl_module modules/mod_ssl.so #追加

#

流石にmod_sslないとかダメでしょう。

嵌った・その2

ということでApacheを再び再起動。

Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server testcert.example.com:443 (RSA)
Enter pass phrase:Apache:mod_ssl:Error: Private key not found.
**Stopped
[失敗]

あ、パスフレーズ求められるヤツ……。ということで、慌てず騒がずパスフレーズなしの鍵を作りましょう。

# cd /etc/pki/tls/certs/
# openssl rsa -in testcert.key -out testcert.key
Enter pass phrase for testcert.key: 
writing RSA key
#

これで良いはず。Apacheを起動。

……OK、起動しました。

嵌った・その3

SSLできるように色々httpd.confを弄っていたら、仮想サイトがデフォルトしか見れなくなってしまったのでどうにかすることに……。

BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
NameVirtualHost xxx.xxx.xxx.xxx

途中にあるNameVirtualHostを削除するとデフォルトだけになってしまう模様。というかIPの記述が消えてデフォルトだけになっていた感じ……?

どうやらhttps通信のときは、httpd.confの先頭に書かれたVirtualHostの設定もポイントらしい。
ということで、デフォルト用のSSLも作ります。さらに、httpとhttpsの2つのVirtualHostを作ります。

#NameVirtualHost *:80
#NameVirtualHost *:443
## これらはコメントに

# 略

NameVirtualHost xxx.xxx.xxx.xxx:80
NameVirtualHost xxx.xxx.xxx.xxx:443
## IP
NameVirtualHost www.example.com:80
NameVirtualHost www.example.com:443
## デフォルトの仮想サイトの設定
NameVirtualHost testcert.example.com:80
NameVirtualHost testcert.example.com:443
## 今回使いたかった仮想サイトの設定

### 追加

色々他の要因もありましたが、最終的にはどうやらVirtualHostの設定が良くなかったようです。
NameVirtualHostのワイルドカードを無効にして、きちんと見せたいホスト名を追加して再起動したら見られるようになりました。

参考

途中でApache起動時に遭遇したエラーについてメモ

VirtualHost ホスト名:ポート番号 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
[warn] VirtualHost xxx.xxx.xxx.xxx:yy overlaps with VirtualHost xxx.xxx.xxx.xxx:yy, the first has precedence, perhaps you need a NameVirtualHost directive

タグ: サーバ環境・構築,トラブル対処

 



関連する記事一覧