Newer
Older
ultramine_bootstrap / src / main / java / org / ultramine / bootstrap / util / UmSslUtil.java
@vlad20012 vlad20012 on 31 Jul 2017 1 KB Initial commit
package org.ultramine.bootstrap.util;

import org.ultramine.bootstrap.util.Resources;

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;

public class UmSslUtil
{
	private static boolean useHttps = true;

	public static boolean isUseHttps()
	{
		return useHttps;
	}

	public static void checkOrInstall()
	{
		//TODO connection caching issues
//		try
//		{
//			new URL("https://maven.ultramine.ru").openConnection().getInputStream().close();
//		}
//		catch (SSLHandshakeException e)
//		{
			installDSTRootCA();
//		}
//		catch(IOException e)
//		{
//			throw new ApplicationErrorException(e, "error.unavailable.maven", "maven.ultramine.ru");
//		}
	}

	private static void installDSTRootCA()
	{
		try
		{
			KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
			Path ksPath = Paths.get(System.getProperty("java.home"),
					"lib", "security", "cacerts");
			keyStore.load(Files.newInputStream(ksPath),
					"changeit".toCharArray());

			CertificateFactory cf = CertificateFactory.getInstance("X.509");
			try(InputStream caInput = new BufferedInputStream( Resources.getAsStream("/assets/crt/DSTRootCAX3.pem")))
			{
				Certificate crt = cf.generateCertificate(caInput);
				keyStore.setCertificateEntry("DSTRootCAX3", crt);
			}

			TrustManagerFactory tmf = TrustManagerFactory
					.getInstance(TrustManagerFactory.getDefaultAlgorithm());
			tmf.init(keyStore);
			SSLContext sslContext = SSLContext.getInstance("TLS");
			sslContext.init(null, tmf.getTrustManagers(), null);
			SSLContext.setDefault(sslContext);
		}
		catch (Throwable e)
		{
			useHttps = false;
		}
	}
}