java 通过SSL/TLS加密https建立连接

	这个项目是基于与Ruby客户端进行通信,经过查看源代码,发现对方是经过TLS加密通信。第一次调试,尝试用serversocket与对方进行沟通,可以收到数据,但是无法获取http的包头数据,因此,将先对socket通信进行处理。	

一、根据原有软件进行沟通,可以找到原来生成的rcs-db.key、rcs-db.crt文件,可知rcs-db.crt为证书,rcs-db.key为秘钥。因为并没有任何思路来处理这两个文件,我就先打开看一看。发现秘钥的内容如下:

-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQDBajNHgexQbClBGOxJgTkevfZU4R/OmI2BZUgt3DD4RNO4cXtG
...........................................................................
-----END RSA PRIVATE KEY-----

可知使用的是RSA公钥加密算法。并且根据源码可知,是用OpenSSL加密的。开始我就根据http://blog.csdn.net/chaijunkun/article/details/7275632/这篇文章所讲将公钥和私钥都解了出来,可是并不知道怎么去使用。

然后查了一下,要通过一下步骤可以将key和certificate应用在Java里面。

安装好openssl。

首先将.key、crt文件转换成.jks文件及一对公私钥存储在新建的PKCS12 keystore中。

# Create PKCS12 keystore from private key and public certificate.
openssl pkcs12 -export -name myservercert -in selfsigned.crt -inkey server.key -out keystore.p12

# Convert PKCS12 keystore into a JKS keystore
keytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias myservercert

然后可以用这个命令来查看keystore中的jks。注意这里我们将jks的别名起为myservercert。crt,p12记得加上地址。

keytool -list -v -keystore mykeystore.jks

但是要保证是自签证的证书,否则需要按此步骤顺着证书链找到可信赖的证书。

相关概念:Keytool 是一个有效的安全钥匙和证书的管理工具。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Elasticsearch的加密主要分为两种方式:SSL/TLS加密和X-Pack安全加密。下面分别介绍这两种加密方式下Java建立连接的方法: 1. SSL/TLS加密 SSL/TLS加密是通过在Elasticsearch和客户端之间建立安全连接来实现的。在Java中,可以通过添加SSL/TLS相关配置来建立安全连接。以下是一个使用SSL/TLS加密连接Elasticsearch的示例代码: ```java import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContexts; import org.elasticsearch.client.Request; import org.elasticsearch.client.Response; import org.elasticsearch.client.RestClient; import javax.net.ssl.SSLContext; import java.io.IOException; import java.security.KeyStore; import java.util.Collections; import java.util.Map; public class Main { public static void main(String[] args) throws Exception { // SSL/TLS相关配置 KeyStore truststore = null; // 可以自定义信任证书 SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(truststore, null).build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier()); // HTTP客户端相关配置 BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("username", "password")); RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(10000).build(); CloseableHttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider).setDefaultRequestConfig(requestConfig).setSSLSocketFactory(sslsf).build(); // Elasticsearch客户端相关配置 RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200, "https")).setHttpClient(httpClient).build(); // 发送请求 Map<String, String> params = Collections.singletonMap("pretty", "true"); Request request = new Request(HttpGet.METHOD_NAME, "/_cat/indices"); request.addParameters(params); Response response = restClient.performRequest(request); // 解析响应 String responseBody = EntityUtils.toString(response.getEntity()); System.out.println(responseBody); // 关闭客户端 restClient.close(); } } ``` 请注意,上述示例代码中的用户名和密码是占位符,请替换成实际的用户名和密码。另外,如果你使用的是自签名证书,需要在SSLContexts.custom()方法中传入自定义的信任证书。 2. X-Pack安全加密 X-Pack是Elasticsearch官方提供的安全插件,可以实现多种安全功能,包括身份验证、授权、加密等。在Java中,可以通过添加X-Pack安全相关配置来建立安全连接。以下是一个使用X-Pack安全加密连接Elasticsearch的示例代码: ```java import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.elasticsearch.client.Request; import org.elasticsearch.client.Response; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import java.util.Collections; import java.util.Map; public class Main { public static void main(String[] args) throws Exception { // X-Pack安全相关配置 RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "https")) .setHttpClientConfigCallback(httpClientBuilder -> { httpClientBuilder.disableAuthCaching(); return httpClientBuilder; }) .setRequestConfigCallback(requestConfigBuilder -> { requestConfigBuilder.setConnectTimeout(5000); requestConfigBuilder.setSocketTimeout(10000); return requestConfigBuilder; }) .setHttpClientConfigCallback(httpClientBuilder -> { httpClientBuilder.setDefaultCredentialsProvider(new BasicCredentialsProvider()); return httpClientBuilder; }) .setHttpClientConfigCallback(httpClientBuilder -> { httpClientBuilder.setSSLHostnameVerifier((s, sslSession) -> true); return httpClientBuilder; }) .setHttpClientConfigCallback(httpClientBuilder -> { httpClientBuilder.setDefaultCredentialsProvider(new BasicCredentialsProvider() {{ setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("username", "password")); }}); return httpClientBuilder; }); // Elasticsearch客户端相关配置 RestClient restClient = builder.build(); // 发送请求 Map<String, String> params = Collections.singletonMap("pretty", "true"); Request request = new Request(HttpGet.METHOD_NAME, "/_cat/indices"); request.addParameters(params); Response response = restClient.performRequest(request); // 解析响应 String responseBody = EntityUtils.toString(response.getEntity()); System.out.println(responseBody); // 关闭客户端 restClient.close(); } } ``` 请注意,上述示例代码中的用户名和密码是占位符,请替换成实际的用户名和密码。另外,如果你使用的是自签名证书,需要设置SSLHostnameVerifier为接受所有主机名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值