![Mac 上の Chrome ブラウザが Centos 上の Apache 2.4 に SSL/TLS 経由で安全に接続できない](https://rvso.com/image/1672340/Mac%20%E4%B8%8A%E3%81%AE%20Chrome%20%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%8C%20Centos%20%E4%B8%8A%E3%81%AE%20Apache%202.4%20%E3%81%AB%20SSL%2FTLS%20%E7%B5%8C%E7%94%B1%E3%81%A7%E5%AE%89%E5%85%A8%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84.png)
当社は、Leaf Web アプリケーションを実行する複数のサイトを運営しています。当社の構成は Centos 7.9、.NET Web API、Apache 2.4 で実行されています。
このシステムは、イントラネットにアクセスするスタッフのみが使用します。自己署名された機関のルート証明書、中間証明書、および中間証明書によって署名 (発行) されたサーバー証明書を使用します。openssl
チェーンを示します。
$ openssl s_client -connect leaf.ourdomain:443 -showcerts -CAfile path_to_root_cert/RootCert.cer 2> /dev/null | egrep "Certificate chain| s:| i:"
Certificate chain
0 s:/CN=leaf.ourdomain
i:/DC=org/DC=our_dc/CN=Our system CA
1 s:/DC=org/DC=our_dc/CN=Our system CA
i:/CN=Our System
私たちの機関の名前は分かりにくくしましたが、他の部分はすべてそのままにしています。
Chrome は Mac 上で実行されており、Mac のキーチェーン アクセス アプリでルート証明書を使用するように構成されています。これにより、Leaf の運用展開で安全でプライベートな接続が確立されます。
実稼働システムの VM クローンを構成しています。新しい秘密キーと、中間証明書によって署名されたサーバー証明書を作成しました。httpd.conf
新しいドメイン名に合わせて変更されました。サーバー証明書、秘密キー、中間証明書はサーバーに保存され、次の httpd 属性がそれらをポイントするようになりました。
SSLCertificateFile "/etc/pki/tls/certs/omop-leaf-temp_hpc_our_domain_ssl.cer"
SSLCertificateKeyFile "/etc/pki/tls/private/omop-leaf-temp_hpc_our_domain_ssl.key"
SSLCertificateChainFile "/etc/pki/tls/certs/Intermediate.cer"
サーバーのドメイン名は確認されているようです。難読化されているのは ですomop-leaf-temp.hpc.our_domain
。この名前は、1) httpsリクエストのURL、2) Chromeによって報告されるエラーメッセージ、3) の に使用さCN
れSSLCertificateFile
ます。これは、
$ openssl x509 -text -in ./omop-leaf-temp_xxxx.cer| grep CN= | grep omop
Subject: C=US, ST=xxx, L=xxx, O=Our System, OU=xxx, CN=-hpc.our_domain/emailAddress=leaf-support@xxx
しかし、本番システムへの安全な接続を確立する Chrome インスタンスは、VM クローンではその接続を確立できません。
「PEM エンコード チェーン」は 3 つの証明書を識別します。順番はSSLCertificateFile
、、、SSLCertificateChainFile
そして Chrome がキーチェーン アクセスを通じて取得する自己署名ルート証明書です (推測ですが)。これで問題ないと思います。
httpd
Chrome が接続を試行したときに、ログにエラー ( error_log
、、leaf_access_log
およびを含む) が報告されません。です。leaf_ssl_error_log
LogLevel
warn
困惑しています。CN が正しく、証明書チェーンが良好なのに、Chrome が報告するのはなぜでしょうかYour connection is not private
?NET::ERR_CERT_COMMON_NAME_INVALID
この問題をさらに調査して修正するにはどうすればよいでしょうか?
ありがとう
答え1
一般名が間違っているようです:
./omop-leaf-temp_xxxx.cer| grep CN= | grep omop 件名: C=US、ST=xxx、L=xxx、O=Our System、OU=xxx、CN= "
しかし、「-hpc.our_domain/emailAddress=leaf-support@x」は「omop-leaf-temp.hpc.our_domain」とはかなり異なります。
答え2
@dave_thompson_085 が指摘しているように、サーバーの証明書には、サーバーの名前を含む SubjectAlternativeName (SAN) 拡張子が必要です。
これにより、Chrome (バージョン 102.0.5005.115) と Safari (バージョン 15.0) の両方がサーバーとの安全な接続を確立できるようになります。
証明書は以下を使用して作成されました
openssl req \
-newkey rsa:4096 \
-nodes \
-keyout omop-leaf-temp_redacted.key \
-out omop-leaf-temp_redacted.csr \
-config csr_with_san.conf \
-days 730 \
-batch \
-verbose
この設定ファイルで
[ req ]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[ req_distinguished_name ]
countryName = US
stateOrProvinceName = New York
localityName = New York City
organizationName = redacted
organizationalUnitName = redacted
commonName = omop-leaf-temp.redacted
emailAddress = redacted
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = omop-leaf-temp.redacted
クライアントが安全な接続を確立したかどうかを評価するコードの開発者には、誤ったエラーではなく、証明書に SAN が必要であることを示す明確なエラーを提供するよう強く勧めますERR_CERT_COMMON_NAME_INVALID
。