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

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);
    }
}
...全文
648 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZHGUOWEN 2021-11-24
  • 打赏
  • 举报
回复

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

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

1,708

社区成员

发帖
与我相关
我的任务
社区描述
网站开发者的CSDN大本营
社区管理员
  • 中考之前不改名
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