powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Resttemplate. Как добавить publickey.pem ?
7 сообщений из 7, страница 1 из 1
Spring Resttemplate. Как добавить publickey.pem ?
    #40025026
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Подскажите, пожалуйста, как построить обращение к внешнему RestAPI с использованием публичного ключа формата pem.
командой cURL успешно подключаюсь. Формат команды:
Код: powershell
1.
2.
3.
4.
curl -O -k --cert-type pem --key pubkey.pem \
-d "param1=value1&param2=value2" \
-H "Content-Type: application/x-www-form-urlencoded" \
-X POST url



Во всем разобрался, кроме как к Resttemplate привязать ключ.
В сети есть много примеров, но они с использованием сертификата. Сертификата у меня нет. Есть только публичный и приватный ключ. Приватный генерирую подпись, публичный нужен, на сколько я понимаю, для расшифровки ответа сервера.
...
Рейтинг: 0 / 0
Spring Resttemplate. Как добавить publickey.pem ?
    #40025029
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorD,
В решении шел этим путем, и зашел в тупик:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
/*---------------------------------restTemplateKey--------------------------------------------------------*/
    public RestTemplate restTemplateKey(String certName, String certPass) throws Exception{
        InputStream resourceAsStream = new FileInputStream(certName);
        byte[] certAndKey = ByteStreams.toByteArray(resourceAsStream);
        byte[] keyBytes = parseDERFromPEM(certAndKey, "-----BEGIN PUBLIC KEY-----", "-----END PUBLIC KEY-----");

        PublicKey key = generatePublicKeyFromDER(keyBytes);


        KeyStore clientStore = KeyStore.getInstance("JKS");
        clientStore.load(null);
        clientStore.setKeyEntry("key-alias", key, null, null);


        SSLContextBuilder sslContextBuilder = new SSLContextBuilder();
        sslContextBuilder.setProtocol("TLS");

        sslContextBuilder.loadKeyMaterial(clientStore, certPass.toCharArray());
        sslContextBuilder.loadTrustMaterial(new TrustSelfSignedStrategy());

        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build());
        CloseableHttpClient httpClient = HttpClients.custom()
                .setSSLSocketFactory(sslConnectionSocketFactory)
                .build();
        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
        requestFactory.setConnectTimeout(10000); // 10 seconds
        requestFactory.setReadTimeout(10000); // 10 seconds
        return new RestTemplate(requestFactory);
    }

/*-------------------------------generatePublicKeyFromDER------------------------------------------*/
    private PublicKey generatePublicKeyFromDER(byte[] keyBytes)  throws Exception {

        String modulusBase64 = new String(keyBytes);
        BASE64Decoder b64dec = new BASE64Decoder();
        String exponentBase64 = "65537";
        RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(new BigInteger    (1,
                b64dec.decodeBuffer(modulusBase64)),
                new BigInteger(1,b64dec.decodeBuffer(exponentBase64)));

        KeyFactory publicKeyFactory = KeyFactory.getInstance("RSA");

        return publicKeyFactory.generatePublic(publicKeySpec);

    }

/*---------------------------parseDERFromPEM------------------------------------------------------------*/
    private byte[] parseDERFromPEM(byte[] pem, String beginDelimiter, String endDelimiter) {
        String data = new String(pem);
        String[] tokens = data.split(beginDelimiter);
        tokens = tokens[1].split(endDelimiter);
        return DatatypeConverter.parseBase64Binary(tokens[0]);
    }




получаю ошибку Cannot store non-PrivateKeys
Похоже этот путь заведомо тупиковый....
...
Рейтинг: 0 / 0
Spring Resttemplate. Как добавить publickey.pem ?
    #40025037
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorD,

java.security.cert.CertificateFactory#generateCertificate(InputStream is) (т.е. CertificateFactory.getInstance("X.509")...)
...
Рейтинг: 0 / 0
Spring Resttemplate. Как добавить publickey.pem ?
    #40025114
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я припоминаю handshake происходит в момент связи на уровне протокола т.е. до того как ваш аппликейшин кол сработает через REST.

Посмотрите вот эту довольно старую статью там главное есть лог хендшейка возможно это то что Вы пытаетесь осмыслить

https://vyatkins.wordpress.com/2013/11/19/java-base-ssl-connection-to-tomcat-with-server-and-client-certifications/
...
Рейтинг: 0 / 0
Spring Resttemplate. Как добавить publickey.pem ?
    #40025138
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergunka,
Думаю да. Верно. Ему нужно сначала без телеги построить hello world томкате и изучить ssl.
Счас из каждого утюга https. Силой загоняют в стадо.
...
Рейтинг: 0 / 0
Spring Resttemplate. Как добавить publickey.pem ?
    #40025326
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,
До подключения дело не доходит. Ошибка появляется на моменте попытки привязки ключа
Код: java
1.
clientStore.setKeyEntry("key-alias", key, null, null);
...
Рейтинг: 0 / 0
Spring Resttemplate. Как добавить publickey.pem ?
    #40025359
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorD,
Я о том что выше
Sergunka сказал.
Всякие там рукопожатия лучше изучать на демке клиент и томкат. Как вариант.
А не сразу в сбербанк лезть или в телегу.
Имхо
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Resttemplate. Как добавить publickey.pem ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]