In the past to bypass the SSL security check in Jython I have used the example published at jython.xhaus.com. Unfortunately this doesn’t work anymore with Java 8 and Jython 2.7.0. Luckily I found a solution for Java at log.rowanto.com. Now I only had to transform this into a solution for Jython. This can be seen below.
Disclaimer: bypassing the SSL security check is not what you normally should do. Use it at your own risk.
Put the MyProvider code into a file MyProvider.java. Compile it, create a jar-file of it and put it into your Jython classpath. Then use it in your Jython program as showed below. For this I have used the Eclipse IDE with the Jython PyDev plugin.
import java.net.Socket; import java.security.KeyStore; import java.security.Provider; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.ManagerFactoryParameters; import javax.net.ssl.SSLEngine; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactorySpi; import javax.net.ssl.X509ExtendedTrustManager; public class MyProvider extends Provider { public MyProvider() { super("MyProvider", 1.0, "Trust certificates"); put("TrustManagerFactory.TrustAllCertificates", MyTrustManagerFactory.class.getName()); } public static class MyTrustManagerFactory extends TrustManagerFactorySpi { public MyTrustManagerFactory() {} protected void engineInit( KeyStore keystore ) {} protected void engineInit(ManagerFactoryParameters mgrparams ) {} protected TrustManager[] engineGetTrustManagers() { return new TrustManager[] { new X509ExtendedTrustManager() { @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {} @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {} @Override public X509Certificate[] getAcceptedIssuers() { return null; } @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {} @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {} @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {} @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {} } }; } } }
import java.security.Security import MyProvider # Install the all-trusting trust manager java.security.Security.addProvider(MyProvider()) java.security.Security.setProperty("ssl.TrustManagerFactory.algorithm", "TrustAllCertificates") # Your code