Tomcatサーバーと顧客のファイアウォールの間に相互認証を確立しようとしています。
私たちが持っているサーバー証明書はDigicert(ルートCA)とRapidSSL(中間)からのものです。
ServerHello
ブロックの証明書チェーンはQuoVadisからのものです。
しかし、ServerHelloDone
行の前に、Cert Authorities
は空です:
*** CertificateRequest
Cert Types: RSA, DSS, ECDSA
Supported Signature Algorithms: SHA256withRSA, SHA256withDSA, SHA256withECDSA, SHA384withRSA, Unknown (hash:0x5, signature:0x2), SHA384withECDSA, SHA512withRSA, Unknown (hash:0x6, signature:0x2), SHA512withECDSA, SHA1withRSA, SHA1withDSA, SHA1withECDSA
Cert Authorities:
<Empty>
ajp-line-1, READ: TLSv1.2 Handshake, length = 4
*** ServerHelloDone
Warning: no suitable certificate found - continuing without client authentication
*** Certificate chain
<Empty>
私はここのドキュメントを読みます- https://docs.Oracle.com/javase/7/docs/technotes/guides/security/jsse/ReadDebug.html
RapidSSL/DigicertがCert Authorities
クライアント認証を続行するためのブロック?
クライアントとサーバーの認証で同じCAを使用する必要はありませんが、しかしどのCAかをサーバーに通知する必要がありますクライアントを認証するために信頼する必要があります、これはここでの問題のようです。
どうして?多くの人が自分のCAを作成し、自分のクライアントに直接証明書を発行します。これにより、顧客は、面倒なことがある認定を通過する手間を省くことができます。この情報は、TLSハンドシェイク中に クライアントに渡される でもあります。
もう1つのオプションは、パブリックCAから証明書を取得するようにクライアントに指示することです。あなたの会社はこれを行ったようであり、どのCAから購入するかをクライアントに明確に指示していません。私があなたの説明を正しく解釈した場合、このクライアントは、QuoVadisを選んで認定を受けました。 QuoVadisを信頼してサーバーを「十分な」目的で認証する場合は、クライアント認証でQuoVadisを信頼するようにサーバーを構成します。 Apacheの場合 :
SSLCACertificateFile /etc/ssl/certs/name-of-quovadis-certificate.crt
おそらく、あなたが知って信頼しているすべてのCAを連結します(RapidSSLとDigicert、私が収集します)。ショートカットを使用して、既知のすべてのCAを信頼することもできます。 Debian/Ubuntuの場合:
SSLCACertificateFile /etc/ssl/certs/ca-certificates.crt
注意が必要:多くのCAはドメインの所有権を自動的に検証するだけです( Let's Encrypt はこれを無料で行います)。簡単に言うと、次のように言いましょう。無料のドメイン自動検証では不十分な場合は、 Cloudflareを調べてください または商用CAを忘れて、自分のクライアントに手動で証明書を発行します。
代わりにクライアントの場合は、質問を入れ替えて、相手が信頼するCAを尋ねて、RapidSSLまたはDigiCertをリストに追加し、リストが送信されていることを確認します。