use of org.mitre.taxii.client.HttpClient in project metron by apache.
the class TaxiiHandler method buildClient.
private static HttpClient buildClient(URL proxy, String username, String password) throws Exception {
// Start with a default TAXII HTTP client.
HttpClient client = new HttpClient();
// Create an Apache HttpClientBuilder to be customized by the command line arguments.
HttpClientBuilder builder = HttpClientBuilder.create().useSystemProperties();
// Proxy
if (proxy != null) {
HttpHost proxyHost = new HttpHost(proxy.getHost(), proxy.getPort(), proxy.getProtocol());
builder.setProxy(proxyHost);
}
// Basic authentication. User & Password
if (username != null ^ password != null) {
throw new Exception("'username' and 'password' arguments are required to appear together.");
}
// from: http://stackoverflow.com/questions/19517538/ignoring-ssl-certificate-in-apache-httpclient-4-3
SSLContextBuilder ssbldr = new SSLContextBuilder();
ssbldr.loadTrustMaterial(null, new TrustSelfSignedStrategy());
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(ssbldr.build(), SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", new PlainConnectionSocketFactory()).register("https", sslsf).build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(registry);
// max connection
cm.setMaxTotal(20);
// ""
System.setProperty("jsse.enableSNIExtension", "false");
CloseableHttpClient httpClient = builder.setSSLSocketFactory(sslsf).setConnectionManager(cm).build();
client.setHttpclient(httpClient);
return client;
}
use of org.mitre.taxii.client.HttpClient in project metron by apache.
the class TaxiiHandler method discoverPollingClient.
private static DiscoveryResults discoverPollingClient(URL proxy, URL endpoint, String username, String password, HttpClientContext context, String defaultCollection) throws Exception {
DiscoveryResults results = new DiscoveryResults();
{
HttpClient discoverClient = buildClient(proxy, username, password);
String sessionID = MessageHelper.generateMessageId();
// Prepare the message to send.
DiscoveryRequest request = messageFactory.get().createDiscoveryRequest().withMessageId(sessionID);
DiscoveryResponse response = call(discoverClient, endpoint.toURI(), request, context, DiscoveryResponse.class);
for (ServiceInstanceType serviceInstance : response.getServiceInstances()) {
if (serviceInstance.isAvailable() && serviceInstance.getServiceType() == ServiceTypeEnum.POLL) {
results.pollEndpoint = new URL(serviceInstance.getAddress());
} else if (serviceInstance.isAvailable() && serviceInstance.getServiceType() == ServiceTypeEnum.COLLECTION_MANAGEMENT) {
results.collectionManagementEndpoint = new URL(serviceInstance.getAddress());
}
}
if (results.pollEndpoint == null) {
throw new RuntimeException("Unable to discover a poll TAXII feed");
}
}
if (defaultCollection == null) // get collections
{
HttpClient discoverClient = buildClient(proxy, username, password);
String sessionID = MessageHelper.generateMessageId();
CollectionInformationRequest request = messageFactory.get().createCollectionInformationRequest().withMessageId(sessionID);
CollectionInformationResponse response = call(discoverClient, results.collectionManagementEndpoint.toURI(), request, context, CollectionInformationResponse.class);
LOG.info("Unable to find the default collection; available collections are:");
for (CollectionRecordType c : response.getCollections()) {
LOG.info(c.getCollectionName());
results.collections.add(c.getCollectionName());
}
System.exit(0);
}
return results;
}
Aggregations