当前位置:   article > 正文

https证书认证-java_java generateprivatekeyfromder rsa

java generateprivatekeyfromder rsa

1.首先要确认是双向认证还是单向认证,如果是只需要对服务端的单向认证,则只需要用到根证书,应该就是这里的ca.crt。如果是双向认证,三个都需要用到。如果是java代码作为客户端连接

2.单向认证是客户端根据ca根证书验证服务端提供的服务端证书和私钥

  1. public static String httpGET(String url, String pemPath, String keypath) {
  2. // 加载证书
  3. try {
  4. SSLConnectionSocketFactory sslsf =getSocketFactoryPEM(pemPath, keypath);
  5. httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
  6. } catch (Exception e) {
  7. logger.error(e);
  8. }
  9. String result = null;
  10. HttpGet httpGet = new HttpGet(url);
  11. // 得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别
  12. // httpGet.addHeader("Content-Type", "text/xml");
  13. // 根据默认超时限制初始化requestConfig
  14. requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();
  15. // 设置请求器的配置
  16. httpGet.setConfig(requestConfig);
  17. try {
  18. HttpResponse response = null;
  19. try {
  20. response = httpClient.execute(httpGet);
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. }
  24. HttpEntity entity = response.getEntity();
  25. try {
  26. result = EntityUtils.toString(entity, "UTF-8");
  27. } catch (IOException e) {
  28. e.printStackTrace();
  29. logger.error(e);
  30. }
  31. } finally {
  32. httpGet.abort();
  33. }
  34. return result;
  35. }
  1. protected static SSLConnectionSocketFactory getSocketFactoryPEM(String pemPath,String keypath) throws Exception {
  2. byte[] pem = fileToBytes(pemPath);
  3. byte[] pemKey = fileToBytes(keypath);
  4. byte[] certBytes = parseDERFromPEM(pem, "-----BEGIN CERTIFICATE-----", "-----END CERTIFICATE-----");
  5. byte[] keyBytes = parseDERFromPEM(pemKey, "-----BEGIN PRIVATE KEY-----", "-----END PRIVATE KEY-----");
  6. X509Certificate cert = generateCertificateFromDER(certBytes);
  7. RSAPrivateKey key = generatePrivateKeyFromDER(keyBytes);
  8. KeyStore keystore = KeyStore.getInstance("JKS");
  9. keystore.load(null);
  10. keystore.setCertificateEntry("cert-alias", cert);
  11. keystore.setKeyEntry("key-alias", key, "123".toCharArray(), new Certificate[] {cert});
  12. KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
  13. kmf.init(keystore, "123".toCharArray());
  14. KeyManager[] km = kmf.getKeyManagers();
  15. SSLContext context = SSLContext.getInstance("TLS");
  16. context.init(km, null, null);
  17. SSLConnectionSocketFactory sslsf =
  18. new SSLConnectionSocketFactory(context,null, null,
  19. SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
  20. return sslsf;
  21. }
  22. public static byte[] parseDERFromPEM(byte[] pem, String beginDelimiter, String endDelimiter) {
  23. String data = new String(pem);
  24. String[] tokens = data.split(beginDelimiter);
  25. tokens = tokens[1].split(endDelimiter);
  26. return DatatypeConverter.parseBase64Binary(tokens[0]);
  27. }
  28. public static RSAPrivateKey generatePrivateKeyFromDER(byte[] keyBytes) throws InvalidKeySpecException, NoSuchAlgorithmException {
  29. PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
  30. KeyFactory factory = KeyFactory.getInstance("RSA");
  31. return (RSAPrivateKey)factory.generatePrivate(spec);
  32. }
  33. public static X509Certificate generateCertificateFromDER(byte[] certBytes) throws CertificateException {
  34. CertificateFactory factory = CertificateFactory.getInstance("X.509");
  35. return (X509Certificate)factory.generateCertificate(new ByteArrayInputStream(certBytes));
  36. }
  37. public static byte[] fileToBytes(String filePath) {
  38. byte[] buffer = null;
  39. File file = new File(filePath);
  40. FileInputStream fis = null;
  41. ByteArrayOutputStream bos = null;
  42. try {
  43. fis = new FileInputStream(file);
  44. bos = new ByteArrayOutputStream();
  45. byte[] b = new byte[1024];
  46. int n;
  47. while ((n = fis.read(b)) != -1) {
  48. bos.write(b, 0, n);
  49. }
  50. buffer = bos.toByteArray();
  51. } catch (FileNotFoundException ex) {
  52. ex.printStackTrace();
  53. } catch (IOException ex) {
  54. ex.printStackTrace();
  55. } finally {
  56. try {
  57. if (null != bos) {
  58. bos.close();
  59. }
  60. } catch (IOException ex) {
  61. } finally{
  62. try {
  63. if(null!=fis){
  64. fis.close();
  65. }
  66. } catch (IOException ex) {
  67. ex.printStackTrace();
  68. }
  69. }
  70. }
  71. return buffer;
  72. }

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/732685
推荐阅读
相关标签
  

闽ICP备14008679号