Sziasztok,
van egy RedHat 7.9, azon egy Apache 2.4.6.
Az Apache-on két proxy context van beállítva, a két vhost-nak van saját tanúsítványa, ill. az Apache generált magánk telepítéskor egy sajátot: a CN a szerver FQDN-je, minden más Somewhere meg Somebody.
A következő viselkedés van restartonként, ciklikusan - anélkül, hogy bármit módosítanék a konfigon:
- első restart: az Apache mindenre a "saját" certet akarja használni, böngésző rinyál
- második restart: az apache az első vhost-nál az első vhost certet használja, a másik vhost egy API végpont, arra azt írja, hogy hálózati hiba lépett fel (ezt még meg kell néznem, pontosan mi a baja: csak a cert, vagy egyáltalán nem éri el a back-end szervert)
- harmadik restart: minden működik
- GOTO 1
És ez az egész tök szépen reprodukálható: csak megállítom és elindítom a httpd-t, és sorban ezek a hibák, vagy a helyes működés jön.
Van bárkinek bármi ötlete, merre és mit nézzek meg?
- 444 megtekintés
Hozzászólások
A httpd.apache.org-ról lenne itt szó? Mert akkor érdemes lenne a 2.4.48-at is kipróbni belőle.
- A hozzászóláshoz be kell jelentkezni
Igen. Enterprise licensz (vagy mi) van, nincs nagyon lehetőség forrásból feltenni. Meg hát ugye 7.9-es RH, az sem mai darab.
- A hozzászóláshoz be kell jelentkezni
És hogy van ez az automatikus Cert-generálás? Az valami önaláírt százévre szóló csodaság?
- A hozzászóláshoz be kell jelentkezni
Igen, kb :)
A CN az teljesen ua, mint a szerver FQDN, a cert induló dátuma meg a tegnapi, amikor telepítettem a mod_ssl-t. A többi az meg mókás, mert tényleg Somewhere meg Somebody... :)
Gondolom kb ua, mint Debian-nál a SnakeOil :).
- A hozzászóláshoz be kell jelentkezni
Mint úgy általában az apacs default installnál - de természetesen nem köll használni. 9x%, hogy a konfig van elbacarintva, mert nem egy és nem két helyen megy RHEL/CentOS 7-es széria+apache több domaint ssl-en is kiszolgálva...
- A hozzászóláshoz be kell jelentkezni
Nyilván nem egy és nem két helyen megy RHEL/CentOS X+1 apache több domaint SSL-en is kiszolgálva - ez nem is kérdés. :)
De konkrétan EZ mitől lehet, hogy ciklikusan újraindítva más-más a működés - anélkül, hogy a konfighoz hozzányúlnék.
Nyilván el is bacarinthatom a konfigot, de akkor nem megy. Soha. Egyáltalán. Nem pedig len(SSL hosztok száma) periódusonként előidézve a f*szságait.
- A hozzászóláshoz be kell jelentkezni
Minek? A RHEL-nél elég masszívan megy a sec.fixek backportolása, úgyhogy a RHEL/CentOS vonal esetén jelentős eltérés van az upstream verzió és a RHEL-es verzió között.
- A hozzászóláshoz be kell jelentkezni
Ha ez valami bug, az nem feltétlen security bug, amit mindenképp visszaemelnek - vagy igen?
- A hozzászóláshoz be kell jelentkezni
Nem Apache bug, hanem szinte biztosan olymódon elkeffintett konfig, amit az apachectl configtest nem hajít ki, hogy hibás.
- A hozzászóláshoz be kell jelentkezni
Úgy értem ha valami nem security bug lenne, akkor visszaemelné-e a vendor.
Mindegy... :)
- A hozzászóláshoz be kell jelentkezni
Config fájlok vannak? Mert ez valamilyen race condition lehet és/vagy a fájlok beolvasási sorrendje változik és amelyik később töltődik be, az csendesen felülcsapja az előzőt.
- A hozzászóláshoz be kell jelentkezni
A releváns részek:
# grep -i include conf/httpd.conf
Include conf.modules.d/*.conf
...
IncludeOptional conf.d/*.conf
# ls -1 conf.modules.d/*.conf
conf.modules.d/00-base.conf
conf.modules.d/00-dav.conf
conf.modules.d/00-lua.conf
conf.modules.d/00-mpm.conf
conf.modules.d/00-proxy.conf
conf.modules.d/00-ssl.conf
conf.modules.d/00-systemd.conf
conf.modules.d/01-cgi.conf
# ls -1 conf.d/*.conf
conf.d/autoindex.conf
conf.d/ssl.conf
conf.d/userdir.conf
conf.d/vhost_testwebapi.conf
conf.d/vhost_testweb.conf
conf.d/welcome.conf
Ezek közül az ssl.conf, vhost_testwebapi.conf és vhost_testweb.conf tartalmaz SSL beállítást:
conf.d/ssl.conf:SSLCertificateFile /etc/pki/tls/certs/localhost.crt
conf.d/ssl.conf:SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
conf.d/vhost_testwebapi.conf: SSLCertificateKeyFile /etc/httpd/ssl/testwebapi.key
conf.d/vhost_testwebapi.conf: SSLCertificateFile /etc/httpd/ssl/testwebapi.pem
conf.d/vhost_testwebapi.conf: SSLCertificateChainFile /etc/httpd/ssl/testwebapi.crt
conf.d/vhost_testweb.conf: SSLCertificateKeyFile /etc/httpd/ssl/testweb.key
conf.d/vhost_testweb.conf: SSLCertificateFile /etc/httpd/ssl/testweb.pem
conf.d/vhost_testweb.conf: SSLCertificateChainFile /etc/httpd/ssl/testweb.crt
A testweb kb egy statikus oldal, amit ennek ellenére egy Tomcat szolgál ki (ahogy a testwebapi-t is), valami generált JS. Már az ott megjelenő tartalomhoz is kell a testwebapi.
Ma reggel még teszteltem, igazából a ciklikus ismétlődés nem áll, inkább random dobálja be a certeket. Van olyan, hogy az ssl.conf-ban levő cert jön be mindkét oldalhoz (testweb, testwebapi). Van olyan, hogy a testweb oldal bejön a saját certjével, , de a testwebapi az ssl.conf-ban beállított certet használja. És van olyan is, amikor mindkét oldal a neki beállított certet használja.
Ezt a beolvasás sorrendjét más is mondta már (nem itt), de több dolgot sem értek ezzel kapcsolatban:
- van lehetőség explicit determinisztikus sorrendet megadni? Debian esetében pl. a sites-enabled alatt levő konfigok ABC sorrendben töltődnek be
- igazából nem tök mindegy, mi a sorrend? A VHOST-nak van beállítva ServerName, akkor miért nem az ott megadott certet használja?
- A hozzászóláshoz be kell jelentkezni
Próbáld megnézni az indulást DUMP_CONFIG használatával, ez kiírja az effektív konfigurációt, ahogy azt feldolgozta, abban látszódnia kell annak, hogy mit olvas be másképp vagy más sorrendben és mi okozza ezt a hibát.
- A hozzászóláshoz be kell jelentkezni
Köszi a tippet, megnéztem, többször elindítottam így. A DUMP ugyanaz lett minden indításnál, viszont a működés megmaradt: összevissza kezeli a certeket.
Amúgy a felolvasás sorrendje:
- ssl.conf
- testwebapi
- testweb
minden esetben.
- A hozzászóláshoz be kell jelentkezni
Hm... akkor nincs több ötletem, akkor valamelyik modul esetén bug lehet...
- A hozzászóláshoz be kell jelentkezni
A VirtualHost-oknál ugye *:443 van?
- A hozzászóláshoz be kell jelentkezni
Igen.
Ennek ellenére ezt vágja az arcomba ez a dög induláskor:
[Fri Jul 09 10:19:47.422339 2021] [ssl:debug] [pid 5619] ssl_util_ssl.c(508): AH02412: [testweb.mydomain.hu:443] Cert does not match for name 'testweb.mydomain.hu' [subject: emailAddress=root@SRV-WEB-TEST.mydomain.local,CN=SRV-WEB-TEST.mydomain.local,OU=SomeOrganizationalUnit,O=SomeOrganization,L=SomeCity,ST=SomeState,C=-- / issuer: emailAddress=root@SRV-WEB-TEST.mydomain.local,CN=SRV-WEB-TEST.mydomain.local,OU=SomeOrganizationalUnit,O=SomeOrganization,L=SomeCity,ST=SomeState,C=-- / serial: 20EC / notbefore: Jul 7 15:19:03 2021 GMT / notafter: Jul 7 15:19:03 2022 GMT]
Amúgy a konfig releváns része (a log sor a beállított logból származik):
<VirtualHost *:443>
ServerName testweb.mydomain.hu
SSLEngine On
ErrorLog /var/log/httpd/testweb.mydomain.hu-error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel debug
LogFormat "\"%{BALANCER_WORKER_NAME}e\" \"%{Set-Cookie}o\" %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" custom
CustomLog /var/log/httpd/testweb.mydomain.hu-access.log combined
SSLCertificateKeyFile /etc/httpd/ssl/testweb.mydomain.hu.key
SSLCertificateFile /etc/httpd/ssl/testweb.mydomain.hu.pem
SSLCertificateChainFile /etc/httpd/ssl/testweb.mydomain.hu.crt
És akkor még a teljesség kedvéért:
# openssl x509 -in /etc/httpd/ssl/testweb.mydomain.hu.pem -noout -subject
subject= /CN=testweb.mydomain.hu
- A hozzászóláshoz be kell jelentkezni
Ebben a háromban mi van?
conf.d/ssl.conf
conf.d/vhost_testwebapi.conf
conf.d/vhost_testweb.conf
- A hozzászóláshoz be kell jelentkezni
Az utolsó kettő kb megegyezik, csak a neveket cseréltem ki.
Az ssl.conf-ban sallangmentesítve:
Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost *:443>
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
- A hozzászóláshoz be kell jelentkezni
Ill észrevettem még egy sort most a debug beállítással:
[Fri Jul 09 10:28:03.068797 2021] [ssl:debug] [pid 5684] ssl_util_ssl.c(508): AH02412: [testweb.mydomain.hu:443] Cert does not match for name 'testweb.mydomain.hu' [subject: emailAddress=root@SRV-WEB-TEST.mydomain.local,CN=SRV-WEB-TEST.mydomain.local,OU=SomeOrganizationalUnit,O=SomeOrganization,L=SomeCity,ST=SomeState,C=-- / issuer: emailAddress=root@SRV-WEB-TEST.mydomain.local,CN=SRV-WEB-TEST.mydomain.local,OU=SomeOrganizationalUnit,O=SomeOrganization,L=SomeCity,ST=SomeState,C=-- / serial: 20EC / notbefore: Jul 7 15:19:03 2021 GMT / notafter: Jul 7 15:19:03 2022 GMT]
[Fri Jul 09 10:28:03.068803 2021] [ssl:warn] [pid 5684] AH01909: RSA certificate configured for testweb.mydomain.hu:443 does NOT include an ID which matches the server name
[Fri Jul 09 10:28:03.068807 2021] [ssl:debug] [pid 5684] ssl_engine_init.c(988): AH02236: Configuring RSA server private key
[Fri Jul 09 10:28:03.088365 2021] [ssl:info] [pid 5684] AH02200: Loading certificate & private key of SSL-aware server 'testweb.mydomain.hu:443'
[Fri Jul 09 10:28:03.088457 2021] [ssl:debug] [pid 5684] ssl_engine_pphrase.c(506): AH02249: unencrypted RSA private key - pass phrase not required
[Fri Jul 09 10:28:03.088981 2021] [ssl:info] [pid 5684] AH01914: Configuring server testweb.mydomain.hu:443 for SSL protocol
[Fri Jul 09 10:28:03.089057 2021] [ssl:debug] [pid 5684] ssl_engine_init.c(886): AH01904: Configuring server certificate chain (1 CA certificate)
[Fri Jul 09 10:28:03.089061 2021] [ssl:debug] [pid 5684] ssl_engine_init.c(406): AH01893: Configuring TLS extension handling
[Fri Jul 09 10:28:03.089064 2021] [ssl:debug] [pid 5684] ssl_engine_init.c(933): AH02232: Configuring RSA server certificate
[Fri Jul 09 10:28:03.089099 2021] [ssl:debug] [pid 5684] ssl_util_ssl.c(508): AH02412: [testweb.mydomain.hu:443] Cert matches for name 'testweb.mydomain.hu' [subject: CN=testweb.mydomain.hu / issuer: CN=R3,O=Let's Encrypt,C=US / serial: 03981F9757F723F1D280B0EC4000000000000 / notbefore: Apr 20 09:34:59 2021 GMT / notafter: Jul 19 09:34:59 2021 GMT]
szóval az első sorban jelzi, hogy nem egyezik a certben levő CN a vhost ServerName-el, majd az utolsóban, kb 0.2 mp-el később meg betölti.
Ez most épp egy működő állapot.
Szerk:
és akkor egy hibás indulás ismét:
[Fri Jul 09 10:37:07.888173 2021] [ssl:debug] [pid 5733] ssl_util_ssl.c(508): AH02412: [testweb.mydomain.hu:443] Cert matches for name 'testweb.mydomain.hu' [subject: CN=testweb.mydomain.hu / issuer: CN=R3,O=Let's Encrypt,C=US / serial: 03981F9757F723F1D280B0EC4D74455C4771 / notbefore: Apr 20 09:34:59 2021 GMT / notafter: Jul 19 09:34:59 2021 GMT]
[Fri Jul 09 10:37:07.888177 2021] [ssl:debug] [pid 5733] ssl_engine_init.c(988): AH02236: Configuring RSA server private key
[Fri Jul 09 10:37:07.905102 2021] [ssl:info] [pid 5733] AH02200: Loading certificate & private key of SSL-aware server 'testweb.mydomain.hu:443'
[Fri Jul 09 10:37:07.905192 2021] [ssl:debug] [pid 5733] ssl_engine_pphrase.c(506): AH02249: unencrypted RSA private key - pass phrase not required
[Fri Jul 09 10:37:07.905732 2021] [ssl:info] [pid 5733] AH01914: Configuring server testweb.mydomain.hu:443 for SSL protocol
[Fri Jul 09 10:37:07.905809 2021] [ssl:debug] [pid 5733] ssl_engine_init.c(886): AH01904: Configuring server certificate chain (1 CA certificate)
[Fri Jul 09 10:37:07.905813 2021] [ssl:debug] [pid 5733] ssl_engine_init.c(406): AH01893: Configuring TLS extension handling
[Fri Jul 09 10:37:07.905815 2021] [ssl:debug] [pid 5733] ssl_engine_init.c(933): AH02232: Configuring RSA server certificate
[Fri Jul 09 10:37:07.905869 2021] [ssl:debug] [pid 5733] ssl_util_ssl.c(508): AH02412: [testweb.mydomain.hu:443] Cert does not match for name 'testweb.mydomain.hu' [subject: emailAddress=root@SRV-WEB-TEST.mydomain.local,CN=SRV-WEB-TEST.mydomain.local,OU=SomeOrganizationalUnit,O=SomeOrganization,L=SomeCity,ST=SomeState,C=-- / issuer: emailAddress=root@SRV-WEB-TEST.mydomain.local,CN=SRV-WEB-TEST.mydomain.local,OU=SomeOrganizationalUnit,O=SomeOrganization,L=SomeCity,ST=SomeState,C=-- / serial: 20EC / notbefore: Jul 7 15:19:03 2021 GMT / notafter: Jul 7 15:19:03 2022 GMT]
Először megtalálja a jó certet, aztán előveszi a másikat.
- A hozzászóláshoz be kell jelentkezni
Hm... nem lehet, hogy számít, hogy az ssl.conf vagy a testweb*.conf töltődik-e be először? Az ssl.conf default cert az, ami rossz, gondolom.
- A hozzászóláshoz be kell jelentkezni
Hm... nem lehet, hogy számít, hogy az ssl.conf vagy a testweb*.conf töltődik-e be először? Az ssl.conf default cert az, ami rossz, gondolom.
Hát megmondom őszintén, nem tudom, hogy számít-e. Ha számít, akkor amúgy miért számít? A <Virtualhost> nem elég egyértelmű jelölés?
Amúgy igen, az ssl.conf-ban levő cert (ami amúgy nem default, hiszen miért lenne az default?) amit feleslegesen tölt be ebben a kontextusban.
És a logokat megnézve néha azt tölti be először, néha meg a jót - néha pedig fordítva.
Az mondjuk fura, hogy miért ezt veszi elő, és pl a testweb vhost-ban miért nem jelenik meg a testwebapi, ill viszont?
Nem értem... soha nem találkoztam még ilyennel.
- A hozzászóláshoz be kell jelentkezni
Amúgy igen, az ssl.conf-ban levő cert (ami amúgy nem default, hiszen miért lenne az default?) amit feleslegesen tölt be ebben a kontextusban.
Azért default, mert egy host hivatkozás nélküli VirtualHost blokkon belül van. Azt gyanítom, hogy ha ezt tölti be utólag, akkor felülcsapja a másik két VirtualHost szekcióban a cert hivatkozást.
Az mondjuk fura, hogy miért ezt veszi elő, és pl a testweb vhost-ban miért nem jelenik meg a testwebapi, ill viszont?
Mert azok nevesített VirtualHost blokkok.
- A hozzászóláshoz be kell jelentkezni
Ah, köszi, ez adott egy ötletet.
Ez van az ssl.conf-ban:
# General setup for the virtual host, inherited from global configuration
#DocumentRoot "/var/www/html"
#ServerName www.example.com:443
hádde' nincs honnan öröklődnie, mivel nem volt beállítva a ServerName sehol... :(
Most beállítottam, visszatettem az eredeti ssl.conf-ot, és máris jó.
Szóval köszi, jövök egy sörrel :).
- A hozzászóláshoz be kell jelentkezni
A derék VirtualHostok egyazon IP+porton vannak, ugye? Szóval a Sajátos Nevelési Igényű felhasználókon kellene múljon, hogy melyik cert-et veszi elő a szerver.
- A hozzászóláshoz be kell jelentkezni
Igen, mindenhol <VirtualHost *:443> van.
Mondjuk NameVirtualHost direktíva nincs sehol, de valahol úgy olvastam, hogy egy ideje már nem kell. Most megnéztem más szervereken, de sehol nincs beállítva (és érdekes mód működik :)).
- A hozzászóláshoz be kell jelentkezni
Az ssl.conf-ból kivettem a <VirtualHost> blokkot teljes egészében. Az ott levő SSLProtocol és SSLCipherSuite direktívákat átpakoltam a kontexten kívül.
Így most nincs "default" cert, és tadámm: minden működik. Legalábbis többszöri restart után is megy minden, a logokban nincs semmi not matched cert.
Tanulság nincs.
- A hozzászóláshoz be kell jelentkezni
Az ssl.conf egy "gyári" fájl, vagy szerkesztés eredményeképp lett ilyen?
- A hozzászóláshoz be kell jelentkezni
Az eredeti, amit itt mutattam, az gyári, nem csináltam vele semmit a "megoldásig".
- A hozzászóláshoz be kell jelentkezni
Ha nem csak a default szolgáltatásod van, akkor oda nem is kell/nem is szabad vhost-ot rakni, ha jól rémlik...
- A hozzászóláshoz be kell jelentkezni
Ezt nem tudom, Debian/Ubuntu alatt ki szoktam pucolni. Valszeg itt is ez volt a gond.
- A hozzászóláshoz be kell jelentkezni
nalam a default igy nez ki
<VirtualHost _default_:443>
#ServerName nincs
a tobbi
<VirtualHost *:443>
ServerName van
neked aztan fura humorod van...
- A hozzászóláshoz be kell jelentkezni
Milyen verzió?
- A hozzászóláshoz be kell jelentkezni
# apt-show-versions | grep apache2
apache2:amd64/buster 2.4.38-3+deb10u5
neked aztan fura humorod van...
- A hozzászóláshoz be kell jelentkezni
Itt 2.4.6, ki tudja, ekkor még mi volt az elképzelés ezzel a default akármikkel :)
- A hozzászóláshoz be kell jelentkezni
Ill mégiscsak van.
- A hozzászóláshoz be kell jelentkezni