HttpURLConnection
Javaで証明書を使用せずにsslを使用することは可能ですか?
乱数または対称鍵を使用したい。
HttpURLConnection
Javaで証明書を使用せずにsslを使用することは可能ですか?
乱数または対称鍵を使用したい。
SSL / TLSは厳密には証明書を必要としませんが、RFC 2818(特にセクション3.1)は明らかにX.509証明書を参照しているため、HTTPSは証明書を必要とします。
非常によく似た質問に対する詳細については、ServerFaultのこの回答を参照してください。
証明書なしで行うことはRFC2818の範囲外になりますが、それでも機能する可能性があります(そして意味があります)。ただし、他の実装でサポートされている場合は異なる場合があります。証明書を使用しないことを選択した場合でも、通信のセキュリティを確保するためにサーバーのIDを確認する方法が必要です。
編集:
JSSEのOracleプロバイダーは、 PSK暗号化システム(またはOpenPGP証明書)をサポートしていません。取得する共有キーに最も近いのは、Kerberos暗号スイートです。
いいえ、できません。HTTPS経由で接続するには証明書が必要です。目的に応じて自己署名証明書を使用できます。
はい。SSL/TLSでは、対称鍵(PSK暗号スイート)やユーザー名/パスワードの組み合わせ(SRP暗号スイート)など、いくつかの異なる認証方法を使用できます。Javaの組み込みメカニズムについては言えませんが、SecureBlackbox製品(Javaエディションを含む)では、SSL/TLSチャネルのクライアント側とサーバー側の両方で前述のメカニズムを使用できます。これは、提供されているHTTPSクライアントおよびサーバーコンポーネントにも当てはまります。
はい、事前共有キーを使用してTLS接続を確立できます。証明書は必要ありません。
Cloverは、BouncyCastleを搭載したTLSPSKJSSEソケットファクトリをリリースしました。
https://github.com/clover?q=pskfactoriesを参照してください
あるいは、WolfSSLにはPSKをサポートするJSSE実装もあるようです。残念ながら、ネイティブコードに依存しているため、純粋なJavaの場合よりも、起動して実行するのに少し手間がかかる可能性があります。商用ライセンスを購入しない限り、GPLv2でもあります。
次の質問で受け入れられた回答を見てください。
ApacheHttpClient4.0でSSL証明書エラーを無視する方法
基本的に何もチェックせず、すべてを信頼するTrustManagerを作成する必要があります。開発中にこれがなぜ役立つのかはわかりますが、SSLの目的を否定するものです。TrustManagerは、第三者がデータの傍受や操作などを行うサーバーを装う中間者攻撃を回避するために存在します。したがって、サーバー証明書を検証しないと、だれでも「無効な」証明書を提供する可能性があります。
SSLには証明書が必要ですが、次のように自己署名証明書を作成できます。
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
この証明書はkeystore.jksに保存され、360日間有効です。
keystoreFile
httpサーバーの実装に応じて、通常は引数を指定してキーストアをポイントしkeystorePass
、パスワードを設定します(Apache TomcatのHTTPコネクタから取得したプロパティ名ですが、他のhttpサーバーでも同様です。