java - 如何在 java 客户端禁用自签名证书?

标签 java ssl https rest-client webservices-client

我有真正的证书“salientrisk.crt”和“salientrisk.key”,服务器配置为具有这些证书的 SSL 服务器,现在在客户端,如果我有相同的证书,那么只有它应该能够与其他人握手明智的是它应该失败,它不应该允许客户端连接到服务器。

如何使用公钥/私钥在客户端和服务器之间进行握手。

问题是,如果我在这里传递自签名证书,那么它也可以正常工作,这是我不想要的。

我在主类中使用了以下代码:

    SSLContext sslContext = null;
                    try{
                        sslContext = SSLContext.getInstance("SSL");
                        ServerTrustManager serverTrustManager = new ServerTrustManager();
                        sslContext.init(null, new TrustManager[]{serverTrustManager}, null);

                    }catch(Exception e){
                        logger.error("Error while getting SSL context", e);
                    }


=================================================


package com.common.restclient;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;

public class ServerTrustManager implements X509TrustManager{

    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType)
            throws CertificateException {
        // TODO Auto-generated method stub

    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType)
            throws CertificateException {
        // TODO Auto-generated method stub
        X509Certificate cert=null;


        try (InputStream inStream = new FileInputStream("SSLCertificate/salientrisk.crt")) {
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            cert = (X509Certificate)cf.generateCertificate(inStream);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        cert.checkValidity();
        cert.getIssuerUniqueID();
        cert.getSubjectDN();



    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        // TODO Auto-generated method stub
        return null;
    }

}

最佳答案

您服务器中的 key 对可能也是自签名的,并且您尝试测试的 key 对具有相同的父证书 ca

关于java - 如何在 java 客户端禁用自签名证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35425043/

相关文章:

ssl - Quickbooks 集成 SSL 本地发行者问题

javascript - 如何在 HTTPS 服务器上托管我的 CSS/JS

http - Nginx 服务器内容 gzip 压缩不起作用

java - JDBC MySQL URL 和特殊字符的问题

ruby - 如何使用 net/http 在 ruby​​ 中验证 SSL 证书链

java - 渲染 swagger 服务描述的路径时如何考虑 servlet 路径映射

android - Buildozer(kivy 应用程序): Requirements (SSL, 密码学:未知的 url 类型

Azure Active Directory Graph API UserProfile() 上的 HTTP 400 错误请求;

java - 在哪里用同步块(synchronized block)捕获 Object.wait() 的 InterruptedException?

java - Spring Webservicetemplate连接重置错误