Lemat, strona prywatna

Logowanie kartą PKI

Moje korpo używa kart PKI (taka karta z certyfikatem) do logowania do różnych systemów. Używa też zcentralizowanego logowania, które regularnie się zawiesza w godzinach szczytu. A gdyby tak pominąć SSO i logować się bezpośrednio kartą?

Potrzebny będzie mod_ssl https://httpd.apache.org/docs/2.4/mod/mod_ssl.html (oczywista oczywistość)

[VirtualHost]
SSLEngine on
SSLCertificateFile /etc/pki/tls/private/certyfikat.pem
SSLCertificateKeyFile /etc/pki/tls/private/key.pem
ServerName example.com
SSLOptions +StdEnvVars +ExportCertData
SSLVerifyClient require
SSLVerifyDepth 10
SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
SSLCADNRequestFile /etc/pki/ca-trust/source/anchors/CA.pem
SSLCARevocationFile /etc/pki/tls/crls/list.crl
SSLCARevocationCheck chain
[/VirtualHost]

[Directory "/protected"]
 [RequireAny]
#  Require ssl-verify-client
  Require expr %{SSL_CLIENT_SAN_Email_0} == "lemat@example.com"
  Require expr %{SSL_CLIENT_SAN_Email_0} == "lemat2@example.com"
 [/RequreAny]
[/Directory]

Gdzie:

SSLCADNRequestFile to jest certyfikat firmowy, który są podpisane karty PKI
SSL_CLIENT_SAN_Email_0 to pole, które zawiera adres email, w zasadzie lepiej by było używać SSL_CLIENT_M_SERIAL, tu poszedłem na łatwiznę bo adresy email sa znane, seriale - niekoniecznie.

Gdyby nastąpiła utrata karty PKI, to nowa karta zostanie wystawiona na ten sam adres email, ale z innym serialem. Stara karta powinna byc unieważniona przez Certificate Revocation List ale lepiej chuchać na zimne. (plik CRL należy pobierać i uaktualniać)

Jeżeli dajemy dostęp do strony całej firmie to wystarczy "Require ssl-verify-client".
Jeżeli dajemy dostęp do strony wyłącznie określonym osobom - używamy "Require expr".

Jak się do tego dobrać z poziomu PHP?
Jak zrobimy phpinfo() to pokaże się (dzięki SSLOptions +StdEnvVars +ExportCertData) w tablicy $_SERVER zawartość karty PKI. Możemy danego usera wtedy sprawdzić w jakiejś bazie danych, LDAPie - czy i jaki poziom dostępu powinien mieć user.


Data utworzenia : 2026-08-26

Skomentuj ten tekst

Protected by spf
[Nospam-PL.NET]
Seti@Home
www.php.net
© Lemat 2004 - ∞