first commit
This commit is contained in:
15
src/main/java/org/pavlik/helpers/Main.java
Normal file
15
src/main/java/org/pavlik/helpers/Main.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package org.pavlik.helpers;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
RestHelper Rest = new RestHelper("client-keystore3.jks","JKS","123321","2","truststore.jks","JKS","123321");
|
||||
String cyrillicString = "какашка";
|
||||
// try {
|
||||
// cyrillicString = URLEncoder.encode(cyrillicString, "UTF-8");
|
||||
// } catch (UnsupportedEncodingException e) {
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
Rest.queryPostRaw("https://192.168.200.10/index.php?koko=1",cyrillicString);
|
||||
|
||||
}
|
||||
}
|
||||
120
src/main/java/org/pavlik/helpers/RestHelper.java
Normal file
120
src/main/java/org/pavlik/helpers/RestHelper.java
Normal file
@@ -0,0 +1,120 @@
|
||||
package org.pavlik.helpers;
|
||||
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.ssl.PrivateKeyStrategy;
|
||||
import org.apache.http.ssl.SSLContexts;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import java.io.*;
|
||||
import java.security.*;
|
||||
|
||||
|
||||
public class RestHelper {
|
||||
|
||||
public String codepage="UTF-8";
|
||||
protected HttpClient httpClient = null;
|
||||
|
||||
|
||||
public RestHelper (String keypath,String keytype,String keypass, String keyAlias, String trustpath, String trusttype, String trustpass) {
|
||||
boolean withTrust = false;
|
||||
KeyStore truststore_material = null;
|
||||
|
||||
KeyStore keystore_material = (keypath !=null) ? this.readKeyStore(keypath, keytype, keypass) : null;
|
||||
PrivateKeyStrategy privateKeyStrategy = keyAlias == null ? null : (aliases, socket) -> keyAlias;
|
||||
|
||||
|
||||
if (trustpath !=null) {
|
||||
truststore_material = this.readKeyStore(trustpath, trusttype, trustpass);
|
||||
withTrust = true;
|
||||
}
|
||||
|
||||
SSLContext sslContext = (withTrust) ?
|
||||
genSSLContext(privateKeyStrategy,keystore_material,truststore_material,keypass) :
|
||||
genSSLContextAllTrust(privateKeyStrategy,keystore_material,keypass);
|
||||
|
||||
this.httpClient = HttpClients.custom().setSSLContext(sslContext).build();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Подгружает файл JKS или PKCS12
|
||||
* @param path - путь до jks/p12
|
||||
* @param type - JKS или PKCS12
|
||||
* @param pwd - пароль к хранилищу
|
||||
* @return - хранилище для SSLContext
|
||||
*/
|
||||
protected KeyStore readKeyStore(String path, String type, String pwd) {
|
||||
try {
|
||||
FileInputStream KeyStoreFile = new FileInputStream(new File(path));
|
||||
KeyStore keyStore = KeyStore.getInstance(type);
|
||||
keyStore.load(KeyStoreFile, pwd.toCharArray());
|
||||
return keyStore;
|
||||
|
||||
} catch (Exception e){
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* mtls - взаимная аутентификация
|
||||
* @return
|
||||
*/
|
||||
SSLContext genSSLContext (PrivateKeyStrategy privateKeyStrategy,KeyStore keyStore, KeyStore trustStore, String keypass) {
|
||||
try {
|
||||
return SSLContexts.custom()
|
||||
.loadTrustMaterial(trustStore,null)
|
||||
.loadKeyMaterial(keyStore, keypass.toCharArray(),privateKeyStrategy)
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Аутентификация только клиента, серверный сертификат не проверяется
|
||||
* @return
|
||||
*/
|
||||
SSLContext genSSLContextAllTrust (PrivateKeyStrategy privateKeyStrategy,KeyStore keyStore, String keypass) {
|
||||
|
||||
try {
|
||||
return SSLContexts.custom()
|
||||
.loadTrustMaterial(null, (x509CertChain, authType) -> true) //вариант принимающий всё
|
||||
.loadKeyMaterial(keyStore, keypass.toCharArray(),privateKeyStrategy) // use null as second param if you don't have a separate key password
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void queryPostRaw(String queryUrl, String queryBody) {
|
||||
HttpResponse response = null;
|
||||
String responseBody = null;
|
||||
|
||||
HttpPost query = new HttpPost(queryUrl);
|
||||
query.setHeader("р1","yes"); //заголовок
|
||||
query.setHeader("CONTENT-TYPE","text/plain; charset=UTF-8"); //заголовок
|
||||
try {
|
||||
query.setEntity(new StringEntity(queryBody,this.codepage)); //тело
|
||||
response = this.httpClient.execute(query);
|
||||
responseBody = EntityUtils.toString(response.getEntity(), this.codepage);
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
System.out.println("----------------------------------------");
|
||||
System.out.println(response.getStatusLine());
|
||||
|
||||
System.out.println("Response body: " + responseBody);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user