解决客户端证书验证通不过问题
背景:
三方https接口提供方需要对我们客户端证书做认证,这是我们服务器里面导入client.p12证书,发给三方一个client.cer公钥验证。
生成客户端证书
1. 生成客户端证书库
keytool -validity 3650 -genkeypair -v -alias client -keyalg RSA -storetype PKCS12 -keystore /Users/zhengyong/test/client.p12 -dname "CN=client,OU=zhengyong,O= zhengyong,L=HANGZHOU,ST=ZHEJIANG,c=cn" -storepass 123456 -keypass 123456结果:正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 3,650 天):
CN=client, OU=zhengyong, O=zhengyong, L=HANGZHOU, ST=ZHEJIANG, C=cn
[正在存储/Users/zhengyong/test/client.p12]2. 生成客户端证书keytool -export -v -alias client -keystore /Users/zhengyong/test/client.p12 -storetype PKCS12 -storepass 123456 -rfc -file /Users/zhengyong/test/client.cer结果:存储在文件 </Users/zhengyong/test/client.cer> 中的证书
调用:
/**
* 获取客户端认证文件
* @return
*/
public KeyStore getKeyStore() {
KeyStore ks = null;
InputStream in = null;
URL url = CommonHttpServiceClient.class.getClassLoader().getResource(CERTIFICATION_STORE);
if(null == url){
logger.warn("Loading KeyStore url null {}");
return null;
}
String address = url.getPath();
try {
logger.info("Loading KeyStore {}...", address);
File file = new File(address);
in = new FileInputStream(file);
ks = KeyStore.getInstance(CERTIFICATION_TYPE);
ks.load(in, CERTIFICATION_PASSWORD.toCharArray());
} catch (Exception e) {
logger.error("Loading KeyStore error.", e);
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
logger.error("close Loading KeyStore InputStream error.", e);
}
}
}
return ks;
} SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(null,
new TrustSelfSignedStrategy()).loadKeyMaterial(getKeyStore(), CERTIFICATION_PASSWORD.toCharArray())
.build();
如果遇见异常:原因是因为maven打包对证书进行了utf-8编码,导致证书出了问题
javax.net.ssl.SSLKeyException: BAD_CERTIFICATE
解决办法
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
<!-- specify UTF-8, ISO-8859-1 or any other file encoding -->
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>p12</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
本文介绍如何使用keytool生成客户端证书,并通过配置Maven解决证书验证失败的问题。具体步骤包括生成客户端证书库、导出证书文件及配置Maven资源插件。
2014

被折叠的 条评论
为什么被折叠?



