概念証明の開発のためにクライアントと相互TLSを設定し、そのクライアントをWebサーバーに転送したいローカルコンピュータ(OSX)で実行されるHAProxyサーバーがあります。
フォローするこのチュートリアル認証を設定し、このチュートリアル独自の証明書を作成してください。私のhaproxy設定ファイルは次のとおりです。
global
log 127.0.0.1 local1 notice
frontend intranet
mode http
log-format %T\ %t\ %U
log global
bind *:2000 ssl crt both.pem ca-file myCA.pem verify required
default_backend helpdesk
backend helpdesk
mode http
server helpdesk 127.0.0.1:9000 check
both.pem
ルートCAと証明書自体、およびmyCA.pem
証明書のみを生成するためにRSA秘密鍵を使用します。この方法はうまくいきますが、より良い方法があれば教えてください。証明書を 2 回含めることは不要な冗長性に見えます。
を使用してサーバーに接続できますopenssl s_client -connect 127.0.0.1:2000 -cert ./derived.crt -key ./derived.key
。派生した証明書とキーをルート証明書とキーに置き換えて接続することもできます。どちらの方法も正常にハンドシェイクし、ポート9000でWebサーバーに接続できます(GETを送信してHTMLを再受信できます)。正気を保つためにハンドシェイクを実行できない無関係な2番目のルートCAも作成しました。
2番目のチュートリアルの指示に従って、派生CAとルートCAを私の証明書に追加してみました。追加して信頼しましたが、Safariはまだサーバーに接続できません。サーバーの接続が予期せず切断されたというメッセージが表示されます。これは、ハンドシェイクが失敗したか試していないことを意味すると仮定します。 Chromeは空の回答を受け取ったと言います。
Postmanで試してみて、opensslが失敗したときに受け取ったのと同じ応答を得ることができるかどうかを確認します(ハンドシェイクが失敗したことを明示的に通知します)。しかし、簡単な内容が欠けている場合に備えてここで質問したかったのです。わかりました。どんな助けでも大変感謝します。
更新:アドレスの先頭にhttps://を追加する必要があることがわかりました。これで、ブラウザは使用する証明書を選択するように求められます。ただし、キーチェーンリストに表示される新しい証明書ではなく、システムでデフォルトで使用できる2つの証明書(作業証明書)のみが表示されます。
アップデート2:証明書のキーチェーンには2つの異なる部分があります。一つは「証明書」と呼ばれます。証明書をインポートするときに私がいた場所です。もう一つは「私の証明書」と呼ばれ、「証明書」のサブセットのようです。ここにカスタム証明書を追加して使用できる方法を見つけることができるかと考えていました。
答え1
ついに見つかった投稿を使って問題を解決しました。さまざまなリクエストをしてみてください。
このコマンドをopenssl pkcs12 -export -clcerts -inkey private.key -in certificate.crt -out MyPKCS12.p12 -name "Your Name"
使用すると、キーチェーンに追加できる証明書を生成し、サーバーに接続するときにSafariで選択できます。