Avem un serviciu intern care rulează pe HTTP cu o instanță Apache 2.4 (Debian Bullseye) pusă în față ca proxy pentru HTTPS. Apache și HTTPS sunt în funcțiune, dar o cerință suplimentară este pentru certificatele client -- în mod specific, cererile GET și HEAD pot decurge anonim, dar toate celelalte metode trebuie să prezinte un certificat client valid care să îndeplinească anumite condiții.
Software-ul pe care îl construim vizează IIS, așa că Apache este o cantitate necunoscută pentru noi (de atunci implementatorul original a plecat). Încercările noastre de a adapta configurația pe care am moștenit-o au porțiunea site-ului din configurație (omițând directivele căii fișierului certificat) ca:
SSLVerifyClient opțional
SSLVerifyDepth 10
ProxyPass /intern http://<IPintern>:/intern
ProxyPassReverse /internal http://<internalIP>:/internal
SSLOptions +StdEnvVars
<Locație /internă>
Comanda refuzată, permiteți
Permite de la toți
<LimitExcept GET>
SSLRequire ( %{SSL_CLIENT_S_DN_O} eq „(org)” și %{SSL_CLIENT_S_DN_OU} eq „(unitate)” și %{SSL_CLIENT_S_CN} eq „(nume)” )
</LimitExcept>
</Locație>
Nu am încercat încă acest lucru cu un certificat de client de ex. POST pentru că un simplu GET to https://<proxy>/internal
acum eșuează cu un mesaj 403 și errors.log:
AH02229: accesul la proxy:http://{internalIP}/internal a eșuat, motiv: expresia cerinței SSL nu a fost îndeplinită
La prima vedere, aceasta arată ca SSLRequire
verificarea este aplicată și pentru GET, spre deosebire de <LimitExcept>
.
Există o combinație de directive pe care le putem folosi pentru a obține comportamentul dorit? (În mod ideal, unul care se îndepărtează de ceea ce aparent acum este depreciat SSLRequire
de asemenea.)