`
winit
  • 浏览: 13982 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
最近访客 更多访客>>
社区版块
存档分类
最新评论

java自动安装证书

    博客分类:
  • java
 
阅读更多
前段时间弄了一个HTTPClient去网络上下载文件,但是需要验证,想通过浏览器提供的方式去下载,但是发现都down不了,最终找了一个自动安装证书的代码搞定
from http://www.cs.ucsb.edu/~pconrad/cs56/examples/ldap/SimpleQuery/InstallCert.java
or
http://blog.csdn.net/faye0412/article/details/6883879

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;

public class InstallCert {

    public static void main(String[] args) throws Exception {
        String host = “xxxxx”;
        int port=443;
        char[] passphrase = "changeit".toCharArray();

        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 <host>[: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.getAbsolutePath() + "...");
        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);
        }
    }

}
分享到:
评论

相关推荐

    CFCA证书环境Java安装

    CFCA证书环境的Java安装是确保Java应用能够识别并信任CFCA签发的数字证书的关键步骤。下面将详细介绍如何进行这一过程。 首先,你需要了解CFCA证书的基本概念。CFCA是一家权威的数字证书颁发机构,其SSL证书用于...

    java在IE中下载证书并安装(根证书)

    接着,调用操作系统API(如Windows的` rundll32.exe`)来执行证书安装命令。 4. **XP与Win7的差异**:XP和Win7可能在处理证书安装的方式上存在差异。在XP中,可能可以直接调用系统API来安装证书,而在Win7或更高...

    java证书导入工具

    这是Java标准安装中自带的一个包含了根证书颁发机构(CA)的证书集合。当Java应用尝试连接一个HTTPS服务器时,它会检查服务器提供的证书是否由这个信任库中的CA签发。如果不在,就需要将该证书导入到信任库中,这时...

    关于jbed的Java自动授权

    Java自动授权是一个重要的技术主题,尤其对于那些希望在应用程序中避免频繁出现联网授权提示的开发者而言。JBed,虽然在标题中提及,但没有提供足够的背景信息,可能是指一个特定的Java开发工具、库或者框架,它涉及...

    certificate-generator-master_java证书生成_

    标题“certificate-generator-master_java证书生成_”暗示我们关注的是一个用于生成证书的Java项目,而描述“java 生成证书”进一步确认了这一点。我们将探讨Java中生成证书的基本概念、工具和步骤。 在Java中,...

    2023年!使用acme为群晖NAS自动部署证书

    使用acme为群晖NAS自动部署证书 之前一直是用的阿里云的免费证书,只能单个域名申请,有效期一年。这样每年都需要进行证书更新,最近真的是头秃了。在查阅不少资料后,发现使用acme可以快速满足需求。 acme.sh是一...

    java访问https网址下载文件(含证书)

    这里我们将深入探讨如何使用Java 1.7版本处理这一过程,包括处理SSL证书。 首先,理解HTTPS(超文本传输安全协议)是HTTP的安全版本,它通过SSL/TLS协议提供加密通信和服务器身份验证。在Java中,HTTPS访问涉及到`...

    SM2 SM3 X.509 Cert 国密 数字签名 算法 国密证书 生成 签发 证书请求 keystore 纯java.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    实现自动登陆(java) 实现自动登陆(java)

    总的来说,实现Java自动登录功能需要理解HTTP协议、Cookie和Session机制,掌握网络通信API,了解安全策略,包括加密和HTTPS,以及熟悉本地数据存储。通过这些知识,你可以构建一个能够自动登录Web应用的Java程序。

    CA证书接口用法

    在证书应用接口中,集成目标是指应用系统主管单位和开发单位需要完成的集成工作,包括服务器端部署方法、Java组件部署、服务器证书安装、客户端部署方法、应用系统集成改造等。其中,服务器端部署方法包括服务器证书...

    根证书和用户证书的生产

    3、客户端的证书获取案例,可以在客户端判断是否安装了证书,及自动安装根证书和用户证书的demo。 以上基本包含了证书的知识,是非常不错的资源。最近做了CA证书这块进行整合的知识要点,希望对你们有作用

    JAVA JNDI免证书修改AD域密码.zip

    总的来说,理解如何在Java中使用JNDI免证书连接AD并修改密码是一项关键技能,尤其在处理企业级应用集成和自动化任务时。但是,安全始终是首要考虑,因此在实际应用中应尽可能使用安全的连接方式。

    java实现scep源码

    5. **证书安装**:客户端接收到证书后,将其安装到本地密钥存储中。 在jscep库中,这些流程主要由以下几个类实现: - ` SCEPClient`:这是SCEP协议的核心类,负责整个注册过程的管理。它包含了初始化、发送请求、...

    java生成及验证android签名文件源码及生成签名文件

    签名过程涉及到了Java的关键组件——Java Key Store(JKS),这是Java提供的一个安全存储密钥和证书的容器。 生成Android签名文件通常使用Java的`keytool`命令行工具,它包含在Java Development Kit (JDK) 中。以下...

    java实现pdf文件电子签名

    在Java环境中实现PDF文件的电子签名,主要涉及到数字证书的生成、PDF处理库的使用以及签名的嵌入操作。下面将详细介绍这个过程。 首先,我们需要了解PFX(Personal Information Exchange)证书。PFX是一种包含了...

    精品软件工具--一个pki证书申请,审核和证书下载安装的管理系统软件,通过调用java自带的工具,将证书信息保存到数据.zip

    4. **证书安装**:软件可能提供了一键安装证书的功能,帮助用户在操作系统或应用程序中导入证书,以便进行加密通信或其他安全操作。 5. **数据存储**:使用Java内置工具,证书信息被安全地存储在数据库中,这可能...

    UC浏览器JAVA9.0版证书

    UC浏览器JAVA9.0版证书,诺基亚、索尼爱立信等非智能机使用。

    java https ssl 实例 例子

    当用户访问 HTTPS 网站时,IE 浏览器会自动验证 SSL 证书的合法性。如果证书无效或过期,IE 浏览器将显示警告信息,提示用户是否继续访问该网站。 四、SSL 介绍 SSL(Secure Sockets Layer)是一种安全协议,用于...

    Android-Java微信支付APIv3平台证书的命令行下载工具

    为了方便开发者,有开发者制作了一个名为“EliasZzz-CertificateDownloader”的命令行工具,其Git哈希值为8beabe3,可以帮助开发者自动化下载这个证书。 首先,我们需要了解如何获取到必要的参数,包括微信支付的...

    java源码包---java 源码 大量 实例

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

Global site tag (gtag.js) - Google Analytics