微众对接机制备忘

对接秘钥备忘

走了太多弯路,没有一个攻略,实在是太难了

  • 对接平台提供
    server.csr
    server.key
  • 微众返回
    trustca.jks
    WeBank_DEV_CA.crt
    haha.crt
    haha.csr
    haha.jks
    haha.key
    haha.p12
根据命令行可得
haha.crt + server.key => haha.p12  
haha.p12 => haha.jks

  • 微众给的crt,和我自己的key文件,生成p12文件
    openssl pkcs12 -export -in haha.crt -inkey server.key -out haha.p12 -name haha -CAfile myCA.crt

输入密码是a123456(各自定义),要重复一次,还会报错,但是不要紧,p12文件出来就行
name 别名和cafile都无关紧要

报错信息,其实不要紧

Enter Export Password:
Verifying - Enter Export Password:
Verify failure
Can't read Password
  • p12 生成jks
    keytool -importkeystore -srckeystore haha.p12 -srcstoretype PKCS12 -srcstorepass a123456 -deststoretype JKS -destkeystore haha.jks -deststorepass b123456

这样密码就是a123456,b123456,也可以设一样的,各自随意

题外话: jks可以和p12互转。
jks可以转成cer文件(有的网站直接可以导出cer),cer再导入jre,理论上不需要代码里面再提现这方面内容,当然这里没有验证过

  • 或者直接用微众返回的 haha.jks
    默认密码 Abcd1234(测试环境已证实)

代码示例

public CloseableHttpClient initHttpClient() {
        CloseableHttpClient httpClient = null;
        try {
            KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            //加载证书文件
            FileInputStream instream = new FileInputStream(new File(webankConf.getCertPath()));//jks导入
            
            try {
            //这里是storepass  b123456
                keyStore.load(instream, "Abcd1234".toCharArray());
                
            } finally {
                instream.close();
            }
            // 这里是源密码,a123456
            SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, "Abcd1234".toCharArray()).build();
            
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext,
                    SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
            httpClient = HttpClients.custom()
                    .setSSLSocketFactory(sslsf)
                    .build();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (CertificateException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (UnrecoverableKeyException e) {
            e.printStackTrace();
        }
        return httpClient;
    }
    

你可能感兴趣的:(java,java)