Solución de problema fallida de verificación de certificado SSL fallida en la creación de ruta PKIX de Minio

fondo

    1. Nuestro proyecto necesita integrarse en una plataforma de terceros. El método de acceso es https. El servidor minio es http al inicio de la integración. Pueden ocurrir problemas de inseguridad durante el proceso de carga y descarga. Posteriormente, el servicio minio se cambiará a https. Cómo cambiarse a Baidu usted mismo.


 2. Pero cuando usamos el servicio minio https, debido a que el certificado SSL que usamos lo generamos nosotros mismos, podemos descargar el archivo, pero el problema de falla en la creación de la ruta PKIX     ocurrirá al cargar el archivo.

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)

  Al rastrear el código fuente, descubrimos que fue causado por un problema de certificado que no es de confianza. New MinioClient() suele ser una conexión de red encapsulada.

Generalmente existen dos métodos para resolver el problema en línea:

1. Una es descargar el certificado e importarlo en el cliente, que es nuestro certificado de importación jdk, pero lo importé yo mismo y todavía no funcionó (puede ser que haya varios certificados involucrados de mi parte, pero de hecho, los importé todos y al final todavía no funcionó) No.) Esta importación me parece muy inconveniente. Si cambio un servidor, significa que los certificados y similares deben volver a importarse.

2. Cancelar la verificación SSL mediante código.

 

Aquí hablamos principalmente del segundo tipo.

Dado que el problema es el enlace http, aquí comprendemos cómo minioclient realiza el enlace https y comenzamos desde aquí.

   nuevo MinioClient (), generalmente la inicialización pasará el enlace, la cuenta y la contraseña, pero lo que queremos usar aquí es eliminar el paso de verificación de seguridad al vincular. Eche un vistazo al código fuente. El nuevo minio tiene múltiples métodos de sobrecarga. Finalmente Descubrir

¿No es esto exactamente lo que queremos? Simplemente elimine la verificación SSL al inicializar httpclient. Sube el código directamente

Eliminar la verificación SSL

      Código directo, OKhttpClient elimina la conexión de verificación SSL

public static OkHttpClient getUnsafeOkHttpClent() throws KeyManagementException {
        try {
            final TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

                        }

                        @Override
                        public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

                        }

                        @Override
                        public X509Certificate[] getAcceptedIssuers() {
                            return new X509Certificate[]{};
                        }
                    }
            };


            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new SecureRandom());
            final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.sslSocketFactory(sslSocketFactory);


            builder.hostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String s, SSLSession sslSession) {
                    return true;
                }
            });
            return builder.build();

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }

  uso minio

//去掉ssl验证
        OkHttpClient okHttpClient = SslUtils.getUnsafeOkHttpClent();
        //        MinioClient minioClient = new MinioClient(minioUrl, minioName, minioPass);
        MinioClient minioClient = new MinioClient(minioUrl,9000 ,minioName, minioPass,
                null,true,okHttpClient);

Esto resuelve el problema de la verificación del certificado SSL. Espero que sea de ayuda para todos.

Supongo que te gusta

Origin blog.csdn.net/u010445301/article/details/108058005
Recomendado
Clasificación