java - 如何使用 .crt 证书和公共 .key 令牌发送带有 Rest Assured 的 HTTPS 请求
问题描述
我需要发送带有 REST 的 https 请求,确保有客户端.crt证书和公钥.key 如果我的证书和项目中的密钥像
"src/test/resources/certificate.crt"
"src/test/resources/key.key"
解决方案
String clientCertificatePath = "certs/ClientCertificate.p12";
String trustStorePath = "C:/Program Files/Java/jre1.8.0_91/lib/security/cacerts";
String trustStorePassword = "changeit"; // default trust store password
KeyStore clientStore = KeyStore.getInstance("PKCS12");
clientStore.load(new FileInputStream(clientCertificatePath), clientPassword.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(clientStore, clientPassword.toCharArray());
KeyManager[] kms = kmf.getKeyManagers();
KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(new FileInputStream(trustStorePath), trustStorePassword.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
TrustManager[] tms = tmf.getTrustManagers();
SSLContext sslContext = null;
sslContext = SSLContext.getInstance("TLS");
sslContext.init(kms, tms, new SecureRandom());
SSLSocketFactory lSchemeSocketFactory=null;
lSchemeSocketFactory = new SSLSocketFactory(clientStore, clientPassword, trustStore);
// configure Rest Assured
RestAssured.config = RestAssured.config().sslConfig(sslConfig().with().sslSocketFactory(lSchemeSocketFactory).and().allowAllHostnames());
推荐阅读
- json - “int”类型不是“double”类型的子类型——Dart/Flutter 错误
- spring-boot - 如何有效地测试mapstruct spring mapper?
- javascript - 工作箱后台同步 - 访问重放的 API 响应
- entity-framework - 如何使用 lambda 表达式创建内部/子查询
- android-studio - 为什么我的菜单栏没有显示在 android studio 中?
- javascript - 在加载时调用一个函数,然后在每个间隔使用 setTimeout
- amazon-web-services - Ec2 实例拒绝自定义端口上的 TCP 请求
- mysql - JOIN 中的多个 ON 子句
- android - 使用 kotlin 从 android studio 项目中的 firebase Cloud Firestore 读取和显示数据
- c# - 如何从我的 c#asp.net mvc 应用程序在 azure 上动态创建子域。?