使用Eclipse连接到网络

时间:2016-09-06 08:22:18

标签: java eclipse-plugin

我想将我的Eclipse插件连接到HTTPS URL,但是有问题,因为用户需要接受证书。当然有几个tutorials for how to do this in plain Java,但在Eclipse插件中可能很难做到,我想我会以这种方式重新发明轮子。

因为Eclipse有一些内置工具可以连接到具有不同网络协议的站点。一个例子是“安装新软件......”操作。该工具甚至具有preference page,可单独列出HTTPS。

根据Eclipse Help,KeyStore“用作进行SSL连接时用于信任决策的证书的存储库”。但我无法弄清楚如何使用它。

所以我的问题是:如何使用Eclipse的内置工具连接到我的HTTPS站点?

1 个答案:

答案 0 :(得分:0)

基于this answer here我构建了自己的插件,在EarlyStartup中只加载了我需要的一个证书(幸运的是):

public class EarlyStartup implements IStartup {

    private static final String ALIAS = "ACME"; 

    @Override
    public void earlyStartup() {
        final char[] passphrase = "changeit".toCharArray();
        final char separator = File.separatorChar;
        final File dir = new File(System.getProperty("java.home") + separator + "lib" + separator + "security");
        final File file = new File(dir, "cacerts");

        try (InputStream certIn = getClass().getResourceAsStream("acme.org.crt");
                final InputStream localCertIn = new FileInputStream(file);) {

            final KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
            keystore.load(localCertIn, passphrase);
            if (keystore.containsAlias(ALIAS)) {
                return;
            }

            final CertificateFactory cf = CertificateFactory.getInstance("X.509");
            final Certificate cert = cf.generateCertificate(certIn);
            keystore.setCertificateEntry(ALIAS, cert);

            try (OutputStream out = new FileOutputStream(file)) {
                keystore.store(out, passphrase);
            }
        } catch (final Exception e) {
            e.printStackTrace();
        }
    }
}