問題タブ [jsse]
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.
java - SSLEngine を使用して x509 SSL/TLS ハンドシェイク後にサーバー (ピア) 名を確認する方法は?
ノンブロッキング TLS 通信にSSLEnginewithを使用しています。NIO
エンジンは正常に動作しており、サーバー証明書の有効期間である CA 信頼を検証できます。
しかし、私が見逃しているのは、証明書のサブジェクト名が接続先のサーバー名と一致することの検証です。
サブジェクト代替名などのすべての SSL 拡張機能を考慮して、それを実装する最良の方法は何ですか?
サブジェクト名を簡単に確認しようとしましたが、でも機能しませんgoogle.nl。証明書のサブジェクトはgoogle.comでありgoogle.nl、代替名拡張子でのみ見つかります。
java - SSLContext の初期化
リファレンス ガイドを見ています。を作成するにはJSSEのインスタンスを取得する必要があるため、で使用してセキュリティを有効にできます。SSLContextSSLEngineNetty
のインスタンスを取得するにはSSLContext、 を使用しますSSLContext.getInstance()。メソッドが複数回オーバーライドされているので、使用するプロトコルとセキュリティ プロバイダーを選択できます。
ここに、使用できるアルゴリズムのリストが表示されます。安全な通信を有効にするには、どのアルゴリズムを使用すればよいですか?
また、利用するセキュリティプロバイダを指定できるとのことですが、どのプロバイダを利用すればよいのでしょうか?
ありがとう
java - キーストアのタイプ: どれを使用しますか?
java.securitymyのファイルJREを見ると、デフォルトで使用するキーストア タイプが に設定されていることがわかりますJKS。ここに、使用できるキーストア タイプのリストがあります。
推奨されるキーストアのタイプはありますか? さまざまなキーストア タイプの長所と短所は何ですか?
java - キーストアのパスワード管理
キーストア(「キーストア」または「トラストストア」のどちらに使用されているかに関係なく)は、load()メソッドを使用して作成された後に初期化されます。1つのバージョンではInputStream、キーストアファイルに対応するファイルと、ファイルを復号化するためのパスワードが必要です。プログラムでメソッドにパスワードを提供することは、私には奇妙に思えます。
たとえば、サーバーはキーストアを使用して秘密鍵と関連する証明書を格納します。キーストアに存在する情報は賢明であるため、パスワードで保護されています。load()プログラムでメソッドにパスワードを渡す際の問題は何ですか?ベストプラクティスは何ですか?
他の例ですが、今のところトラストストアに関するものです。クライアントには、信頼できるCAの証明書を格納するトラストストアがあります。私が理解しているように、トラストストアにはサーバーの証明書は含まれていませんが、サーバーの証明書の検証を可能にするCAの証明書のみが含まれています。私が見ているトラストストアの例の1つは、JRE(securityフォルダー内cacerts)に存在するものです。構成を見ると、デフォルトのパスワードで保護されていることがわかりますchangeit。トラストストアはキーストアを使用して実装されていることを理解しているので、パスワードを使用して暗号化する必要があります(またはオプションですか?)。しかし、トラストストアは一般に公開情報(信頼できるCAの証明書)をファイルに保存するので、なぜパスワードを変更することが推奨されるのでしょうか。
ありがとう
java - 証明書に署名するためのソリューション
複数のアプリケーションサーバーと複数のクライアントを備えたシステムの場合、相互認証と、TLSによって提供されるその他のセキュリティ保護を紹介したいと思います。
サーバーとクライアントは、同じネットワーク上だけでなく、異なるネットワーク上に配置されている場合があります。
各エンティティ(クライアントまたはサーバー)には、秘密鍵と公開鍵のペアを格納する独自の鍵ストアと、公開鍵をラップするX.509証明書があります。ただし、この時点で、証明書は自己署名されています。したがって、他の通信エンティティによって検証されることはありません。いくつかの調査の後、私はいくつかの解決策を見てきました:
- 証明書に署名するプライベートCAを作成します。私がよく理解している場合は、CAの証明書を使用して他のエンティティの証明書を検証できるように、CAの証明書が各エンティティのトラストストアに存在する必要があります。
- 最初のソリューションとしてプライベートCAを作成します。ただし、プライベートCAの証明書は、商用CA(Verisignなど)によって署名されています。以前のソリューションに何が追加されるのかわかりません。
- 商用CAによる各エンティティの証明書への署名。しかし、このソリューションは高価なようです。
- 自己署名証明書のみの使用。各エンティティの証明書は自己署名されており、通信する各エンティティのトラストストアに追加する必要があります。
これは、セキュリティに関する私の最初の経験です。有効と思われるソリューションのうち、どれをお勧めしますか?
ありがとう
java - Java サーバーでの KeyStore エラー: BKS が見つかりません
次の行でエラーが発生します。
私が得るエラーは次のとおりです。
「参照ライブラリ」にbcprov-jdk16-146.jarを追加しましたが、まだ運がありません。
私の全体的なプログラムでは、SSL ソケット接続を使用して、Android フォンをコンピューターのマウスとキーボードとして使用できます。Android アプリには同じ行があり、エラーはありません。
私は何を間違っていますか?
編集:
おそらくこれはほとんどの人にとって常識ですが、私にはそうではなかったので、私のような人のためにこれを行いました.
私が BKS を使用していた理由は、それが Android で許可されている唯一の形式だからですが、Android 側でのみ必要であることを知りませんでした。サーバーで別の形式を使用してから、キーのコピーを作成して、 Android で使用する BKS により、BouncyCastle が不要になります。
サーバーにJKSキーを使用し、そのキーのコピーをBKSに変換して、portecleというプログラムを使用してAndroidで使用しました。
java - Tomcat での JSSE 構成 - AES256 暗号を有効にする
Apache Tomcat サーバーの JSSE でサポートされている暗号は何ですか? AES256 を有効にして暗号を並べ替えるにはどうすればよいですか?
java - このエラーの取得:「javax.net.ssl.SSLHandshakeException:共通の暗号スイートがありません」
クライアントはC#で記述され、サーバーはJAVAで記述されています。そのため、接続しようとすると、サーバーjavax.net.ssl.SSLHandshakeException: no cipher suites in commonとC#の「EOFまたは0バイト」でエラーが発生しました。
[C#]:
[JAVA]:
そして、JAVA起動プロパティ:
java - 証明書キーストアを別のJVMに移行する
JREを必要とし、証明書も作成するインストーラーに取り組んでいます。新しいJREをバンドルする次のバージョンのインストーラーに取り組んでいます。古いJREのcacertsキーストアにインポートされたすべての証明書を新しいJREに移動する必要があります。古いjre/lib / security /ディレクトリの下にある「cacerts」ファイルを新しいJREにコピーすると、cacertsの既存の証明書は有効になりますか?インストールします。
私は質問を見ました:「cacertsのすべての内容をjssecacertsファイルにインポートすることは可能ですか?」キーストアに証明書をインポートします。これは、cacertsのコピーによるキーストアの移行が機能しない場合に、既存のjre / lib / security / cacertsをバックアップし、それを新しいJREにインポートする必要があることを意味しますか?
java - PEM からキーストアをプログラムで取得する
証明書と秘密鍵の両方を含む PEM ファイルからキーストアをプログラムで取得するにはどうすればよいですか? HTTPS 接続でクライアント証明書をサーバーに提供しようとしています。openssl と keytool を使用して動的にロードする jks ファイルを取得すると、クライアント証明書が機能することを確認しました。p12 (PKCS12) ファイルを動的に読み込むことで動作させることもできます。
BouncyCastle の PEMReader クラスの使用を検討していますが、いくつかのエラーを回避できません。-Djavax.net.debug=all オプションを指定して Java クライアントを実行し、Debug LogLevel を指定して Apache Web サーバーを実行しています。何を探すべきかわかりません。Apache エラー ログは次のことを示します。
Java クライアント プログラムは次のことを示します。
クライアントコード:
クライアントが TLSv1 であるのに、サーバーがログに SSLv3 を出力していることに気付きました。システム プロパティ -Dhttps.protocols=SSLv3 を追加すると、クライアントも SSLv3 を使用しますが、同じエラー メッセージが表示されます。-Dsun.security.ssl.allowUnsafeRenegotiation=true も追加してみましたが、結果は変わりませんでした。
私はグーグルで検索しましたが、この質問に対する通常の答えは、最初に openssl と keytool を使用することです。私の場合、その場で PEM を直接読み取る必要があります。私は実際に、すでにこれを行っている C++ プログラムを移植していますが、率直に言って、これを Java で行うのがいかに難しいか非常に驚いています。C++ コード: