8

SSL の問題に 1 か月以上悩まされています。

openssl を使用して、独自の CA、サーバー、およびクライアント証明書を生成しました。また、Apache Web サーバーで「SSLrequire」を有効にしました (htaccess では、これは間違っている可能性があります)。つまり、サーバーで https 経由で接続しようとする人は、有効な証明書を提示する必要があります。

手順は次のとおりです。

  • CA キーを生成する
  • CA CSR を生成する
  • CA キーで CA CSR に署名する

そのため、サーバーとクライアントの証明書に署名するために使用される独自の CA があります。

次のステップ

  • サーバーキーを生成する
  • サーバー CSR を生成する
  • CA キーでサーバー CSR に署名する

これで、サーバー証明書とサーバー秘密鍵がサーバーに正常にインストールされました

次は

  • クライアントキーを生成する
  • クライアント CSR を生成する
  • CA キーでクライアント CSR に署名する

次に、クライアント証明書を CA 証明書と共にユーザーに配布します。どちらもブラウザにインストールされていました。

接続しようとすると、「証明書を発行した CA をピアが認識せず、信頼していません。」というエラーが表示されました。

自己署名 CA 証明書がサーバーにインストールされていないという問題を特定しました。通常、サーバーは信頼できる CA のリストをデバイスに接続しようとして提示し、デバイスはサーバーが提示したいずれかの CA によって署名された証明書を送信する必要があります。しかし、自己署名 CA 証明書がサーバーにインストールされていなかったため、ブラウザーはサーバーが受け入れる証明書を提示できました。

そこで、サーバー - コントロール パネル Hsphere に CA 証明書をインストールしました。

CA 証明書の内容を取得し、サーバーの「認証局ファイル」テキスト領域にコピーしましたが、サーバーは「SSL 構成の更新に失敗しました。キーと証明書が異なります」と不平を言うたびにそれを受け入れませんでした。

CA証明書はそれ自体で署名されているため、サーバーは証明書とキーが異なるとどのように言うことができますか.

また、CA 証明書ファイルと CA キー ファイルの両方の内容を「Certificate Authority File」テキスト領域にコピーしようとしましたが、これもうまくいきませんでした。

私が言ったように、私たちは1か月以上それと格闘してきました. 誰かがそれを助けることができれば、本当に感謝しています。サービスの料金を支払う必要がある場合は、お知らせください。

前もって感謝します。

4

1 に答える 1

14

(おそらく、この質問にはhttps://serverfault.com/の方が適しているでしょう。)

Apache Httpd 構成で使用できるいくつかのオプションを次に示します (これが構成パネルにどのようにマップされているかはわかりません)。

SSLCertificateFile      /etc/ssl/certs/host.pem
SSLCertificateKeyFile   /etc/ssl/private/host.key
SSLCACertificatePath    /etc/ssl/certs/trusteddir
#SSLCACertificateFile   /etc/ssl/certs/trustedcert.pem
#SSLCADNRequestFile     /etc/ssl/certs/advertisedcas.pem

SSLCertificateFileSSLCertificateKeyFileサーバーで SSL を有効にするための基本的な要件です。

クライアント証明書認証が必要なSSLCACertificatePathため、(ディレクトリの場合) またはSSLCACertificateFile(ファイルの場合) のいずれかを構成して、信頼する CA を指定する必要があるため、そこに CA 証明書を追加します。これらは、PEM 形式のファイルである必要があります。そこにある証明書はすべて信頼できると見なされます (ただし、CA の基本的な制約が必要になる場合がありますが、覚えていません。とにかくルート CA 証明書を自分で生成した場合は、これは非常に標準的です)。

これに加えて、証明書をSSLCADNRequestFile. SSLCACertificatePathまたは証明書ディレクティブから自動的に入力されるため、これは必要ありませんがSSLCACertificateFile、サーバーが受け入れる可能性があるとアドバタイズする CA のリストをさらに制御したい場合は、ここで実行します。明確にするために、これはクライアント証明書の信頼を管理するものではなく、サーバーが信頼できるとアドバタイズするものであるためSSLCACertificatePathSSLCACertificateFile. おそらく、構成パネルの「Certificate Authority File」オプションがそれを制御し、他の2つのオプションのいずれも制御しません。

これをデバッグする 1 つの方法は、コマンド ラインでこれを行うことです。

echo | openssl s_client -showcerts -connect www.your.host.example:443

これには、最初に提示する証明書チェーンがリストされているはずです (私が覚えている限りでは、一部のクライアントは時々それを必要とするように思われるため、CA までの完全なチェーンを提示するとよいでしょう)。次に、クライアント証明書認証のために受け入れても構わないと思っている CA をリストするか、それ以外の場合はクライアント証明書 CA 名が送信されません(この場合、上記のディレクティブの 1 つに問題があります)。これにより、少なくともどのようにSSLCADNRequestFileor SSLCACertificatePath/SSLCACertificateFileが構成されているかがわかります (ただし、重要なのは最後の 2 つです)。

于 2010-08-13T11:52:21.333 に答える