問題タブ [mutual-authentication]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
openssl - CAPI と OpenSSL による相互 SSL 認証
OpenSSL (libcurl 経由) を使用して、クライアント アプリ (C++) から相互 SSL 認証を行う必要があります。MS Crypto API (CAPI) と ActivClient ドライバーを介してスマート カードから証明書を読み取り、CAPI を使用して証明書チェーンの検証を行っています (証明書チェーンは MS 証明書ストアにあるため、OpenSSL を使用して証明書チェーンを検証する方が簡単なようです)。 . クライアント証明書を CAPI から OpenSSL に変換できますが、秘密鍵に問題があります。
サーバーがクライアントの証明書を検証するには、クライアント証明書の秘密鍵を OpenSSL に公開する必要があるようです。それをどのように行うべきか、またはそれを行うことができるかどうかは明確ではありません(証明書でキーが「エクスポート可能」としてマークされているかどうかによって異なる場合があります)。Converting private key in Windows store to PEM (for OpenSSL)の提案に従ってみてください。キーがエクスポート可能であることを願っていますが、正しい道をたどっているのかどうか疑問に思っています。
このトピックについてかなり検索しましたが、決定的な情報は見つかりませんでした。
アドバイスや提案は大歓迎です!!
c# - openssl と .Net を使用した相互認証
プロジェクトで相互認証にマネージド OpenSSL ラッパーを使用しています。私が今まで行ってきたことは、.Net のAuthenticateAsClient
関数を呼び出してクライアント証明書を送信することでSslStream
あり、サーバーからのコールバック関数で 3 つのチェーン証明書と共にサーバー証明書を取得しています。しかし、このサーバー証明書をどうしたらよいかわかりません。今、私は2つの質問があります:
ルート CA がローカル マシンにインストールされている場合でも、関数
error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate
を呼び出すとエラーが発生するのはなぜですか?AuthenticateAsClient
管理された OpenSSL を使用して、サーバーからコールバック関数で取得したサーバー証明書をキーストアに追加する方法、または相互認証を完了するためにこのサーバー証明書を他に何をする必要がありますか?
OpenSSL を使用してこの相互認証プロセスを完了するのを手伝ってくれませんか。
nginx - Nginx 相互認証
Nginx と相互認証に問題があります。私のサーバーは以下のように構成されています:
Nginxの別のインスタンス(クライアントとしてのNginx)でサーバーに接続したい。
サーバーへの証明書で自分自身を認証するようにNginx-Clientを構成する方法は?
apache - X.509 クライアント認証のための Apache + mod_ssl 中間 CA 自動検出
Apache/mod_ssl Web サーバー (任意のバージョン) を構成して、中間発行 CA 証明書を自動的に検出/ダウンロードして、事前定義されたトラスト ルート CA に戻すことは可能ですか?
何百もの中間発行 CA が Web サーバーによって信頼される必要がある可能性があるため、何万ものエンドユーザーに TLS クライアント認証を提供できる必要があります。Axway/Tumbleweed Server Validatorにアクセスして、チェーン内の証明書の SCVP/OCSP/CRL 検証 (失効、OID ポリシーなど) を処理しますが、Axway Server Validator プラグインにクライアント証明書を渡すためには、 apache/mod_ssl は最初にクライアント証明書を認証/検証する必要があり、事前構成された apache CA 証明書データベース (PEM エンコードされた CA 証明書の連結リストを含むテキスト ファイル、または個々の証明書ファイルを含むディレクトリ) に対してチェーンを発行しています。
Apache が発行 CA チェーンを認識しているかどうかに関係なく、証明書を受け入れても問題ありませんが (SCVP がチェーンを検証するため)、それが可能であることを示す情報が見つかりません。
手動で (またはスクリプトを使用して) CA 証明書バンドル テキスト ファイルを作成できますが、これはすぐに非常に大きなファイルになり、定期的にスキャンして期限切れの CA 証明書を削除し、新しく発行された証明書を追加する必要があると確信しています。もちろん、このアプローチの問題は、新しい CA 証明書がバンドル ファイル/ディレクトリに追加されたときに Web サーバーを再起動する必要があることです。結果として得られるファイルのサイズは数メガバイトになる可能性があり、Web サーバーのパフォーマンスには適していません。 .
どんな助けやアイデアも大歓迎です。
ssl - 2 つのプレイ サービス間の Nginx 双方向認証
2 つのプレイ フレームワーク サービス (クライアント、サーバー) を実行する 2 つのリモート サーバーがあり、それらの間で SSL 相互認証を構成したいと考えています。
サーバーへのリバース プロキシとして Nginx を使用しており、クライアントの前で Nginx をフォワード プロキシとして使用しようとしています。
リバース プロキシは完全に機能し、クライアント証明書をブラウザーにインポートしてテストし、認証をテストしました。クライアントサーバーでの私の問題クライアントサーバーでNginxをフォワードプロキシとして構成して、リクエストでクライアント証明書を送信する必要があります。
Nginxはそれを行うことができますか(私はたくさんグーグルで検索しましたが、方法が見つかりません)。または、フォワード プロキシとして Apache または squid を使用する必要がありますか? 2 つのサーバー間で相互 SSL 認証を行うためのより良い方法はありますか?
ご指導いただきありがとうございます。
java - Android クライアントでの SSL 相互認証の失敗は、サーバー証明書を受け入れますが、サーバーはクライアント証明書を取得しません
Linux サーバーと Android アプリの間で相互認証 SSL をセットアップしようとしています。これまでのところ、SSL 経由でサーバー証明書と通信するアプリを動作させることができましたが、クライアント証明書のみを受け入れるようにサーバーを設定すると、動作しなくなります。サーバーの構成は問題ないようですが、私は行き詰まっています。私の最善の推測は、クライアント証明書がサーバーに正しく提示されていないが、次にテストする方法がわからないということです。OS X キーチェーンのクライアントに .pem を使用しようとしましたが、ブラウザがその証明書で動作しないようです。次に、https接続を実現でき、APPが署名されていないサーバー証明書を受け入れるため、サーバー証明書は完全に機能します。
私が使用しているコードは、さまざまなチュートリアルの組み合わせです。回答は、ブックマークした主なものです。
- http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/
- Android での自己署名 SSL の受け入れ
- モバイルアプリでコミュニケーション [信頼性、プライバシー、完全性] を確保しますか?
- (サーバー構成の場合) https://security.stackexchange.com/questions/34897/configure-ssl-mutual-two-way-authentication
これは、私が接続に使用している 2 つの主要なクラスです。1) このクラスは、JSON の解析を処理し、REQUESTS を実行します。
この 2 番目のクラスは、SSL 認証を処理します。
このコマンドでopensslを使用したキーを作成するには:
Android 用 BKS のキーを取得するために、 http ://www.bouncycastle.org/latest_releases.html にある弾む城 bcprov-jdk15on-150.jar を使用しました。
そして、次のコマンドを使用しました:
最後に、Fedora 19 でクライアント証明書を要求し、(作成したクライアント証明書と一致する) 証明書の有効性を確認するために /etc/httpd/conf.d/ssl.conf に追加した行は次のとおりです。
この構成ファイルで多くの組み合わせを試しましたが、すべて同じ結果になり、「SSLPeerUnverifiedException: No peer certificate」例外が発生しました。サーバーの SSL 構成ファイルにこの行をコメントすると、すべて正常に動作しますが、サーバーはすべてのクライアントを受け入れますが、これは私が必要としているものではありません。
前もって感謝します :)
アップデート
@EJPの回答はうまくいきました
最初に、証明書を正しい ( /etc/pki/tls/certs/ ) パスに追加し、次を使用してロードする必要がありました。
これにより、「f3f24175.0」のような名前の openSSL 読み取り可能なシンボリック リンクが作成されます。</p>
次に、新しい証明書ファイルを /etc/httpd/conf.d/ssl.conf 構成ファイルに設定します。
ここで http サービスを再起動し、証明書がロードされているかどうかをテストします。
すべて問題なければ、次のように表示されます。
f3f24175.0: わかりました
そして、次のコマンドでテストを終了できます:
これにより、信頼できるクライアント証明書のリストが返されます (追加した証明書が機能している場合)。
問題の 2 番目の部分は、authclientcerts.BKS に秘密鍵が含まれていないため、指定したパスワードが使用されず、サーバーが証明書を認証しないことでした。そのため、鍵と証明書を pkcs12 にエクスポートし、それに応じて JAVA コードを更新しました。
エクスポート コマンド:
次に、SecureHttpClient.java クラスの一部を変更して、BKS の代わりに PKCS12 でクライアント証明書を作成しました。
キー ストア タイプを BKS から PKCS12 に変更するには、以下を置き換えました。
このため:
次に、 res/raw/ にある実際のキー ストア ファイルへの参照を更新しました。
このため:
そして、それはトリックをしました:D