Я пытаюсь отправить данные на сайт банка.Что я сделал:
- Я установил сертификат в Glassfish, который был выдан в другой домен, и использую его в localhost.
- Импортированный сертификат в склад доверенных сертификатов
Затем при отправке формы (POST) на сайт банка я получаю
didn’t accept your login certificate, or one may not have been provided.
ERR_BAD_SSL_CLIENT_AUTH_CERT
У меня также естьпопытался загрузить файл .jks из кода и открыть sslSocket, затем использовать httpsUrlConnection для публикации данных.Этот метод работает в автономном режиме, но при использовании приложения throug, развернутого в Glassfish, он дает didn’t accept your login certificate, or one may not have been provided.
ERR_BAD_SSL_CLIENT_AUTH_CERT
код, который я сделал:
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("E://keystore.jks"), "asdf".toCharArray());
Enumeration<String> en = ks.aliases();
int n = 0;
PrivateKey privKey = null;
Certificate certificate = null;
Certificate[] certificates = null;
String alias = "";
while (en.hasMoreElements()) {
String aliasKey = en.nextElement();
System.out.println("aliaskey " + aliasKey);
alias = aliasKey;
privKey = (PrivateKey) ks.getKey(aliasKey, "smart@123".toCharArray());
System.out.println("privKey " + privKey);
certificate = ks.getCertificate(aliasKey);
System.out.println("certificate " + certificate);
certificates = ks.getCertificateChain(aliasKey);
System.out.println("certificates " + certificates);
System.out.println("Provider " + ks.getProvider().getName());
try {
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "asdf".toCharArray());
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), null, null);
SSLContext sslContext = null;
sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), null, null);
String url = "https://example.com/form";
URL urlObj = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) urlObj.openConnection();
if (conn instanceof HttpsURLConnection) {
((HttpsURLConnection) conn).setSSLSocketFactory(sslContext.getSocketFactory());
}
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/xml");
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
conn.setDoInput(true);
conn.setDoOutput(true);
String payload = "datas";
OutputStream output = new BufferedOutputStream(conn.getOutputStream());
output.write(payload.getBytes());
output.flush();
}