Autor Zpráva
Peet
Profil
Ahoj,

rozhodl jsem se, ze bych konecne presel na https, a tak jsem zacal cist ruzne clanky a zajimat se o to.

Jsem ve fazi kdy zhruba vim jak ssl funguje jak si predava klice atp.
Nicmene chci se zeptat chtel bych pouzit ssl jak na localu tak i na vps, co jsem pochopil, tak openssl je funkce ktera vztvari self-signed certifikaty, tudiz nejsou podepsane autoritou (jestli to dobre chapu), hodi se tedz treba na localhost.

Dalsi vec je vps bezi na debianu, zde bych chtel vyuzit lets encrypt, ale otazka zni jak. Mam tu resit take neco s openssl nebo k cemu presne to openssl je.

Pote bych mel jeste takovej specialni dotaz a to ten, ze me napadlo, ze bych si vytvoril nejaky vlastni certifikat a tim se musel nejak pred vstupe overit, hodilo by se to treba ke vstupu do phpmyadmina na vps. Tudiz bych se do neho dostal pouze z pc kde bych mel ten certifikat, da se to nejak udelat ?

Predem diky vsem kdo mi trochu ujasni to generovani a i treba nasledne obnovovani certifikatu a jestli musim pro kazdou domenu na vps vztvaret vlastni cert nebo staci jeden kam pridam vsechny domeny ..?

Diky za pomoc
Kajman
Profil
OpenSSL je knihovna. Jedna z věcí, co umí, je generování self-signed certifikátů.

