Как проверить hsotnameverifyer с помощью ssl закрепления в Android с помощью Resttemplate - PullRequest
2 голосов
/ 18 июня 2019

Я делаю банковское приложение для взаимодействия клиента и сервера в безопасных целях, используя HTTP, для этого я должен добавить закрепление SSL в Android с помощью шаблона отдыха. Я проверил много ссылок на повторный шаблон кода, но он не работает должным образом. Это правильно или нет для закрепления SSL в Android? Я нашел этот код в Google.Developer.android

Я добавил сертификат сертификата в свое приложение, но как подключиться с помощью restemplate:

   CertificateFactory cf = CertificateFactory.getInstance("X.509");

            InputStream is  = ctx.getResources().openRawResource(R.raw.cedgenetbankingin); // Place your 'your_cert.crt' file in `res/raw`

            InputStream caInput = new BufferedInputStream(is);

            Certificate ca;
            try {
                ca = cf.generateCertificate(caInput);
                System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
            } finally {
                caInput.close();
            }

// Create a KeyStore containing our trusted CAs
            String keyStoreType = KeyStore.getDefaultType();
            KeyStore keyStore = KeyStore.getInstance(keyStoreType);
            keyStore.load(null, null);
            keyStore.setCertificateEntry("ca", ca);

// Create a TrustManager that trusts the CAs in our KeyStore
            String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
            tmf.init(keyStore);

// Create an SSLContext that uses our TrustManager
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, tmf.getTrustManagers(), null);

            HostnameVerifier allHostsValid = new HostnameVerifier() {
                public boolean verify(String hostname, SSLSession session) {
                    Log.i("JJ","true--");
                    return true;
                }

            };
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
            HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

Примечание: для добавления сертификата достаточно, верно? Из папки raw я добавил файл crt. Если я внесу некоторые изменения в файл, я получу исключение, поэтому resttemplate не вызывает. Если файл правильный, значит он работает?

Код повторной установки:

  RestTemplate restTemplate = new RestTemplate();
     //   RestTemplate restTemplate = new RestTemplate();
        try {
            restTemplate.getMessageConverters().add(new StringHttpMessageConverter());

            HttpHeaders headers = createHttpHeaders();


            HttpEntity<String> entity = new HttpEntity<>(str_encodedparams, headers);

            ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class);

            System.out.println("Result - status (" + response.getStatusCode() + ") has body: " + response.hasBody());
            System.out.println(response.getBody());
            respo = response.getBody();
            System.out.println(respo);


        } catch (Exception eek) {

            eek.printStackTrace();
            System.out.println("** Exception: " + eek.getMessage());
        }
...