使用同样的代码,可以获得一部分服务器的证书信息,而有的服务器却握手失败?

ZHGUOWEN 北京大学 2021-11-22 19:26:05

代码如下:

测试hostname = "www.sspu.edu.cn"时可以获得服务器证书信息,而hostname = "idp.sspu.edu.cn" 却拿不到证书信息,如果使用浏览器的话,两个地址都是可以访问的。

经过多次测试,我发现www.sspu.edu.cn网站不需要 startHandshake()就可以取到证书信息,而idp.sspu.edu.cn在startHandshake()时,却报“PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target” 错误。


import java.io.*;
import java.util.*;
import java.security.cert.*;
import javax.net.ssl.*;


public class XuGetCertFromServer {
    public static void main(String args[ ])throws Exception {
        int port = 443;
        String hostname ="idp.sspu.edu.cn";
        SSLSocketFactory factory =
                HttpsURLConnection.getDefaultSSLSocketFactory();
        SSLSocket socket = (SSLSocket)factory.createSocket(hostname, port);
        // Connect to the server
        //socket.startHandshake();
        SSLSession session=socket.getSession();
        // Retrieve the server's certificate chain
        java.security.cert.Certificate[] servercerts =
                session.getPeerCertificates();
        List mylist = new ArrayList();
        for(int i=0;i<servercerts.length;i++){
            mylist.add(servercerts[i]);
        }
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        CertPath cp = cf.generateCertPath(mylist);
        System.out.println(cp);
        FileOutputStream  f=new FileOutputStream("CertPath.dat");
        ObjectOutputStream b=new  ObjectOutputStream(f);
        b.writeObject(cp);
    }
}
...全文
250 点赞 收藏 1
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZHGUOWEN 5天前

该问题已经解决,自己的问题自己回复一下吧!
1、握手失败是因为对方服务器证书有问题,一般存在两个问题:1. 证书过期; 2. 证书链不全。
2、如果不握手的话,是无法取得对方证书信息的。

但是,我是问题还没有解决,因为我的需求是检查对方网站的证书,如果有问题给出问题,如过期或证书链不全的警告。
目前查阅的资料是,用操作系统curl命令是能够满足需要的,curl执行结果会返回NSS error -8181 (SEC_ERROR_EXPIRED_CERTIFICATE) 和 NSS error -8179 (SEC_ERROR_UNKNOWN_ISSUER)错误信息。 但用java程序,不知道该如何实现,难道必须再写一个handshake程序才可以吗?

回复
相关推荐
发帖
网站开发&网络安全
创建于2021-07-02

1252

社区成员

网站开发者的CSDN大本营
帖子事件
创建了帖子
2021-11-22 19:26
社区公告

本社区主要讨论kali有关内容与IP/TCP协议,网站开发有关内容,欢迎加入😀