Linux
Apache
SSL
mod_ssl
mod_nss

apacheでVirtualNameが一致しないと言われる

はじめに

apacheのエラーログ(/etc/httpd/logs/error_log)にこんなメッセージが出てました。

Misconfiguration of certificate's CN and virtual name. The certificate CN has localhost4.localdomain4. We expected <ip-address> as virtual name.

このエラー解決方法を調べました。

環境

Red Hat Enterprise Linux Server release 6.8 (Santiago)
Apache/2.2.15

調査結果

エラーメッセージ内にcertificate's CNと出ているので、ssl関連のエラーでしょう。
というあたりをつけて調べます。

apacheのssl通信用のモジュール

webで調べるとどうやらmod_sslとmod_nssというモジュールがあるようです。
実際に確認。

# httpd -M |grep -e 'nss' -e 'ssl'

httpd: Could not reliably determine the server's fully qualified domain name, using <ip-address> for ServerName
 dnssd_module (shared)
 nss_module (shared)
 ssl_module (shared)
Syntax OK

ありました。

エラー出しているのはどっち?

この記事を参考にmod_nssの方を調べたらビンゴ。

Certificate:
    Data:
        Subject: "CN=localhost4.localdomain4,O=example.com,C=US"

CNにlocalhost4.localdomain4の記載がありました。

念のためにmod_sslの方も確認

まず証明書ファイルの場所を確認。

# cat /etc/httpd/conf.d/ssl.conf | grep -e 'SSLCertificateFile'

SSLCertificateFile /etc/pki/tls/certs/localhost.crt

証明書の内容を確認

# openssl x509 -text -noout -in /etc/pki/tls/certs/localhost.crt

Certificate:
    Signature Algorithm: sha256WithRSAEncryption
        Subject: C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=localhost.localdomain/emailAddress=root@localhost.localdomain

こっちじゃないことを確認。

修正方法

mod_nssの方のエラーということがわかりました。
この修正の方法は検索すれば出てくるので割愛。
mod_nssの方のモジュールをアンインストールするなり、mod_nssの証明書のCNを書き換えて証明書ストアに保存するなりすればエラーが出なくなります。