标签: x509trustmanager

在Java中针对CA验证X.509证书

可以说我有这样的东西(客户端代码):

TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {

        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        @Override
        public void checkClientTrusted(
                java.security.cert.X509Certificate[] certs, String authType) {
        }

        @Override
        public void checkServerTrusted(
                java.security.cert.X509Certificate[] certs, String authType) {
        }
    }
};

SSLContext sslc = SSLContext.getInstance("TLS");
sslc.init(null, trustAllCerts, null);

SocketFactory sf = sslc.getSocketFactory();
SSLSocket s = (SSLSocket) sf.createSocket("127.0.0.1", 9124);
Run Code Online (Sandbox Code Playgroud)

这段代码功能齐全,但我真的无法弄清楚,如何根据我在pem文件中提供的一个具体CA证书来验证服务器的证书.

所有证书都由我的自签名CA签名,它是我需要验证的CA(仅针对此证书).

每个答案都表示赞赏.

编辑:

回应jglouie(非常感谢你这样做 - 不能投票给你答案).

我创立了解决方案:

new X509TrustManager() {

        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        @Override
        public void …
Run Code Online (Sandbox Code Playgroud)

java ssl x509certificate x509 x509trustmanager

16
推荐指数
2
解决办法
3万
查看次数

java.security.cert.CertPathValidatorException:未找到证书路径的信任锚。在 api 上少于 24

com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Run Code Online (Sandbox Code Playgroud)

我在 19 到 24 的 api 上的 logcat 中收到此错误,并且我的应用程序中没有从服务器加载数据我搜索了该错误并找到了解决方案

 @SuppressLint("TrulyRandom")
public static void handleSSLHandshake() {
    try {
        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }

            @Override
            public void checkClientTrusted(X509Certificate[] certs, String authType) {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] certs, String authType) {
            }
        }};

        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String arg0, SSLSession …
Run Code Online (Sandbox Code Playgroud)

android android-volley android-security trustmanager x509trustmanager

8
推荐指数
0
解决办法
3240
查看次数

OkHttp3 中的 SSLSocketFactory 和 TrustManager 冗余

在 OkHttp3 中,不推荐使用以下内容[A]

    sslSocketFactory(SSLSocketFactory sslSocketFactory) 
Run Code Online (Sandbox Code Playgroud)

它被替换为[B]

    sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager).
Run Code Online (Sandbox Code Playgroud)

以下是我的问题:


更多信息:

创建SSLSocketFactory对象时,已经可以在

sslContext.init(KeyManager[] arg0, TrustManager[] arg1, SecureRandom arg2).
Run Code Online (Sandbox Code Playgroud)

例如,我通过执行以下操作获得SSLSocketFactory对象:

public SSLSocketFactory getSSLSocketFactory() {
  SSLContext sslContext = SSLContext.getInstance("TLS");
  sslContext.init(getKeyManager(), getTrustManager(), new SecureRandom());
  return sslContext.getSocketFactory();
}
Run Code Online (Sandbox Code Playgroud)

使用getTrustManager ()返回一个TrustManager[] 的方法,其中包含客户端应该信任的服务器证书。

现在,既然

sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager) 
Run Code Online (Sandbox Code Playgroud)

希望我提供一个X509TrustManager对象,我通过以下方式处理:

OkHttpClient okClient = …
Run Code Online (Sandbox Code Playgroud)

java sslsocketfactory okhttp3 x509trustmanager

6
推荐指数
1
解决办法
1234
查看次数

无法使用 OKHTTP3 在 IBM JRE8 上提取信任管理器

任何人都可以帮忙解决这个问题吗?

我还使用OKHTTP3 版本 4.8.1编写HTTP2 客户端。它可以在 Oracle JDK 8 上运行,但不能在 IBM JRE 8 上运行。

错误消息:java.lang.IllegalStateException:无法在 okhttp3.internal.Platform@e85a0ce8 上提取信任管理器,sslSocketFactory 是类 com.ibm.jsse2.SSLSocketFactoryImpl。

谢谢

okhttp trustmanager ibm-jre x509trustmanager

5
推荐指数
1
解决办法
3191
查看次数

在 X509TrustManager 中,“getAcceptedIssuers”方法用于什么?

X509TrustManager 中有三种方法。1 checkClientTrusted :检查客户端的证书是否可信。2 checkServerTrusted:检查服务器的证书是否可信。那么 getAcceptedIssuers 方法有什么用呢?它会在哪里被调用?

java https x509trustmanager

2
推荐指数
1
解决办法
3469
查看次数