BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Ауторизация с клиентски сертификат
thrawn
Публикувано на: 05-10-2017, 14:57
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 979
Регистриран на: 17.01.17



Страницата на нап нещо ме реже при опит за ауторизация. Някой може ли да даде идея.

Това е тестовия код
CODE
KeyStore keyStore = null;

try(InputStream is = this.getClass().getResourceAsStream("provider.conf")) {
   Provider provider = new SunPKCS11(is);
   Security.addProvider(provider);

   keyStore = KeyStore.getInstance("PKCS11");
   keyStore.load(null, "PIN".toCharArray());
}

KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, null);

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init((KeyStore) null);

SSLContext context = SSLContext.getInstance("TLSv1.2");
context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), new SecureRandom());

HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());

HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

//        connection.setSSLSocketFactory(context.getSocketFactory());
connection.setRequestMethod("GET");
connection.setRequestProperty("Host", "inetdec.nra.bg");
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:55.0) Gecko/20100101 Firefox/55.0");
connection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
connection.setRequestProperty("Accept-Language", "bg,en-US;q=0.7,en;q=0.3");
connection.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
connection.setRequestProperty("Connection", "keep-alive");
connection.setRequestProperty("Upgrade-Insecure-Requests", "1");

connection.connect();

Map<String, List<String>> headers = connection.getHeaderFields();

System.out.println(headers.get(null));
for(String key: headers.keySet()) {
   if(key == null) continue;
   System.out.println(key + ": " + headers.get(key).toString());
}


и съответно отговорът
CODE
[HTTP/1.1 200 OK]
Keep-Alive: [timeout=5, max=50]
Server: [Apache/2.4.20 (Win64) OpenSSL/1.0.2g mod_owa 2.10.8]
Connection: [Keep-Alive]
Pragma: [no-cache]
Content-Length: [710]
Date: [Thu, 05 Oct 2017 12:41:23 GMT]
Content-Type: [text/html; charset=Windows-1251]


Когато ползвам браузер обаче нещата се различни:
CODE
Host: inetdec.nra.bg
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:55.0) Gecko/20100101 Firefox/55.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: bg,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1


и съответно отговорът (със статус 302)
CODE
Date: Thu, 05 Oct 2017 12:50:52 GMT
Server: Apache/2.4.20 (Win64) OpenSSL/1.0.2g mod_owa 2.10.8
Set-Cookie: ISPUBSESSION=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; Secure; HttpOnly;
Location: login.redirect?url=home.magic
Content-Length: 0
Keep-Alive: timeout=5, max=50
Connection: Keep-Alive
Content-Type: text/html; charset=Windows-1251


и двете заявки се пускат към https://inetdec.nra.bg/pls/pub/login_cert.h...ller=home.magic

Ако разкарам Key Manager -ът от ssl контекста ми връща "неуспешна ауторизация".
PMEmail Poster
Top
lucky
Публикувано на: 05-10-2017, 17:12
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 47
Регистриран на: 05.08.17



Браузърът не ядва client auth-a, така ли? Кой е браузъра? PKCS#12-ката сложена ли е в credentials storage-a?
PMEmail Poster
Top
thrawn
Публикувано на: 05-10-2017, 17:28
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 979
Регистриран на: 17.01.17



Браузерът е ОК, горния код се дъни.
Идеята е да се докопам до сесийното ИД и да продължа на татък по редиректът.

Сертификатът е в pkcs11 хранилище и според тестовете ми (направих декоратор на KeyManager -ът който се ползва) се извлича правилния сертификат.
PMEmail Poster
Top
kierenski
Публикувано на: 05-10-2017, 17:34
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 111
Регистриран на: 10.01.16



Липсват ти хедърите: Referer и Origin.
Когато правиш запитване към API те за задължителни.

--- edit ---
Access-Control-Request-Method: GET
също ти е необходим при такива запитвания.

Това мнение е било редактирано от kierenski на 05-10-2017, 17:40
PMEmail Poster
Top
thrawn
Публикувано на: 05-10-2017, 17:40
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 979
Регистриран на: 17.01.17



Ще тествам, ма виж, че и браузерът не ги праща. А хедърите които пращам са копирани от работеща заявка на браузер.
PMEmail Poster
Top
kierenski
Публикувано на: 05-10-2017, 17:49
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 111
Регистриран на: 10.01.16



При мен браузъра пуска
CODE
Host: inetdec.nra.bg
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1


и връща
CODE
Date: Thu, 05 Oct 2017 15:45:00 GMT
Server: Apache/2.4.20 (Win64) OpenSSL/1.0.2g mod_owa 2.10.8
Set-Cookie: ISPUBSESSION=XXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; Secure; HttpOnly;
Location: login.redirect?url=home.magic
Content-Length: 0
Keep-Alive: timeout=5, max=47
Connection: Keep-Alive
Content-Type: text/html; charset=Windows-1251
PMEmail Poster
Top
lucky
Публикувано на: 05-10-2017, 17:52
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 47
Регистриран на: 05.08.17



Странно. Освен да сложиш setFollowRedirects(false), може пък HttpsURLConnection да те води директно до 302 целта и да се губят cookie-тата. При Apache HTTL lib, мисля че беше по-просто да запазиш cookie, но при HttpsURLConnection не се сещам вече.
PMEmail Poster
Top
thrawn
Публикувано на: 05-10-2017, 17:53
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 979
Регистриран на: 17.01.17



Именно де. С тия хедър риаботи.
Въпросът е какво изпускам когато аз правя заявката. Явно не е хедър.

---
Преди да тръгна от офиса тествах и с apache httpclent ама там директно ме режеше с 403 (по спомен).

Това мнение е било редактирано от thrawn на 05-10-2017, 17:54
PMEmail Poster
Top
kierenski
Публикувано на: 05-10-2017, 18:52
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 111
Регистриран на: 10.01.16



Намерих ти проблема

* skipping SSL peer certificate verification
* NSS: client certificate not found (nickname not specified)

Практически ти не му даваш валиден CA сертификат какъвто има браузъра.

CODE
> GET /pls/pub/login_cert.home?caller=home.magic HTTP/1.1
> Host: inetdec.nra.bg
> User-Agent: curl/7.51.0
> Accept: */*
>
* skipping SSL peer certificate verification
* NSS: client certificate not found (nickname not specified)
* ALPN/NPN, server did not agree to a protocol
< HTTP/1.1 200 OK
< Date: Thu, 05 Oct 2017 16:50:09 GMT
< Server: Apache/2.4.20 (Win64) OpenSSL/1.0.2g mod_owa 2.10.8
< Pragma: no-cache
< Content-Length: 1109
< Content-Type: text/html; charset=Windows-1251


Това мнение е било редактирано от kierenski на 05-10-2017, 18:53
PMEmail Poster
Top
thrawn
Публикувано на: 05-10-2017, 19:03
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 979
Регистриран на: 17.01.17



Можеш ли да изкараш body -то?

При мен, когато разкарам серификатът (KeyManager-ът) получавам html страница с текст "неуспешна ауторизация" (или нещо в тоя дух).
Когато всичко уж е на ред получавам страница с javascript който редиректва към /index.html (и някаква дебъг информация за сесията - само етикети де).

Това мнение е било редактирано от thrawn на 05-10-2017, 19:16
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0