Certifikáty Let's Encrypt nefungují na Androidu

Jenda

Re:problem s letsencrypt na androide
« Odpověď #15 kdy: 06. 07. 2018, 09:51:24 »
Ten test som vcera spravil ... dostal som hodnotenie  B.
A nahlásilo ti to nějaké chain issues?


Re:problem s letsencrypt na androide
« Odpověď #16 kdy: 06. 07. 2018, 12:41:59 »
Pridal som tam vsetky certifikaty
Kód: [Vybrat]
SSLCertificateKeyFile    /etc/letsencrypt/live/web/privkey.pem
SSLCertificateFile       /etc/letsencrypt/live/web/cert.pem
SSLCertificateChainFile  /etc/letsencrypt/live/web/chain.pem
SSLCertificateChainFile  /etc/letsencrypt/live/web/fullchain.pem
a stejne to pise, ze certifikat pochadza z nedoverihodnej autority
A to vám Apache takhle vezme? A jste si jist, že si to přebere správně? Proč to zbytečně komplikujete a nedáte tam přesně tu konfiguraci, kterou jsem vám napsal? Případně variantu, kterou napsal ByCzech – pokud jsou certifikáty v fullchain.pem správně seřazené.

Jaké certifikáty vám server vrací si můžete ověřit pomocí openssl s_client. Např.:

Kód: [Vybrat]
% openssl s_client -connect root.cz:443
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = root.cz
verify return:1
---
Certificate chain
 0 s:/CN=root.cz
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
[…]
Důležitá je ta část pod Certificate chain. Musí tam být dva certifikáty, 0 bude certifikát vašeho serveru (místo root.cz), 1 bude to samé, co je v tomto výpisu, protože root.cz také používá Let's Encrypt.

Re:problem s letsencrypt na androide
« Odpověď #17 kdy: 06. 07. 2018, 13:38:27 »
Zkus to takhle:

Kód: [Vybrat]
SSLCertificateKeyFile    /etc/letsencrypt/live/web/privkey.pem
SSLCertificateFile       /etc/letsencrypt/live/web/fullchain.pem

Nic jiného, jen takto. A pozor na to co máš v SSLCertificateFile!
V SSLCertificateFile mam len to co mi vygeneroval a poslal letsencrypt
Nefunguje to ani s privkey.pem a fullchain.pem (na desktope mam mint 17 a v opere, mozille a chrome funguje vsetko bez problemov).
Ten test som vcera spravil ... dostal som hodnotenie  B.
A nahlásilo ti to nějaké chain issues?
Ano vid. obr https://imgur.com/a/rMCkQSO dole som to dal do cerveneho ramceka

Re:problem s letsencrypt na androide
« Odpověď #18 kdy: 06. 07. 2018, 14:15:39 »
Pridal som tam vsetky certifikaty
Kód: [Vybrat]
SSLCertificateKeyFile    /etc/letsencrypt/live/web/privkey.pem
SSLCertificateFile       /etc/letsencrypt/live/web/cert.pem
SSLCertificateChainFile  /etc/letsencrypt/live/web/chain.pem
SSLCertificateChainFile  /etc/letsencrypt/live/web/fullchain.pem
a stejne to pise, ze certifikat pochadza z nedoverihodnej autority
A to vám Apache takhle vezme? A jste si jist, že si to přebere správně? Proč to zbytečně komplikujete a nedáte tam přesně tu konfiguraci, kterou jsem vám napsal? Případně variantu, kterou napsal ByCzech – pokud jsou certifikáty v fullchain.pem správně seřazené.

Jaké certifikáty vám server vrací si můžete ověřit pomocí openssl s_client. Např.:

Kód: [Vybrat]
% openssl s_client -connect root.cz:443
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = root.cz
verify return:1
---
Certificate chain
 0 s:/CN=root.cz
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
[…]
Důležitá je ta část pod Certificate chain. Musí tam být dva certifikáty, 0 bude certifikát vašeho serveru (místo root.cz), 1 bude to samé, co je v tomto výpisu, protože root.cz také používá Let's Encrypt.
Ved presne tak som to spravil ako uvadzate.
Skusil som
Kód: [Vybrat]
SSLCertificateKeyFile    /etc/letsencrypt/live/web/privkey.pem
SSLCertificateFile       /etc/letsencrypt/live/web/cert.pem
SSLCertificateChainFile  /etc/letsencrypt/live/web/chain.pem
ale aj
Kód: [Vybrat]
SSLCertificateKeyFile    /etc/letsencrypt/live/web/privkey.pem
SSLCertificateFile       /etc/letsencrypt/live/web/fullchain.pem
po reloade apache, android stale hlasi nedoverihodnu autoritu.
Co sa tyka overenia, tak mam tam len 0 (1 nie)
Kód: [Vybrat]
CONNECTED(00000003)
depth=0 CN = moj_web.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = moj_web.com
verify error:num=27:certificate not trusted
verify return:1
depth=0 CN = moj_web.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/CN=moj_web.com
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---

Re:problem s letsencrypt na androide
« Odpověď #19 kdy: 06. 07. 2018, 14:55:34 »
Ved presne tak som to spravil ako uvadzate.
Ne, v tom vašem výpisu jste měl navíc druhou volbu SSLCertificateChainFile.

Co sa tyka overenia, tak mam tam len 0 (1 nie)
To znamená, že Apache ten mezilehlý certifikát neposílá a to je ten důvod, proč tomu certifikátu Android nedůvěřuje. Podívejte se na ty soubory cert.pem a chain.pem. V každém by měl být jeden certifikát (jeden blok  -----BEGIN CERTIFICATE----- […] -----END CERTIFICATE-----). V souboru cert.pem by měl být jen certifikát vašeho serveru, v souboru chain.pem jen certifikát /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3. Následující příkazy vám obsah těch souborů a certifikátů v nich vložených vypíšou:

Kód: [Vybrat]
openssl x509 -text -noout -in /etc/letsencrypt/live/web/cert.pem
openssl x509 -text -noout -in /etc/letsencrypt/live/web/chain.pem

A mimochodem, pokud ty certifikáty k sobě nesedí (což je asi důvod, proč Apache ten mezilehlý certifikát neposílá), předpokládám, že o tom Apache něco napíše do logu, takže bych se podíval i tam. Předpokládám, že bude něco špatně v tom chain.pem. Možná tam máte vložený i ten serverový certifikát – pak ten soubor použijte pro SSLCertificateFile.


ByCzech

  • *****
  • 1 863
    • Zobrazit profil
    • E-mail
Re:problem s letsencrypt na androide
« Odpověď #20 kdy: 06. 07. 2018, 15:01:50 »
ale aj
Kód: [Vybrat]
SSLCertificateKeyFile    /etc/letsencrypt/live/web/privkey.pem
SSLCertificateFile       /etc/letsencrypt/live/web/fullchain.pem
po reloade apache, android stale hlasi nedoverihodnu autoritu.
Co sa tyka overenia, tak mam tam len 0 (1 nie)

A to je přesně ten problém. Web server neposlal fullchain nebo v tom souboru není fullchain, nebo máte někde ještě jinou definici SSL v konfigu Apache, která dostala z nějakého důvodu přednost ap.

Zajistěte aby web server poslal správný soubor, ve kterém bude správný řetězec certifikátů, pak to bude nejspíše fungovat, tak jak to funguje hromadě ostatních.

Re:problem s letsencrypt na androide
« Odpověď #21 kdy: 06. 07. 2018, 15:12:26 »
V kazdom *.pem subore mam len jeden certifikat
Kód: [Vybrat]
-----BEGIN CERTIFICATE----- […] -----END CERTIFICATE-----len v subore fullchain.pem mam 2 certifikaty a to
1. obsah cert.pem
2. obsah chain.pem.
Cize ak tomu spravne chapem, tak v apache vhost configu pouzijem vzdy privkey.pem (to je tajny kluc, ktory sa nesmie nikdy dostat nikomu do ruk).
A nasledne pouzijem fullchain.pem (alebo na miesto neho, chain.pem a cert.pem).
Takze by to malo byt jedno ci v configu pouzijem
Kód: [Vybrat]
privkey.pem
fullchain.pem
alebo
Kód: [Vybrat]
privkey.pem
chain.pem
cert.pem
Ale nefungovalo mi to ani z jednou z moznosti.
Skusim este pozriet log z apache.
Co sa tyka certifikatov (ci k sebe sedia alebo nie) to ja asi ovplivnit neviem, spolieham sa na vygenerovane certifikaty letsencryptom

ByCzech

  • *****
  • 1 863
    • Zobrazit profil
    • E-mail
Re:problem s letsencrypt na androide
« Odpověď #22 kdy: 06. 07. 2018, 15:36:08 »
Takze by to malo byt jedno ci v configu pouzijem
Kód: [Vybrat]
privkey.pem
fullchain.pem

Tohle funguje, odzkoušeno... Pokud přes openssl vidíte jen jeden certifikát, znamená to, že se vám poslalo něco jiného nebo se konfigurace nenačetla znovu ap. Ve chvíli, kdy přes openssl uvidíte celý řetězec, měl by Android být spokojen.

Re:problem s letsencrypt na androide
« Odpověď #23 kdy: 06. 07. 2018, 15:38:37 »
Cize ak tomu spravne chapem, tak v apache vhost configu pouzijem vzdy privkey.pem (to je tajny kluc, ktory sa nesmie nikdy dostat nikomu do ruk).
A nasledne pouzijem fullchain.pem (alebo na miesto neho, chain.pem a cert.pem).
Ano.

