1. Loading KeyStore C:\Tool\jdk1.7.0_71\jre\lib\security\jssecacerts...
  2. Opening connection to www.google.com:443...
  3. Starting SSL handshake...
  4.  
  5. javax.net.ssl.SSLException: java.lang.UnsupportedOperationException
  6. at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
  7. at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
  8. at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1842)
  9. at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1825)
  10. at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1346)
  11. at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
  12. at InstallCert.main(InstallCert.java:73)
  13. Caused by: java.lang.UnsupportedOperationException
  14. at InstallCert$SavingTrustManager.getAcceptedIssuers(InstallCert.java:159)
  15. at sun.security.ssl.AbstractTrustManagerWrapper.checkAlgorithmConstraints(SSLContextImpl.java:926)
  16. at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(SSLContextImpl.java:872)
  17. at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:814)
  18. at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1421)
  19. at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:209)
  20. at sun.security.ssl.Handshaker.processLoop(Handshaker.java:878)
  21. at sun.security.ssl.Handshaker.process_record(Handshaker.java:814)
  22. at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
  23. at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
  24. at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
  25. ... 2 more
  26.  
  27. Server sent 1 certificate(s):
  28.  
  29. 1 Subject CN=www.amazon.com, OU=Cyber, O=Amazon, L=Newark, ST=NY, C=US
  30. Issuer CN=www.amazon.com, OU=Cyber, O=Amazon, L=Newark, ST=NY, C=US
  31. sha1 c4 1e 51 d5 ae e6 e5 0b 34 5b 99 24 39 8c df e7 2e 57 77 5d
  32. md5 6d 89 00 ac 2e 72 71 c2 9a 95 7b 6c f2 1d bd 26
  33.  
  34. Enter certificate to add to trusted keystore or 'q' to quit: [1]