Let`s Encrypt podepisuje zadarmo certifikát jen na 3 měsíce, proto se zpravidla programuje automatická obnova, která certifikát každý měsíc přegeneruje. Pokud Vám to zabere hodně drahoceného času, může být pro jeden web levnější koupit placený certifikát třeba na 2 roky a za 2 roky ho ručně obnovit.

Certifikáty na straně klienta jsou tuším při https také možné. Server musí důvěřovat CA, která ho podepsala. Snad chrome by je měl podporovat. Zkuste si pohledat
SSLVerifyClient    require
TomášK.
Profil *
Dalsi vec je vps bezi na debianu, zde bych chtel vyuzit lets encrypt, ale otazka zni jak. Mam tu resit take neco s openssl nebo k cemu presne to openssl je.

openssl je knihovna + aplikace, která umí (mimo jiné) operace s certifikáty - vytvořit, podepsat, zobrazit, ověřit apod. Let's encrypt je služba, která certifikáty vydává. Protokol, kterým se s tou službou komunikuje openssl neumí. Apache (nová verze) dokáže Let's encrypt nastavit přímo v něm (klíčové slovo mod_md), jinak je potřeba použít něco, co se službou umí komunikovat, třeba github.com/Neilpang/acme.sh.

... ze bych si vytvoril nejaky vlastni certifikat a tim se musel nejak pred vstupe overit, hodilo by se to treba ke vstupu do phpmyadmina na vps. Tudiz bych se do neho dostal pouze z pc kde bych mel ten certifikat, da se to nejak udelat ?

Ano, říká se tomu klientský certifikát. Pomocí openssl jde vytvořit, na webserveru pak nastavit, aby pustil jen klienty, kteří se prokážou certifikátem od dané CA. Prohlížeče to běžně umí.

...nasledne obnovovani certifikatu a jestli musim pro kazdou domenu na vps vztvaret vlastni cert nebo staci jeden kam pridam vsechny domeny ..?

Jeden certifikát může obsahovat i více domén. Většinou mám certifikát pro každého Virtual Hosta (resp. jeho obdoby).
Keeehi
Profil
Kajman:
proto se zpravidla programuje automatická obnova, která certifikát každý měsíc přegeneruje.
Sice si to člověk může naprogramovat sám, ale existuje spousta klientů, kteří to dělají. Když člověk ví co dělá, tak to má za pár minut nastavené. Pokud ne, tak existuje spousta návodů, podle kterých se dá postupovat. Může to být na trochu déle, ale spíš než o programování jde o to se naučit pracovat s programem, který si vybereš.
Peet
Profil
Diky za vase odpovedi.

Ano doslo mi ze openssl je knihovna, jen jsem nevedel jestli ji potrebuju i k tem certifikatum od lets encrypt, resp jestli s nim umi komunikovat, nebo treba jestli se jen stara o tu komunikaci mezi klientem a serverem, ale vychazi mi z toho tedy, pokud to spravne chapu, ze pro nasazeni podepsanych certifikatu openssl vubec nepotrebuju, ta se hodi jen pro local a self signed certifikaty.

Na to acme jsem koukal a vypada to dobre, libi se mi, ze je i sam aktualizuje, jen jsem prave nemel jasno jak je to s tim openssl protoze se o tom dost mluvi, tak jsem se radsi chtel ujistit nez si s tim zacnu hrat.

Ohledne ten virtualhostu bylo by asi idealni mit na kazdeho vhosta vlastni certifikat, jen jsem nekde cetl, ze se vydava pouze na jednu ip, ze udajne pri kontaktovani serveru se nejdriv musi overit ssl certifikat a az pote probehne vymena hlavicek jakozto i nazvu domeny a vtu chvily se pouziva nejake SNI kde je jeden cert na nekolik domen, zhlediska implementace asi jednodussi, ale zase to pry nejake starsi browsery neumi, ale tezko rict neblyly to aktualni informace.
Keeehi
Profil
Peet:
ale zase to pry nejake starsi browsery neumi
Podpora SNI je více než dobrá. Informace jsou pravdivé, IE 8 a starší opravdu neumí SNI. Ovšem platí to jen na Windows XP. Na Windows Vista a novějších umí SNI jak IE 8 tak i IE 7. IE nebyl jediný, kdo ze začátku SNI neuměl, ale asi se nejvíce mluvilo právě o něm.

Pokud návštěvníci nepatří do skupiny uživatelů velmi zastaralých konfigurací, nemusíš se SNI bát.
Peet
Profil
Keeehi:
Diky, myslel jsem si to, ale chapu to tedy spravne, ze pokud mam jednu ip, tak mohu pouzit pouze to SNI.
A jak je to tedy pak v praxi ? Dejme tomu, ze mam v ruce nejaky certifikat at uz vzgenerovany pres openssl nebo treba pres lets encrypt, tak predpokladam ze je to nekolik souboru, tusim ze 3 ? jeden .cert a dva klice ?

Takze ten certifikat by mel obsahovat info o domenach ktere pod nim chci mit a pote ten cert nekam umistim a ve virtualhostu ho nalinkuju a zapnu nejake to ssl nastaveni ? Tudiz bude jen jeden na celem serveru. A kdyz budu chtit novou domenu, tak ho budu muset pregenerovat s dalsi domenou ?

Diky.
Keeehi
Profil
Peet:
Pokud máš jednu IP adresu, tak buď můžeš mít jen jeden certifikát a nebo více certifikátů s využitím SNI.

tusim ze 3 ? jeden .cert a dva klice ?
Většinou bývají dva. Certifikát a klíč.

Takze ten certifikat by mel obsahovat info o domenach ktere pod nim chci mit a pote ten cert nekam umistim a ve virtualhostu ho nalinkuju a zapnu nejake to ssl nastaveni ?
Ano.

Tudiz bude jen jeden na celem serveru. A kdyz budu chtit novou domenu, tak ho budu muset pregenerovat s dalsi domenou?
Za předpokladu že nechceš SNI, pak ano a ano.
Peet
Profil
Keeehi:
Chapu, takze jaky presne je rozdil pouziti jednoho certu oproti SNI ? Je i nejaky rozdil v konfiguraci ?

Protoze jinak mi to prijde ze bude vzgeneruji jeden cert a ten nastavim vsem vhostum a nebo pro kazdy vhost (domenu) vzgeneruju vlastni a nalinkuju kazdemu svuj - coz je tedy to SNI.
Ale ve vysledku bude bezpecnost stejna v obou pripadech, jen treba v podrobnostech o protokolu bude uvedeno vice domen ? Taky asi otazka kolik domen muze byt na jednom certifikatu.

Co bys doporucil ty ? Jeden certifikat nebo SNI ?

Diky
Keeehi
Profil
Peet:
Je i nejaky rozdil v konfiguraci ?
Ani ne. Jediný rozdíl je v cestě/cestách k certifiátu/certifikátům. Ale to je snad jasné.

Taky asi otazka kolik domen muze byt na jednom certifikatu.
100

Co bys doporucil ty ? Jeden certifikat nebo SNI ?
Rozhodně více. V případě kompromitace jednoho nebudou další postiženy. Ono spojený certifikát má ještě jednu vadu na kráse. Jedna z těch domén je uvedena jako hlavní a ostatní jsou jako alternativní jména. Na funkčnost to nemá vliv ale vypadá to podivně, pokud jsou v certifikátu úplně nesouvisející domény.
Peet
Profil
Keeehi:
Mockrat diky za vysvetleni :)

Takze idealne generovat pro kazdy vhost zvlast nejak takto

openssl req -new -x509 -sha256 -days 365 -nodes -out /etc/ssl/certs/nejakyweb.local.crt -keyout /etc/ssl/private/nejakyweb.local.key

ikdyz mozna bude lepsi ukladat do folderu s webem ? (pochopitelne v diru bez pristupu)

Akorat ted me jeste tak napada, ze u openssl je mu asi uplne jedno pro jaky je nazev domeny, jelikoz ji nikam neregistruje nebo se pletu ? Proste mi vygeneruje random certifikat a ulozi do potrebnych souboru.
Keeehi
Profil
Peet:
ikdyz mozna bude lepsi ukladat do folderu s webem?
No to ani náhodou. Když už, tak ke konfiguraci virtualhosta.

openssl je mu asi uplne jedno pro jaky je nazev domeny, jelikoz ji nikam neregistruje nebo se pletu ?
Ano, můžeš si klidně vygenerovat certifikát pro doménu google.com
Peet
Profil
A jeste posledni dotaz a to je jen ohledne -nodes resp. co presne dela, a proc je dobre ho pouzit. Diky
Keeehi
Profil
To říká, aby se nešifroval privátní klíč. Proč je dobré ho nešifrovat? Protože aby ho mohl server použít, musel by si ho nejdříve rozšifrovat. Na to by potřeboval heslo, které by musel nějak zadávat.
Peet
Profil
Ok,

tak se mi to podarilo rozchodit na localu, brzy to zkusim i na serveru, certifikaty ukladam do /etc/apache2/ssl

jinak k cemu presne slouzi toto nastaveni vhostu

 <FilesMatch "\.(cgi|shtml|phtml|php)$">
                        SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                        SSLOptions +StdEnvVars
        </Directory>

A jeste jsem zjistil, ze by se mel jeste udavat nejaky soubor ssl keychain, k cemu slouzi nebo jak se pouziva ?

Opet velke diky
Keeehi
Profil
Přidává to informace o SSL do proměnných prostředí. V PHP by se měly objevit v poli $_SERVER a budou začínat SSL_.
Peet
Profil
Keeehi:

Tak uz se snazim rozbehat letsencrypt pomoci acme.sh a v navodu na interval.cz je pekny navod i pochopitelny, jedina vec, ktere nerozumim je vytvoreni aliasu na webroot je to asi 3ti odstavec v tomto clanku [Uprava web serveru a mluvi se tam o .well-known, jestli to spravne chapu, tak se da pomoci location prikazu zaregistrovat alias pro cestu, ale v tomhle pripade to vazali na adresar uzivatele letsencrypt coz nechapu a dale uz alias .well-known neni nikde pouzity. Ja mam weby ve /var/www (default) takze bych mel udelat nejaky alias pro tuto cestu ? k cemu ? proc ?

Diky moc za vysvetleni, je to asi posledni otaznik ohledne ssl :)
TomášK
Profil
Let's encrypt před vytvořením certifikátu ověřuje, že máš pod kontrolou doménu. acme.sh zažádá o vytvoření certifikátu, dostane token (soubor), který musí na webu s danou doménou vystavit na adrese http://example.com/.well-known/<secret-token>, let's encrypt zkontroluje, že tam opravdu je a pak vystaví certifikát. acme.sh vytváří ten token v adresáři ~/webroot, aby se token zobrazil na webu na správné adrese, je potřeba a apachi nastavit přesměrování, které je tam uvedené. Je možné to nastavit i tak, aby se tokeny ukládaly jinde, v článku je použité výchozí nastavení.

* Nejsem si jistý, jak se generuje ten token, ale není to podstatné.
Peet
Profil
TomášK:
No pockat, on si tedy overuje tu domenu ze k ni mas pristup, tudiz on si pak zavola primo tu domenu s tim .well-known (to je teda defaultni pojmenovani aliasu, ktery pouziva lets encrypt k overeni) a tim ze udelam toto

Alias /.well-known/ /home/letsencrypt/webroot/.well-known/
<Directory /home/letsencrypt/webroot/>
    AllowOverride None
    Require all granted
    Satisfy Any - toto rika co ?
</Directory>

Tohle muzu teda nastavit bud vhostu nebo globalne, a je to zkratka presmerovani kdyz bude http obsahovat cokoliv/.well-known tak ho hodi do adresare letsencrypt, kam to uklada defaultne acme.sh (tedy uklada to do slozky webroot uzivatele, ktery o certifikat zada.)

Tudiz ty tokeny tam pak nejak zustavaji nebo se overi a smaze nebo ?
Keeehi
Profil
Peet:
Tudiz ty tokeny tam pak nejak zustavaji nebo se overi a smaze nebo ?
Nevím, myslím že je maže. Ale to je tak složité to zkusit a pak se podívat?

Před otazníkem se nepíše mezera. Zkus to prosím dodržovat, jinak se to špatně čte.
Peet
Profil
Jasny, diky vyzkousim. A jeste me jen napada kdybych nekdy chtel certifikaty prenest na jiny server, tak staci premigrovat certifikaty nainstalovat acme a navest cron do diru a temy certifikaty ?
Keeehi
Profil
Peet:
Nikdy jsem to nepotřeboval, takže zkušenosti nemám, ale tebou popsaný postup dává smysl a zdá se, že by měl takto fungovat.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: