keboola / http-extractor

Extract data from publicly accessible URL
MIT License
2 stars 1 forks source link

cURL error 60: SSL certificate problem: unable to get local issuer certificate #31

Open ondrejhlavacek opened 5 years ago

ondrejhlavacek commented 5 years ago

@yustme říká, že certifikát to má správnej

https://connection.eu-central-1.keboola.com/admin/utils/logs?file=2019/03/19/19/2019-03-19-19-57-38-5c913ba2a3994-exception https://connection.eu-central-1.keboola.com/admin/utils/logs?file=2019/03/19/19/2019-03-19-19-57-38-5c913ba2ae51e-log

ondrejhlavacek commented 5 years ago

prej je to z https://opendata.sukl.cz/

yustme commented 5 years ago

je to https://opendata.sukl.cz/ . Jako certifikát využívají DigiCert. Pokud to skusím stáhnout pomocí wget, tak mi to hlásí stejnou chybu. Takže problém je s chybějícím certifikátem v systému. Možná by bylo fajn tam mít zaškrtáváko "skip ssl verification" v http extractoru. Jinak lidi nestáhnou nic, kde není platný SSL certifikát.

odinuv commented 5 years ago

lepsi by bylo tam ten certifikat pridat. To, ze nemas platny certifikat neco rika o duveryhodnosti tech dat

tomasfejfar commented 5 years ago

A vyřešilo by to něco jako https://packagist.org/packages/composer/ca-bundle ?

tomasfejfar commented 5 years ago

^Zkusím jestli to nevyřeší a kdyžtak můžeme vymýšlet dál.

odinuv commented 5 years ago

imho vyresi https://github.com/composer/ca-bundle/blob/master/res/cacert.pem#L2243

tomasfejfar commented 5 years ago

Hmm, tak ne :( https://travis-ci.org/keboola/http-extractor/builds/508849620?utm_source=github_status&utm_medium=notification

tomasfejfar commented 5 years ago

Ani v cli: curl https://opendata.sukl.cz/soubory/SOD20190228/DLP20190228.zip --cacert /code/vendor/composer/ca-bundle/res/cacert.pem

tomasfejfar commented 5 years ago

https://www.ssllabs.com/ssltest/analyze.html?d=opendata.sukl.cz

tomasfejfar commented 5 years ago

Takže se obávám, že bude potřeba tam ten "skip ssl verification" přidat. Musíme ho pojmenovat dostatečně složitě very_unsafe_disable_ssl_check_i_know_what_i_am_doing, aby to lidi nepoužívali automaticky a aby byla práce ho zapnout :) (v UI třeba opsaním textu vyrenderovaného v canvasu 😈 )

odinuv commented 5 years ago

mno to je zase zajeb

ondrejhlavacek commented 5 years ago

nebo to nedat do UI, pouze v power user režimu

odinuv commented 5 years ago

certifikat je v poradku, ale sukl ma spatne nakonfigurovany server - tady je to popsane vcetne odkazu na RFC: https://serverfault.com/questions/774211/do-web-servers-send-the-certificate-chain-to-the-web-client https://unix.stackexchange.com/questions/490608/how-to-make-gnu-linux-trust-a-certificate-thats-trusted-by-windows-out-of-the-b

projevuje se to takhle: openssl s_client -connect www.keboola.com:443 -prexit:

root@f95ce47d9b31:/code# openssl s_client -connect www.keboola.com:443 -prexit
CONNECTED(00000003)
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = AlphaSSL CA - SHA256 - G2
verify return:1
depth=0 OU = Domain Control Validated, CN = *.netlify.com
verify return:1
---
Certificate chain
 0 s:/OU=Domain Control Validated/CN=*.netlify.com
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
 1 s:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGWzCCBUOgAwIBAgIMdidMYjVGqvU1UiGeMA0GCSqGSIb3DQEBCwUAMEwxCzAJ
BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSIwIAYDVQQDExlB
...

a pro sukl openssl s_client -connect opendata.sukl.cz:443 -prexit je to

