Looks like the article No more 'unable to find valid certification path to requested target' is missing from it's original location http://blogs.sun.com/andreas/entry/no_more_unable_to_find .
I am re-posting it with necessary code here:
------
Some of you may be familiar with the (not very user friendly) exception message
Certificate validation is a very important part of SSL security, but I am not writing this entry to explain the details. If you are interested, you can start by reading the Wikipedia blurb. I am writing this entry to show a simple way to talk to that host with the test certificate, if you really want to.
Basically, you want to add the server's certificate to the KeyStore with your trusted certificates. There are any number of ways to achieve that, but a simple solution is to compile and run the code pasted below as
What happened was that the program opened a connection to the specified host and started an SSL handshake. It printed the exception stack trace of the error that occured and shows you the certificates used by the server. Now it prompts you for the certificate you want to add to your trusted KeyStore. You should only do this if you are sure that this is the certificate of the trusted host you want to connect to. You may want to check the MD5 and SHA1 certificate fingerprints against a fingerprint generated on the server (e.g. using keytool) to make sure it is the correct certificate.
If you've changed your mind, enter 'q'. If you really want to add the certificate, enter '1'. (You could also add a CA certificate by entering a different certificate, but you usually don't want to do that'). Once you have made your choice, the program will print the following:
After all that, JSSE will be able to complete a handshake with the host, which you can verify by running the program again:
It displayed the complete certificate and then added it to a Java KeyStore 'jssecacerts' in the current directory. To use it in your program, either configure JSSE to use it as its trust store (as explained in the documentation) or copy it into your
After all that, JSSE will be able to complete a handshake with the host, which you can verify by running the program again:
I am re-posting it with necessary code here:
------
Some of you may be familiar with the (not very user friendly) exception message
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetwhen trying to open an SSL connection to a host using JSSE. What this usually means is that the server is using a test certificate (possibly generated using keytool) rather than a certificate from a well known commercial Certification Authority such as Verisign or GoDaddy. Web browsers display warning dialogs in this case, but since JSSE cannot assume an interactive user is present it just throws an exception by default.
Certificate validation is a very important part of SSL security, but I am not writing this entry to explain the details. If you are interested, you can start by reading the Wikipedia blurb. I am writing this entry to show a simple way to talk to that host with the test certificate, if you really want to.
Basically, you want to add the server's certificate to the KeyStore with your trusted certificates. There are any number of ways to achieve that, but a simple solution is to compile and run the code pasted below as
java InstallCert hostname
, for example:java InstallCert ecc.fedora.redhat.com Loading KeyStore /usr/jdk/instances/jdk1.5.0/jre/lib/security/cacerts... Opening connection to ecc.fedora.redhat.com:443... Starting SSL handshake... javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1476) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:168) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:846) at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:106) at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495) at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:815) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1025) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1038) at InstallCert.main(InstallCert.java:63) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:221) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:145) at sun.security.validator.Validator.validate(Validator.java:203) at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:172) at InstallCert$SavingTrustManager.checkServerTrusted(InstallCert.java:158) at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(SSLContextImpl.java:320) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:839) ... 7 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:236) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:194) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:216) ... 13 more Server sent 2 certificate(s): 1 Subject CN=ecc.fedora.redhat.com, O=example.com, C=US Issuer CN=Certificate Shack, O=example.com, C=US sha1 2e 7f 76 9b 52 91 09 2e 5d 8f 6b 61 39 2d 5e 06 e4 d8 e9 c7 md5 dd d1 a8 03 d7 6c 4b 11 a7 3d 74 28 89 d0 67 54 2 Subject CN=Certificate Shack, O=example.com, C=US Issuer CN=Certificate Shack, O=example.com, C=US sha1 fb 58 a7 03 c4 4e 3b 0e e3 2c 40 2f 87 64 13 4d df e1 a1 a6 md5 72 a0 95 43 7e 41 88 18 ae 2f 6d 98 01 2c 89 68 Enter certificate to add to trusted keystore or 'q' to quit: [1]
What happened was that the program opened a connection to the specified host and started an SSL handshake. It printed the exception stack trace of the error that occured and shows you the certificates used by the server. Now it prompts you for the certificate you want to add to your trusted KeyStore. You should only do this if you are sure that this is the certificate of the trusted host you want to connect to. You may want to check the MD5 and SHA1 certificate fingerprints against a fingerprint generated on the server (e.g. using keytool) to make sure it is the correct certificate.
If you've changed your mind, enter 'q'. If you really want to add the certificate, enter '1'. (You could also add a CA certificate by entering a different certificate, but you usually don't want to do that'). Once you have made your choice, the program will print the following:
[ [ Version: V3 Subject: CN=ecc.fedora.redhat.com, O=example.com, C=US Signature Algorithm: MD5withRSA, OID = 1.2.840.113549.1.1.4 Key: SunPKCS11-Solaris RSA public key, 1024 bits (id 5158256, session object) modulus: 1402933022884660852748661816869706021655226675890 635441166580364941191074987345500771612454338502131694873337 233737712894815966313948609351561047977102880577818156814678 041303637255354084762814638611185951230474669455913908815827 173696651397340074281578017567044868711049821409365743953199 69584127568303024757 public exponent: 65537 Validity: [From: Wed Jan 18 13:16:12 PST 2006, To: Wed Apr 18 14:16:12 PDT 2007] Issuer: CN=Certificate Shack, O=example.com, C=US SerialNumber: [ 0f] Certificate Extensions: 2 [1]: ObjectId: 2.16.840.1.113730.1.1 Criticality=false NetscapeCertType [ SSL server ] [2]: ObjectId: 2.5.29.15 Criticality=false KeyUsage [ Key_Encipherment ] ] Algorithm: [MD5withRSA] Signature: 0000: 6D F4 2A 63 76 2A 05 70 A2 21 0E 1E 4A 31 BE 6B m.*cv*.p.!..J1.k 0010: 15 64 D8 BB 35 36 82 B0 0D 2A 96 FA 7A 9F A1 59 .d..56...*..z..Y 0020: CA 90 C3 28 C5 A6 9B 59 05 3B EB B2 8D C9 5E 38 ...(...Y.;....^8 0030: 62 ED 1A D7 93 DF 2A A5 D6 54 94 23 15 A2 0C E5 b.....*..T.#.... 0040: 13 40 2C 3E 59 E4 2A EB 51 AC 9E 28 44 23 87 B1 .@,>Y.*.Q..(D#.. 0050: 34 0B AC F3 E0 39 CA B8 35 B4 78 07 BF 28 4C C4 4....9..5.x..(L. 0060: 9A 2B A3 E9 04 26 78 19 F0 62 EA 0A B5 BB DC 0B .+...&x..b...... 0070: 90 59 E7 77 90 F8 BC 8A 1B 74 4B 4D C1 F8 3B 6C .Y.w.....tKM..;l ] Added certificate to keystore 'jssecacerts' using alias 'ecc.fedora.redhat.com-1'It displayed the complete certificate and then added it to a Java KeyStore 'jssecacerts' in the current directory. To use it in your program, either configure JSSE to use it as its trust store (as explained in the documentation) or copy it into your
$JAVA_HOME/jre/lib/security
directory. If you want all Java applications to recognize the certificate as trusted and not just JSSE, you could also overwrite the cacerts
file in that directory.After all that, JSSE will be able to complete a handshake with the host, which you can verify by running the program again:
It displayed the complete certificate and then added it to a Java KeyStore 'jssecacerts' in the current directory. To use it in your program, either configure JSSE to use it as its trust store (as explained in the documentation) or copy it into your
$JAVA_HOME/jre/lib/security
directory. If you want all Java applications to recognize the certificate as trusted and not just JSSE, you could also overwrite the cacerts file in that directory.After all that, JSSE will be able to complete a handshake with the host, which you can verify by running the program again:
% java InstallCert ecc.fedora.redhat.com Loading KeyStore jssecacerts... Opening connection to ecc.fedora.redhat.com:443... Starting SSL handshake... No errors, certificate is already trusted Server sent 2 certificate(s): 1 Subject CN=ecc.fedora.redhat.com, O=example.com, C=US Issuer CN=Certificate Shack, O=example.com, C=US sha1 2e 7f 76 9b 52 91 09 2e 5d 8f 6b 61 39 2d 5e 06 e4 d8 e9 c7 md5 dd d1 a8 03 d7 6c 4b 11 a7 3d 74 28 89 d0 67 54 2 Subject CN=Certificate Shack, O=example.com, C=US Issuer CN=Certificate Shack, O=example.com, C=US sha1 fb 58 a7 03 c4 4e 3b 0e e3 2c 40 2f 87 64 13 4d df e1 a1 a6 md5 72 a0 95 43 7e 41 88 18 ae 2f 6d 98 01 2c 89 68 Enter certificate to add to trusted keystore or 'q' to quit: [1] q KeyStore not changedI hope that helps. For more information about the InstallCert program, have a look at the source code below. I am sure you can figure out how it works.
/** * Originally posted at: (not available now) * http://blogs.sun.com/andreas/resource/InstallCert.java * Use: * java InstallCert hostname * Example: *% java InstallCert ecc.fedora.redhat.com */ import javax.net.ssl.*; import java.io.*; import java.security.KeyStore; import java.security.MessageDigest; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; /** * Class used to add the server's certificate to the KeyStore * with your trusted certificates. */ public class InstallCert { public static void main(String[] args) throws Exception { String host; int port; char[] passphrase; if ((args.length == 1) || (args.length == 2)) { String[] c = args[0].split(":"); host = c[0]; port = (c.length == 1) ? 443 : Integer.parseInt(c[1]); String p = (args.length == 1) ? "changeit" : args[1]; passphrase = p.toCharArray(); } else { System.out.println("Usage: java InstallCert [:port] [passphrase]"); return; } File file = new File("jssecacerts"); if (file.isFile() == false) { char SEP = File.separatorChar; File dir = new File(System.getProperty("java.home") + SEP + "lib" + SEP + "security"); file = new File(dir, "jssecacerts"); if (file.isFile() == false) { file = new File(dir, "cacerts"); } } System.out.println("Loading KeyStore " + file + "..."); InputStream in = new FileInputStream(file); KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); ks.load(in, passphrase); in.close(); SSLContext context = SSLContext.getInstance("TLS"); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(ks); X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0]; SavingTrustManager tm = new SavingTrustManager(defaultTrustManager); context.init(null, new TrustManager[]{tm}, null); SSLSocketFactory factory = context.getSocketFactory(); System.out.println("Opening connection to " + host + ":" + port + "..."); SSLSocket socket = (SSLSocket) factory.createSocket(host, port); socket.setSoTimeout(10000); try { System.out.println("Starting SSL handshake..."); socket.startHandshake(); socket.close(); System.out.println(); System.out.println("No errors, certificate is already trusted"); } catch (SSLException e) { System.out.println(); e.printStackTrace(System.out); } X509Certificate[] chain = tm.chain; if (chain == null) { System.out.println("Could not obtain server certificate chain"); return; } BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.println(); System.out.println("Server sent " + chain.length + " certificate(s):"); System.out.println(); MessageDigest sha1 = MessageDigest.getInstance("SHA1"); MessageDigest md5 = MessageDigest.getInstance("MD5"); for (int i = 0; i < chain.length; i++) { X509Certificate cert = chain[i]; System.out.println (" " + (i + 1) + " Subject " + cert.getSubjectDN()); System.out.println(" Issuer " + cert.getIssuerDN()); sha1.update(cert.getEncoded()); System.out.println(" sha1 " + toHexString(sha1.digest())); md5.update(cert.getEncoded()); System.out.println(" md5 " + toHexString(md5.digest())); System.out.println(); } System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]"); String line = reader.readLine().trim(); int k; try { k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1; } catch (NumberFormatException e) { System.out.println("KeyStore not changed"); return; } X509Certificate cert = chain[k]; String alias = host + "-" + (k + 1); ks.setCertificateEntry(alias, cert); OutputStream out = new FileOutputStream("jssecacerts"); ks.store(out, passphrase); out.close(); System.out.println(); System.out.println(cert); System.out.println(); System.out.println ("Added certificate to keystore 'jssecacerts' using alias '" + alias + "'"); } private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray(); private static String toHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(bytes.length * 3); for (int b : bytes) { b &= 0xff; sb.append(HEXDIGITS[b >> 4]); sb.append(HEXDIGITS[b & 15]); sb.append(' '); } return sb.toString(); } private static class SavingTrustManager implements X509TrustManager { private final X509TrustManager tm; private X509Certificate[] chain; SavingTrustManager(X509TrustManager tm) { this.tm = tm; } public X509Certificate[] getAcceptedIssuers() { throw new UnsupportedOperationException(); } public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { throw new UnsupportedOperationException(); } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { this.chain = chain; tm.checkServerTrusted(chain, authType); } } }
nice post... does it work the same when in a mobile device running OSGi?
ReplyDeleteive got a post here: http://stackoverflow.com/questions/10564410/how-to-programatically-set-up-ssl-on-a-mobile-device-with-osgi,
maybe you can help, thanks...
Hello, I used your example and it successfully added the cert to the keystore. However, when I ran the code a second time to ensure it completed handshake with the host. I got this error message.
ReplyDeleteLoading KeyStore jssecacerts...
Opening connection to staging.etz.com:443...
Starting SSL handshake...
javax.net.ssl.SSLException: Received fatal alert: bad_record_mac
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1586)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:865)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1056)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1040)
at installcert.InstallCert.main(InstallCert.java:76)
I eventually managed to remove the bad_record_mac, by specifying appropriate SSLProtocal parameter in my Apache httpd-ssl.conf file, I also enable the SSLCipherSuite ECDHE-RSA-AES256-SHA384:AES256-SHA256:HIGH:!RC4:!MD5:!aNULL:!EDH:!AESGCM
ReplyDeleteNow the error message I am getting is below. I haven't been able to figure out how to resolve this. i will appreciate any contribution. Thanks.
Starting SSL handshake...
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1586)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:865)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1056)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1040)
at installcert.InstallCert.main(InstallCert.java:76)
Server sent 1 certificate(s):
This comment has been removed by the author.
ReplyDeleteHello,
ReplyDeletenice post, but I get an error running the programm the second time.
I use JDK1.7.0.40
Starting SSL handshake...
javax.net.ssl.SSLException: java.lang.UnsupportedOperationException
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.SSLSocketImpl.handleException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at install.cert.InstallCert.main(InstallCert.java:106)
Caused by: java.lang.UnsupportedOperationException
at install.cert.InstallCert$SavingTrustManager.getAcceptedIssuers(InstallCert.java:199)
at sun.security.ssl.AbstractTrustManagerWrapper.checkAlgorithmConstraints(Unknown Source)
at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(Unknown Source)
at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
... 3 more
Server sent 1 certificate(s):
Override
Deletepublic X509Certificate[] getAcceptedIssuers() {
throw new UnsupportedOperationException();
}
with
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
This comment has been removed by the author.
DeleteI got following exception. Please help me how to slove.
DeleteCaused by: javax.net.ssl.SSLException: java.lang.UnsupportedOperationException
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1747)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1708)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1691)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1222)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:318)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:253)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:153)
... 36 more
Caused by: java.lang.UnsupportedOperationException
at java.security.cert.CertificateFactorySpi.engineGenerateCertPath(CertificateFactorySpi.java:162)
at java.security.cert.CertificateFactory.generateCertPath(CertificateFactory.java:387)
at sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:273)
at sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:263)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:173)
at sun.security.validator.Validator.validate(Validator.java:218)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1188)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:135)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
Hi surya, and what did you do before getting this exception?
DeleteHello
ReplyDeleteI have found this..
"Could not find or load main class InstallCert"
Shahin, you need to compile the Java file and then you can run it
ReplyDelete"C:\Program Files\Java\jdk1.6.0_26\bin\javac.exe" -d "C:\Users\Scott\workspace\myrepo\my-app\target\classes" "C:\Users\Scott\workspace\myrepo\my-app\src\main\java\com\mycompany\myapp\JNICPPKeySender.java"
"C:\Program Files\Java\jdk1.6.0_26\bin\java.exe" -classpath "C:\Users\Scott\workspace\myrepo\my-app\target\classes" com.mycompany.myapp.JNICPPKeySender
See http://scottizu.wordpress.com/2013/09/09/incorporating-jni-using-a-top-down-approach/ for more help on this and more examples.
From the command line (using Git Bash), I went to my project directory (which contained pom.xml) and ran:
java -classpath "target\classes" com.org.restClient.InstallCert "jirap.org.com:443"
You can replace the java, compiled Java location with the full path if desired.
Solution to javax.net.ssl.SSLException: java.lang.UnsupportedOperationException
ReplyDeletecan be found here http://infposs.blogspot.ca/2013/06/installcert-and-java-7.html
IT states that you need to modify the InstallCert.java file and recompile it for Java7.
Worked like a charm for me.
An advanced InstallCert version exists that allows certificate collection not only from servers that speak plain SSL/TLS, but also from those who use SSL/TLS with STARTTLS technique. See my blog page for details and downloads: http://s-n-ushakov.blogspot.com/2013/11/yet-another-installcert-for-java-now.html
ReplyDelete4 years + since this article was published, yet it still rings relevant.
ReplyDeleteThis helped me fix a SSL connection issue from TomCat to AD over LDAPS.
Thank you!
I have come here as I was getting the error "unable to find valid..." from my Java application. I have compiled and run the code you have given with the fix for getAcceptedIssuers, as given in one of the comments. However, one thing I am still not clear is that the HTTP url which was throwing error, works fine in the same machine from a different application, like chrome, then why only java has the issue?
ReplyDeleteشركة تنظيف شقق بالرياض http://url.ie/13xn5 التنظيف ليس أمر عابر أو أمر من أمور الرفاهية فهو من أساسيات الحياة وطالما حافظت علي منزلك نظيف خالي من الأتربة والرواسب ستحافظ علي حياتك خالية من كافة الأمراض المختلفة
ReplyDeleteمتلك اسطول عمالة ذوى خبرة كبيرة حيث يعمل معنا منذ فترة طويلة خبرتة الكبيرة التى اكتسبها والأمانة التى يتصف بها جعلتنا فى صدارة شركات التنظيف.يقوم فريق العمالة بتقسيم نفسة الى اكثر من فريق ليعلم كل واحد منهم مهمتة ويؤديها بإتقان يتحرى الدقة طوال مراحل العمل
لوجود مشرف يتمم على عملية التنظيف. فريق يقوم بتنظيف غرف النوم وفريق اخر مهمتة تنظيف غرف المعيشة والاخر لتنظيف المطابخ والحمامات
لن يخرج فريق العمل الا بعد ان يسلمك بيت نظيف خالى تماما من اى اتربة او غبار ومطبخ نظيف تماما خالى من الدهون والزيوت .
كما ستبقى النظافة سلوك طبيعي دوري بالنسبة إليك ولذلك فشركة دريم هاوس تقدم كل خدماتها الخاصة بالنظافة وذلك حرصا منها علي نظافة وصحة العملاء كما توفر كل هذا من خلال طريقة مميزة ومحترفة جدا في التنظيف بشكل عام .… اقرأ المزيد
المصدر: شركة تنظيف شقق بالرياض
شركة مكافحة الفئران بالرياض http://url.ie/13xre أصبح يوجد الكثير من شركات مكافحة الفئران في الرياض ، التي تعمل في القضاء على أي نوع من الحشرات سواء كان قوارض أو زاحفه أو طائره بشكل نهائي، و نظراً لكثره شكاوي مدينه الرياض من الفئران والقوارض.
فقد قررت الشركة على أن تكثف اهتماماتها بأعمال مكافحة الفئران و القضاء على مشكله القوارض المزعجة بشكل نهائي.
كما أن حرصت شركة مكافحة فئران بالرياض على أن توفر طرق تساعد على التخلص من كافة أنواع الفئران بأحجامها المختلفة.
لأننا جميعاً نعلم أن تواجد القوارض في المنزل من أكثر الأشياء التي تسبب للسيدة الرعب والفزع، ولكل للموجودين بالمنزل وبالأخص الأطفال ومن المعروف أن الفئران من القوارض التي تقوم بتخريب المنزل وتقضي على الأخضر واليابس بها عن طريق على تدمير الأثاث الخشبي والطعام لذا حرصت الركة علي ان تخلصك من كل هذه المشكلة في أسرع وقت ممكن فبادر بالاتصال بها. … اقرأ المزيد
المصدر: شركة مكافحة الفئران بالرياض
افضل شركة جلي بلاط بالرياض http://url.ie/13xn3 لا شك أن رونق البلاط أو الرخام يساهم في تحسين المظهر في الفلل والقصور كما يضفي بريقا لامعا على مظهرها مما يعني أن اتساخها و تغطيتها بالأتربة يجعلها تفقد ذلك البريق .
تقدم شركتنا أفضل خدمة لجلي البلاط والرخام وإعادة مظهره اللامع والبراق له مع توظيف كافة المعدات الحديثة لديها و أمهر عمالة مدربة على هذا الغرض .
للشركة باع طويلة وخبرة سابقة في تنظيف الرخام والبلاط للفلل والقصور والمنازل ومداخل الشركات والمكاتب والمؤسسات
لسنا الوحيدين لكننا الأفضل في عالم جلي الرخام والبلاط وإعادة مظهره البراق ولمعته وبدون تجريحه أو خدشه وهذا سر تميزنا عن باقي الشركات … اقرأ المزيد
المصدر: شركة جلي بلاط بالرياض
great little utility. Just remember to ALWAYS use proper certificates in PRODUCTION environments
ReplyDelete