Error Info

  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStream;
  8. import java.security.KeyStore;
  9. import java.security.MessageDigest;
  10. import java.security.cert.CertificateException;
  11. import java.security.cert.X509Certificate;
  12.  
  13. import javax.net.ssl.SSLContext;
  14. import javax.net.ssl.SSLException;
  15. import javax.net.ssl.SSLSocket;
  16. import javax.net.ssl.SSLSocketFactory;
  17. import javax.net.ssl.TrustManager;
  18. import javax.net.ssl.TrustManagerFactory;
  19. import javax.net.ssl.X509TrustManager;
  20.  
  21. public class InstallCert {
  22.  
  23. public static void main(String[] args) throws Exception {
  24. args[0]="www.google.com";
  25. String host;
  26. int port;
  27. char[] passphrase;
  28. //System.setProperty("javax.net.ssl.trustStore", "C:\\Users\\PL62716\\workspace\\urlAutoConnect\\jssecacerts");
  29. if ((args.length == 1) || (args.length == 2)) {
  30. String[] c = args[0].split(":");
  31. host = c[0];
  32. port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
  33. String p = (args.length == 1) ? "changeit" : args[1];
  34. passphrase = p.toCharArray();
  35. } else {
  36. System.out
  37. .println("Usage: java InstallCert <host>[:port] [passphrase]");
  38. return;
  39. }
  40.  
  41. File file = new File("jssecacerts");
  42. if (file.isFile() == false) {
  43. char SEP = File.separatorChar;
  44. File dir = new File(System.getProperty("java.home") + SEP + "lib"
  45. + SEP + "security");
  46. file = new File(dir, "jssecacerts");
  47. if (file.isFile() == false) {
  48. file = new File(dir, "cacerts");
  49. }
  50. }
  51. System.out.println("Loading KeyStore " + file + "...");
  52. InputStream in = new FileInputStream(file);
  53. KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
  54. ks.load(in, passphrase);
  55. in.close();
  56.  
  57. SSLContext context = SSLContext.getInstance("TLS");
  58. TrustManagerFactory tmf = TrustManagerFactory
  59. .getInstance(TrustManagerFactory.getDefaultAlgorithm());
  60. tmf.init(ks);
  61. X509TrustManager defaultTrustManager = (X509TrustManager) tmf
  62. .getTrustManagers()[0];
  63. SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
  64. context.init(null, new TrustManager[] { tm }, null);
  65. SSLSocketFactory factory = context.getSocketFactory();
  66.  
  67. System.out
  68. .println("Opening connection to " + host + ":" + port + "...");
  69. SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
  70. socket.setSoTimeout(10000);
  71. try {
  72. System.out.println("Starting SSL handshake...");
  73. socket.startHandshake();
  74. socket.close();
  75. System.out.println();
  76. System.out.println("No errors, certificate is already trusted");
  77. } catch (SSLException e) {
  78. System.out.println();
  79. e.printStackTrace(System.out);
  80. }
  81.  
  82. X509Certificate[] chain = tm.chain;
  83. if (chain == null) {
  84. System.out.println("Could not obtain server certificate chain");
  85. return;
  86. }
  87.  
  88. BufferedReader reader = new BufferedReader(new InputStreamReader(
  89. System.in));
  90.  
  91. System.out.println();
  92. System.out.println("Server sent " + chain.length + " certificate(s):");
  93. System.out.println();
  94. MessageDigest sha1 = MessageDigest.getInstance("SHA1");
  95. MessageDigest md5 = MessageDigest.getInstance("MD5");
  96. for (int i = 0; i < chain.length; i++) {
  97. X509Certificate cert = chain[i];
  98. System.out.println(" " + (i + 1) + " Subject "
  99. + cert.getSubjectDN());
  100. System.out.println(" Issuer " + cert.getIssuerDN());
  101. sha1.update(cert.getEncoded());
  102. System.out.println(" sha1 " + toHexString(sha1.digest()));
  103. md5.update(cert.getEncoded());
  104. System.out.println(" md5 " + toHexString(md5.digest()));
  105. System.out.println();
  106. }
  107.  
  108. System.out
  109. .println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
  110. String line = reader.readLine().trim();
  111. int k;
  112. try {
  113. k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
  114. } catch (NumberFormatException e) {
  115. System.out.println("KeyStore not changed");
  116. return;
  117. }
  118.  
  119. X509Certificate cert = chain[k];
  120. String alias = host + "-" + (k + 1);
  121. ks.setCertificateEntry(alias, cert);
  122.  
  123. OutputStream out = new FileOutputStream("jssecacerts");
  124. ks.store(out, passphrase);
  125. out.close();
  126.  
  127. System.out.println();
  128. System.out.println(cert);
  129. System.out.println();
  130. System.out
  131. .println("Added certificate to keystore 'jssecacerts' using alias '"
  132. + alias + "'");
  133. }
  134.  
  135. private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();
  136.  
  137. private static String toHexString(byte[] bytes) {
  138. StringBuilder sb = new StringBuilder(bytes.length * 3);
  139. for (int b : bytes) {
  140. b &= 0xff;
  141. sb.append(HEXDIGITS[b >> 4]);
  142. sb.append(HEXDIGITS[b & 15]);
  143. sb.append(' ');
  144. }
  145. return sb.toString();
  146. }
  147.  
  148. private static class SavingTrustManager implements X509TrustManager {
  149.  
  150. private final X509TrustManager tm;
  151. private X509Certificate[] chain;
  152.  
  153. SavingTrustManager(X509TrustManager tm) {
  154. this.tm = tm;
  155. }
  156.  
  157. public X509Certificate[] getAcceptedIssuers() {
  158. //return new X509Certificate[0];
  159. throw new UnsupportedOperationException();
  160. }
  161.  
  162. public void checkClientTrusted(X509Certificate[] chain, String authType)
  163. throws CertificateException {
  164. throw new UnsupportedOperationException();
  165. }
  166.  
  167. public void checkServerTrusted(X509Certificate[] chain, String authType)
  168. throws CertificateException {
  169. this.chain = chain;
  170. tm.checkServerTrusted(chain, authType);
  171. }
  172. }
  173.  
  174. }

Java Code

Resolve method :

  1. public X509Certificate[] getAcceptedIssuers() {
  2. return new X509Certificate[0];
  3. //throw new UnsupportedOperationException();
  4. }

Override getAcceptedIssuers Method

Normal log :

  1. Loading KeyStore C:\Tool\jdk1.7.0_71\jre\lib\security\jssecacerts...
  2. Opening connection to www.google.com:443...
  3. Starting SSL handshake...
  4.  
  5. No errors, certificate is already trusted
  6.  
  7. Server sent 1 certificate(s):
  8.  
  9. 1 Subject CN=www.amazon.com, OU=Cyber, O=Amazon, L=Newark, ST=NY, C=US
  10. Issuer CN=www.amazon.com, OU=Cyber, O=Amazon, L=Newark, ST=NY, C=US
  11. sha1 c4 1e 51 d5 ae e6 e5 0b 34 5b 99 24 39 8c df e7 2e 57 77 5d
  12. md5 6d 89 00 ac 2e 72 71 c2 9a 95 7b 6c f2 1d bd 26
  13.  
  14. Enter certificate to add to trusted keystore or 'q' to quit: [1]

