• 获取服务端https证书


    接上篇,用java代码实现一下获取远程服务端证书,还是拿新浪首页测试,上代码:

    package org.test;
     
    import java.net.URL;
    import java.security.MessageDigest;
    import java.security.cert.Certificate;
    import java.security.cert.X509Certificate;
    import javax.net.ssl.HttpsURLConnection;
     
    public class Application {
        public static void main(String[] args) throws Exception {
            URL url = new URL("https://www.sina.com.cn");
            HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
            conn.connect();
            Certificate[] certs = conn.getServerCertificates();    //会拿到完整的证书链
            X509Certificate cert = (X509Certificate)certs[0];    //cert[0]是证书链的最下层
            System.out.println("序号:" + cert.getSerialNumber());
            System.out.println("颁发给:" + cert.getSubjectDN().getName());
            System.out.println("颁发者:" + cert.getIssuerDN().getName());
            System.out.println("起始:" + cert.getNotBefore());
            System.out.println("过期:" + cert.getNotAfter());
            System.out.println("算法:" + cert.getSigAlgName());
            System.out.println("指纹:" + getThumbPrint(cert));
            conn.disconnect();
        }
     
        private static String getThumbPrint(X509Certificate cert) throws Exception {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            byte[] der = cert.getEncoded();
            md.update(der);
            byte[] digest = md.digest();
            return bytesToHexString(digest);
        }
         
        private static String bytesToHexString(byte[] src) {
            StringBuilder stringBuilder = new StringBuilder("");
            if (src == null || src.length <= 0) {
                return null;
            }
            for (int i = 0; i < src.length; i++) {
                int v = src[i] & 0xFF;
                String hv = Integer.toHexString(v);
                if (hv.length() < 2) {
                    stringBuilder.append(0);
                }
                stringBuilder.append(hv);
            }
            return stringBuilder.toString();
        }
    }

     运行看效果,得到的输出:

    序号:78653003708979598891221754220386804014
    颁发给:CN=sina.com, OU="Sina.com Technology(China)Co.,ltd", O="Sina.com Technology(China)Co.,ltd", L=Beijing, ST=Beijing, C=CN
    颁发者:CN=GeoTrust SSL CA - G3, O=GeoTrust Inc., C=US
    起始:Tue Feb 21 08:00:00 CST 2017
    过期:Tue Nov 26 07:59:59 CST 2019
    算法:SHA256withRSA
    指纹:6ce7b869e4d6f77a31a967af2dc1b904fd059aa3

    与之前是一样的。

  • 相关阅读:
    依赖注入和控制反转概念及目的(新手必读)
    电商秒杀系统可能遇到的坑及思路
    Java中的ReentrantLock和synchronized两种锁定机制的对比
    Java集合---HashMap源码剖析
    Java中的字符串常量池
    redhat7:用户、组和权限
    redhat7下对用户账户的管理
    通过Tacker将NFV引入OpenStack
    github中的一个快捷键
    关于
  • 原文地址:https://www.cnblogs.com/BoyTNT/p/9293403.html
Copyright © 2020-2023  润新知