root@f95ce47d9b31:/code# openssl s_client -connect opendata.sukl.cz:443 -prexit
CONNECTED(00000003)
depth=0 C = CZ, L = Praha, O = Statni ustav pro kontrolu leciv, CN = *.sukl.cz
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = CZ, L = Praha, O = Statni ustav pro kontrolu leciv, CN = *.sukl.cz
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/C=CZ/L=Praha/O=Statni ustav pro kontrolu leciv/CN=*.sukl.cz
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=Thawte TLS RSA CA G1
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGYDCCBUigAwIBAgIQArXEfpG5sWU6E8tvYN/+jjANBgkqhkiG9w0BAQsFADBe
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
...

coz je spatne. Takze muzem zkusit napsat do SUKLu, at si opravi HTTPS - cc @yustme jestli s nima neco resi. Flag bych na to nepridaval - je uplne jedno jakej ma nazev a co musi uzivatel udelat, protoze jednou to nekdo zaklikne a uz to v te konfiguraci bude navzdy spatne. Kdyz uz tak by to mohla byt nova komponenta UNSAFE HTTP Extractor

ErikZigo commented 5 years ago

Custom komponentu bych to nedelal. Nedavno jsme se u MySQL rozhodli to udelat primo do komponenty. V ui je to myslim skryty. https://github.com/keboola/db-extractor-mysql/pull/96

yustme commented 5 years ago

Já bych tam přidal tu možnost nevalidního certifikátu. Kotel věcí má self-signed certifikát a ty jako mají smůlu ?

tomasfejfar commented 5 years ago

Já jsem taky spíš pro ten switch na "unsafe". Často to není o tom, jestli ty data jsou skutečně od toho, od koho čekáš, ale spíš o tom, aby nebyly odposlechnutelná po cestě. A na to self-signed certifikát imho úplně stačí.

odinuv commented 5 years ago

A na to self-signed certifikát imho úplně stačí.

samozrejme, ze nestaci

tomasfejfar commented 5 years ago

Protože... ? Moje chápání je, že se self-signed certifikátem stále platí, že útočník nemůže přečíst cestou přenášená data (tj. např. nemusím se bát stahnout sensitive data na public wifině). Sice může udělat MITM útok a poslat jiná data, ale nemůže cestou rozšifrovat, to co posílá legitimní server. Což mi přijde jako ten good-enough scénář.

odinuv commented 5 years ago

ano, muze udelat MITM, a timpadem muze data rozsifrovat, jinak by to nebylo MITM. Udelat to muze diky tomu, ze si vytvorit uplne stejny self-signed certifikat jako legitimni server a server nijak neoveruje komu ty data poslal, takze end-user nic nepozna.

lepsi argument proto to povolit, je, ze ten extractor stejne umoznuje stahnout data z http (nicmene https bez kontroly je porad horsi nez http)

yustme commented 5 years ago

@odinuv pořád nevidím důvod, když zaškrnu checkbox "unsafe" a někdo mi podvrhne certifikát, tak se můžou stáhnout špatný data. Proto se ten checkbox jmenuje "unsafe" a ne "Don't worry it will be fine".

A nevím kolik útoků MITM se vám, kdy povedlo udělat. Ale MITM s http je mnohem jednodušší než s https.

Stále jsem pro

Jinak vyhodíme ze hry všechny self-signed certifikáty, které jsou podle mě lepší než čisté HTTP

odinuv commented 5 years ago

ano, vsak jsem psal:

lepsi argument proto to povolit, je, ze ten extractor stejne umoznuje stahnout data z http

Jinak vyhodíme ze hry všechny self-signed certifikáty, které jsou podle mě lepší než čisté HTTP

nejsou, a ta tvoje veta sama vysvetluje proc nejsou. Protoze jsou uplne stejne spatny jako HTTP, ale spousta lidi si mysli, ze jsou lepsi a maji falesnej pocit bezpeci.

tomasfejfar commented 5 years ago

https://security.stackexchange.com/a/99835/25116

odinuv commented 5 years ago

btw, mezitim mi ze suklu napsali, ze to opravili

yustme commented 5 years ago

https://security.stackexchange.com/a/99835/25116

Mít jako argument odpověd na SO, která má -2 není dobrý tah :smile:

odinuv commented 5 years ago

no kazdopadne kdyz to ted funguje, tak tohle muzeme dat on-hold a vyprdnout se na to dokud se to zase neobjevi, ne?