1

私は次の設定をしています:

SSLクライアント証明書を必要とするサーバーが2つあります。証明書は認証に使用されます。

ユーザー(ブラウザーを使用)は、クライアント証明書を使用してServer1に要求を行います。ここまでは順調ですね。さて、私がやりたいこと:Server1はServer2にリクエストを行い、そのレスポンスを解析してユーザーに返します。

Server1はphp_curlを使用してリクエストを実行します。Server1に(ユーザーの)元のクライアント証明書をServer2(ユーザーを検証する..)に渡してもらいたい。Server1は、ユーザーに代わって'投稿します。

これは可能ですか?

ApacheではExportCertDataSSLOptionが有効になっています。私はすでに次のヘッダーをcurlオプションに追加しようとしました(これはクライアント証明書を使用したApacheプロキシのセットアップとほぼ同じであると考えています)。

$headers[] = "SSL_CLIENT_S_DN: ".$_SERVER['SSL_CLIENT_S_DN'];
$headers[] = "SSL_CLIENT_I_DN: ".$_SERVER['SSL_CLIENT_I_DN'];
$headers[] = "SSL_SERVER_S_DN_OU: ".$_SERVER['SSL_SERVER_S_DN_OU'];
$headers[] = "SSL_CLIENT_VERIFY: ".$_SERVER['SSL_CLIENT_VERIFY'];
$headers[] = "SSL_CLIENT_V_START: ".$_SERVER['SSL_CLIENT_V_START'];
$headers[] = "SSL_CLIENT_V_END: ".$_SERVER['SSL_CLIENT_V_END'];
$headers[] = "SSL_CLIENT_M_VERSION: ".$_SERVER['SSL_CLIENT_M_VERSION'];
$headers[] = "SSL_CLIENT_M_SERIAL: ".$_SERVER['SSL_CLIENT_M_SERIAL'];
$headers[] = "SSL_CLIENT_CERT: ".$_SERVER['SSL_CLIENT_CERT'];
$headers[] = "SSL_CLIENT_VERIFY: ".$_SERVER['SSL_CLIENT_VERIFY'];
$headers[] = "SSL_SERVER_M_VERSION: ".$_SERVER['SSL_SERVER_M_VERSION'];
$headers[] = "SSL_SERVER_I_DN: ".$_SERVER['SSL_SERVER_I_DN'];
$headers[] = "SSL_SERVER_CERT: ".$_SERVER['SSL_SERVER_CERT'];

しかし、それらには運がありません。

4

1 に答える 1

2

キーなどを含む証明書が手元にない限り、元のクライアント証明書を使用してリクエストを渡すことはできません。これがSSLの仕組みです。

両方のサーバーを実行している場合は、Server1でクライアント証明書を検証し、カスタムヘッダーまたは最適なものを使用してServer2で検証済みの情報を渡すことができます。

2番目のサーバーの責任を負わない場合は、運が悪いです。MITM攻撃を単純にすることは、SSL作成者の意図の1つではなかったからです。

于 2011-09-16T10:30:03.313 に答える