Takze by to malo byt jedno ci v configu pouzijem
Kód: [Vybrat]
privkey.pem
fullchain.pem
alebo
Kód: [Vybrat]
privkey.pem
chain.pem
cert.pem
Ano, jenom musíte ty soubory uvést u správných direktiv, ale to asi máte, příklady tu byly několikrát.

Ale nefungovalo mi to ani z jednou z moznosti.
Buď v těch souborech máte špatné certifikáty, nebo měníte v Apache konfiguraci něčeho jiného (jiného virtualhosta, jiného serveru), než pak testujete. Těmi příkazy výše si můžete překontrolovat obsah těch certifikátů. Spíš bych to ale viděl na tu špatnou konfiguraci Apache – pak by bylo vhodné ji sem celou vložit, protože jinak můžeme jen hádat.

Co sa tyka certifikatov (ci k sebe sedia alebo nie) to ja asi ovplivnit neviem, spolieham sa na vygenerovane certifikaty letsencryptom
Předpokládám, že ta utilita generuje správné soubory. Ale mohl jste něco pokazit při tom testování.

Re:problem s letsencrypt na androide
« Odpověď #24 kdy: 06. 07. 2018, 19:53:58 »
Uz ma napadlo aj to, ze som si zmylil vhost, ale nie.
Moja konfiguracia vhostu je taka (tvorili sme ju spolu na fore).
Config vhostu vyzera takto (domena je vymyslena aj adresar s certifikatmi je iny ako som uvadzal vyssie).
Kód: [Vybrat]
<VirtualHost *:80>
        DocumentRoot /var/www/www.moj_web.com
        ServerName moj_web.com
        ServerAlias www.moj_web.com
        ServerAdmin webmaster@moj_web.com
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^moj_web\.com$ [NC]
    RewriteRule ^(.*)$ http://www.moj_web.com$1 [R=301,NE,L]
        RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
</VirtualHost>

<VirtualHost *:443>
        DocumentRoot /var/www/www.moj_web.com
        ServerName moj_web.com
    ServerAlias www.moj_web.com
    ServerAdmin webmaster@moj_web.com
  <IfModule mod_ssl.c>
        SSLEngine on
        SSLCertificateKeyFile /etc/letsencrypt/live/moj_web.com/privkey.pem
        SSLCertificateFile /etc/letsencrypt/live/moj_web.com/cert.pem
        SSLCertificateChainFile /etc/letsencrypt/live/moj_web.com/chain.pem
#       SSLCertificateChainFile /etc/letsencrypt/live/moj_web.com/fullchain.pem
  </IfModule>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^moj_web\.com$ [NC]
        RewriteRule ^(.*)$ https://www.moj_web.com$1 [R=301,NE,L]
</VirtualHost>

Re:problem s letsencrypt na androide
« Odpověď #25 kdy: 06. 07. 2018, 20:22:57 »
Ten serverový certifikát máte vystavený pro obě domény (bez www i s www)? Zkontrolujte ještě pomocí openssl x509 (příklad jsem uváděl), jestli v tom /etc/letsencrypt/live/moj_web.com/chain.pem je správný certifikát Let's Encrypt. Žádnou jinou možnou chybu tam nevidím.

Když to testujete (z Androidu nebo tím OpenSSL), jste si jistý, že se připojujete na tenhle server?

ByCzech

  • *****
  • 1 863
    • Zobrazit profil
    • E-mail
Re:problem s letsencrypt na androide
« Odpověď #26 kdy: 06. 07. 2018, 20:33:11 »
Ještě mě napadlo co jsem řešil na jiném serveru... mod_ssl nebyl s podporou SNI, apache pak vracel výchozí pro všechny virtuály - vyřešil jsem to náhradou za mod_gnutls, pak je konfigurace takto:

Kód: [Vybrat]
GnuTLSEnable on
GnuTLSPriorities NORMAL
GnuTLSCertificateFile /path-to/fullchain-cert.pem
GnuTLSKeyFile /path-to/key.pem

Re:problem s letsencrypt na androide
« Odpověď #27 kdy: 06. 07. 2018, 21:45:42 »
Ten serverový certifikát máte vystavený pro obě domény (bez www i s www)? Zkontrolujte ještě pomocí openssl x509 (příklad jsem uváděl), jestli v tom /etc/letsencrypt/live/moj_web.com/chain.pem je správný certifikát Let's Encrypt. Žádnou jinou možnou chybu tam nevidím.

