シナリオ、私はそれが混乱しているWebサーバーを扱っています(私はこの部分を制御しません、私はゲームをプレイしなければなりません。世界最大のソフトウェアベンダー)J2EE件名の代替名はありません。ジェダイの復讐
デフォルトでは、Webサーバが2つのSSLサービスを提供しています、それらのそれぞれが
全く別のSSL証明書
がある可能性があります証明書 署名アルゴリズム:sha1WithRSAEncryption RSAキー強度:1024件名:* .dummy.nodomain 発行者:このページ
public List<String> doPostWithSSL(String direction, String dataToSend, String contentType, boolean OverrideSecurityVerifications) {
try {
URL url = new URL(direction);
List<String> webcontent = new ArrayList();
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Host", getHostByUrl(direction));
conn = new UserAgentsLibrary().getRandomUserAgent(conn);
if (contentType != null) {
conn.setRequestProperty("Content-Type", contentType);
} else {
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
}
conn.setDoOutput(true);
if (OverrideSecurityVerifications) {
try {
TrustManager[] trustAllCerts;
trustAllCerts = new TrustManager[]{new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
}
}};
// We want to override the SSL verifications
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, trustAllCerts, null);
SSLSocketFactory factory = ctx.getSocketFactory();
conn.setDefaultSSLSocketFactory(ctx.getSocketFactory());
HostnameVerifier allHostsValid = (String hostname1, SSLSession session) -> true;
conn.setDefaultHostnameVerifier(allHostsValid);
conn.setSSLSocketFactory(factory);
} catch (KeyManagementException kex) {
System.out.println("[+] Error bypassing SSL Security " + kex.getMessage());
} catch (NoSuchAlgorithmException nsex) {
System.out.println("[+] Error forgeting TLS " + nsex.getMessage());
}
}
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(dataToSend);
wr.flush();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) { //todo+=line+"\n";
webcontent.add(line);
}
wr.close();
rd.close();
return webcontent;
} catch (MalformedURLException mex) {
System.out.println("[+] Error: I received a malformed URL");
return null;
} catch (SSLHandshakeException sslex) {
System.out.println("[+] Error: SSL Handshake Error!" + sslex.getMessage());
return null;
} catch (IOException ioex) {
System.out.println("[+] Error: Input/Output Error!" + ioex.getMessage());
return null;
}
}
の例次のroot_NPL
:sha1WithRSAEncryption RSAキー強度::2048
件名:vhcalnplcs_NPL_01 発行*
証明書B 署名アルゴリズム.dummy.nodomain
証明書Bでプログラムを動作させることはできましたが(ここで問題はありません)、証明書Aで動作するようにはできませんはい、私はこのコードはMITMに対して脆弱であることを知って
- これは、サンプル・コードであるを検討する
物事の原因になっている*、無関係な詳細を見ていないことユーザーに警告が表示されています
- いいえ、キーストアに証明書を追加したくありません。私は純粋なJ2EEコードを使用してい
- 、私はそれが標準でないものを使用したくない私は
誰かが持っていたのWindows、Mac、Linuxのために働く解決策を見つけるしたいと思います