双向https接口实现 java
时间: 2024-01-02 13:22:14 浏览: 27
双向HTTPS接口实现的Java代码示例如下:
```java
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.security.KeyStore;
import java.security.SecureRandom;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;
public class TwoWayHttpsDemo {
public static void main(String[] args) throws Exception {
// 设置SSL证书路径和密码
String keyStorePath = "/path/to/keystore.jks";
String keyStorePassword = "password";
String trustStorePath = "/path/to/truststore.jks";
String trustStorePassword = "password";
// 加载SSL证书
KeyStore keyStore = KeyStore.getInstance("JKS");
KeyStore trustStore = KeyStore.getInstance("JKS");
try (InputStream keyStoreInputStream = new FileInputStream(keyStorePath);
InputStream trustStoreInputStream = new FileInputStream(trustStorePath)) {
keyStore.load(keyStoreInputStream, keyStorePassword.toCharArray());
trustStore.load(trustStoreInputStream, trustStorePassword.toCharArray());
}
// 初始化KeyManagerFactory和TrustManagerFactory
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, keyStorePassword.toCharArray());
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trustStore);
// 初始化SSL上下文
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());
// 获取SSLSocketFactory
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
// 发送HTTPS请求
URL url = new URL("https://example.com/api");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(sslSocketFactory);
connection.setRequestMethod("POST");
connection.setDoOutput(true);
// 发送请求数据
String requestData = "Hello, server!";
try (OutputStream outputStream = connection.getOutputStream()) {
outputStream.write(requestData.getBytes());
}
// 接收响应数据
StringBuilder response = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
}
// 输出响应数据
System.out.println("Response: " + response.toString());
// 关闭连接
connection.disconnect();
}
}
```
请注意,上述代码中的`/path/to/keystore.jks`和`/path/to/truststore.jks`需要替换为实际的SSL证书路径。此外,还需要提供正确的证书密码。