Když to testujete (z Androidu nebo tím OpenSSL), jste si jistý, že se připojujete na tenhle server?
Ano aj pre www aj bez www vid. https://forum.root.cz/index.php?topic=18939.msg273085#msg273085
Toto
Kód: [Vybrat]
openssl x509 -text -noout -in /etc/letsencrypt/live/web/cert.pem
openssl x509 -text -noout -in /etc/letsencrypt/live/web/chain.pem
vyzera byt OK.
Rozhodne sa pripojujem na vhost s ktorym to testujem.

Ještě mě napadlo co jsem řešil na jiném serveru... mod_ssl nebyl s podporou SNI, apache pak vracel výchozí pro všechny virtuály - vyřešil jsem to náhradou za mod_gnutls, pak je konfigurace takto:

Kód: [Vybrat]
GnuTLSEnable on
GnuTLSPriorities NORMAL
GnuTLSCertificateFile /path-to/fullchain-cert.pem
GnuTLSKeyFile /path-to/key.pem
Toto naozaj neviem ci je s podporou SNI, alebo nie.

PS 2 dni budem off, takze sa s tym nemozem hrat  :(

Re:problem s letsencrypt na androide
« Odpověď #28 kdy: 10. 07. 2018, 08:39:07 »
Pridal som tam vsetky certifikaty
Kód: [Vybrat]
SSLCertificateKeyFile    /etc/letsencrypt/live/web/privkey.pem
SSLCertificateFile       /etc/letsencrypt/live/web/cert.pem
SSLCertificateChainFile  /etc/letsencrypt/live/web/chain.pem
SSLCertificateChainFile  /etc/letsencrypt/live/web/fullchain.pem
a stejne to pise, ze certifikat pochadza z nedoverihodnej autority
A to vám Apache takhle vezme? A jste si jist, že si to přebere správně? Proč to zbytečně komplikujete a nedáte tam přesně tu konfiguraci, kterou jsem vám napsal? Případně variantu, kterou napsal ByCzech – pokud jsou certifikáty v fullchain.pem správně seřazené.

Jaké certifikáty vám server vrací si můžete ověřit pomocí openssl s_client. Např.:

Kód: [Vybrat]
% openssl s_client -connect root.cz:443
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = root.cz
verify return:1
---
Certificate chain
 0 s:/CN=root.cz
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
[…]
Důležitá je ta část pod Certificate chain. Musí tam být dva certifikáty, 0 bude certifikát vašeho serveru (místo root.cz), 1 bude to samé, co je v tomto výpisu, protože root.cz také používá Let's Encrypt.

Zdravim, takze mam nejake nove zistenia. Neviem z akeho dovodu, ale zacalo mi to fungovat. Ked som to overoval cez openssl klienta, tak uz to mam podobne ako vy: je tam aj certifikat 0 a aj 1
Kód: [Vybrat]
Certificate chain
 0 s:/CN=moj_web.com
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
Ale vyskytol sa dalsi problem.
Ja mam momentalne 3x virtualhost a 3x som generoval certifikaty pre kazdy virtualhost. Generovanie skoncilo vzdy vystupom "congratulations". Samozrejme vzdy bol vygenerovany jedinecny certrtifikat do konkretneho adresara (takze tam chyba nie je).
Tento vystup popisuje jeden certifikat. Druhy bol vygenerovany do, /etc/letsencrypt/live/moj_web1.com atd .....
Kód: [Vybrat]
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/moj_web.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/moj_web.com/privkey.pem
   Your cert will expire on 2018-09-26. To obtain a new or tweaked
   version of this certificate in the future, simply run
   letsencrypt-auto again. To non-interactively renew *all* of your
   certificates, run "letsencrypt-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
Problem ale vidim v tom, ze ked overujem certifikat, pre jeden z troch webov
Kód: [Vybrat]
openssl s_client -connect moj_web.com:443
openssl s_client -connect moj_web1.com:443
openssl s_client -connect moj_web2.com:443
Tak vzdy mam vysledok takyto:
Kód: [Vybrat]
Certificate chain
 0 s:/CN=moj_web.com
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
....
...
Vzda je tam moj_web.com. Cize vzdy to posiela certifikat z moj_web.com (a nie  moj_web1.com a  moj_web2.com)

Re:Certifikáty Let's Encrypt nefungují na Androidu
« Odpověď #29 kdy: 10. 07. 2018, 10:21:40 »
Když máte na jedné IP adrese a portu víc virtualhostů na HTTPS (rozlišených jménem), musí klient poslat na začátku SSL komunikace požadované jméno – ta technologie se jmenuje SNI. S OpenSSL tedy musíte navíc přidat parametr -servername.

Kód: [Vybrat]
openssl s_client -connect moj_web.com:443 -servername moj_web.com
openssl s_client -connect moj_web1.com:443 -servername moj_web1.com
openssl s_client -connect moj_web2.com:443 -servername moj_web2.com

Bez SNI server neví, které jméno serveru požadujete, tedy který má poslat certifikát, a použije první virtualhost v konfiguračním souboru.