Issue Fixed Log

javax.net.ssl.SSLException: java.lang.UnsupportedOperationException的更多相关文章

  1. 微信证书 javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

    这几天在做微信退款接口,按照api写完之后,在本地测试了下没有问题,于是交给测试让他们在测试环境开测.他们说退款没有成功,感觉去查日志,发现后台报了 javax.net.ssl.SSLExceptio ...

  2. 解决 javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair

    解决这个异常的重点就在于下载两个jar包: bcprov-ext-jdk15on-1.52 bcprov-jdk15on-1.52 传送门:https://stackoverflow.com/ques ...

  3. presto——java.sql.SQLException: Error executing query与javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?异常问题

    使用presto的时候以mysql为presto的数据源 安装的presto是0.95版本:使用的presto-jdbc是0.202的,这里使用jdbc去访问时候,connection可以链接成功,但 ...

  4. JAVA连接MySQ报错:Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version

    Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version at sun.security.ssl.Al ...

  5. SO2O連接報錯javax.net.ssl.SSLException: Received fatal alert: protocol_version)

    原文:https://blog.csdn.net/gudejundd/article/details/89640741 1.什么是TLSSSL 是“Secure Sockets Layer”的缩写,中 ...

  6. java.lang.UnsupportedOperationException: Not supported by BasicDataSource

    场景: SpringMVC+Hibernate+Maven 问题: 在src/main/resources 目录中添加hibernate.properties文件, 则如果存在这句hibernate. ...

  7. java.lang.UnsupportedOperationException:This parser does not support specification "null" version "null"

    java.lang.UnsupportedOperationException: This parser does not support specification "null" ...

  8. 【java】在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException

    场景: 在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException 错误: java.lang ...

  9. Cause: java.lang.UnsupportedOperationException

    运行web项目的时候出现以下错误: ### Cause: java.lang.UnsupportedOperationException    at org.mybatis.spring.MyBati ...

随机推荐

  1. 在 Windows 下部署 Go 语言环境

    http://bbs.chinaunix.net/thread-4088281-1-1.html 1. 首先下载官方二进制安装包:32 位选择 windows-386.msi64 位选择 window ...

  2. sqlachemy 使用实例

    sqlachemy 是python中关于sql的ORM,他的存在可以消除底层sql引擎的差异,同事也避免了复杂繁琐的sql语句,因此我们在比较大的应用时常使用它,下面是我写的一个例子 #!/usr/b ...

  3. pfsense下的流量管理(转)

    http://www.pppei.net/blog/post/331 在作流量管理时,这些概念很重要,不要迷失.. 这里再对Limiter 的源地址和目的地址做个说明,因为limiter是被应用在La ...

  4. c++之命名空间namespace

    1命名空间解决全局变量的冲突 main.h文件 #pragma once // data命名空间的名称 namespace data { ;//外部全局变量冲突 } main.cpp #include ...

  5. 初入Python继承

    1.什么是继承? 新类不用从头编写 新类从现有的类继承,就自动拥有了现有类的所有功能 新类只需要编写现有类缺少的新功能 2.继承的好处 复用已有代码 自动拥有了现有类的所有功能 只需要编写缺少的新功能 ...

  6. QT5 r 加入qwtplot3d 三维库

          qwtplot3d是基于QtOpenGL开发的,也是qwt库的三维库,我使用的是qwtplot3d-0.2.7.zip版本.   步骤跟编译qwt库一样(不明白可以看回前面写的一篇文章“Q ...

  7. gnuplot常用技巧

      一.         基础篇: 在linux命令提示符下运行gnuplot命令启动,输入quit或q或exit退出. 1.plot命令 gnuplot> plot sin(x) with l ...

  8. IPMI 配置BMC用户设置

    IPMI 配置BMC用户设置 本文档共介绍5条ipmi设置user的命令,这些命令需要使用root权限才能使用,其中- H为需要操作的BMC ip,-I lanplus为使用rmcp+协议发送命令,- ...

  9. Csharp 高级编程 C7.1.2(2)

    C#2.0  使用委托推断扩展委托的语法下面是示例  一个货币结构 代理的方法可以是实例的方法,也可以是静态方法,声明方法不同 实例方法可以使用委托推断,静态方法不可以用 示例代码: /* * C#2 ...

  10. Android发送通知栏通知

    /** * 发送通知 * * @param message */ @SuppressWarnings("deprecation") @SuppressLint("NewA ...