X.509 сертификат асосида аутентификациянинг энг кўп учрайдиган ишлатилиши - бу SSL-протоколи орқали сервернинг асллигини текшириш, бу эса кўпинча браузердан HTTPS ишлатишда содир бўлади. Браузер автоматик равишда сервер томонидан тақдим этилган сертификатни, унинг рўйхатдаги ишончли сертификатлаш марказларидан бири томонидан берилганлигини (яъни рақамли имзо билан имзоланган) текширади.
Сиз ҳам "ўзаро аутентификация" билан SSL-протоколдан фойдаланишингиз мумкин; бу ҳолда сервер мижоздан SSL-протокол бўйича алоқа ўрнатишни тасдиқлаш элементи сифатида амал қилувчи ҳақиқий сертификатни сўрайди. Сервер мижозни аутентификация қилади, унинг сертификати ҳақиқий сертификатлаш марказидан имзоланганлигини текшириш орқали. Агар ҳақиқий сертификат кўрсатилган бўлса, уни сервлет API орқали дастурда олиш мумкин. X.509 учун Spring Security модули сертификатни фильтр орқали олиб чиқади. У сертификатни дастур мижози билан мувофиқлаштиради ва Spring Security стандарт инфратузилмаси билан ишлатиш учун бу мижознинг берилган ваколатларини юклайди.
Сертификатлардан фойдаланиш ва мижоз аутентификациясини сервлет контейнерингиз учун созлашни Spring Security билан фойдаланишга уринишдан аввал ўрганишингиз лозим. Асосий иш - бу тегишли сертификатлар ва калитларни яратиш ва ўрнатишда. Масалан, агар сиз Tomcatдан фойдалансангиз, бу ердаги кўрсатмаларни ўқинг https://tomcat.apache.org/tomcat-9.0-doc/ssl-howto.html. Бу ҳамма нарса Spring Securityдан фойдаланишга уринишдан олдин тўғри ишлаши кераклиги муҳим.
Веб-досволарингизга X.509 асосида аутентификацияни қўшиш
X.509 асосида мижоз аутентификациясини фаоллаштириш жуда осон. Бу фақат <x509/> элементни http хавфсизлик номи пространства конфигурациясига қўшишни талаб қилади.
<http>
...
<x509 subject-principal-regex="CN=(.*?)," user-service-ref="userService"/>;
</http>
Элементда иккита ихтиёрий атрибут бор:
-
subject-principal-regex. Бу сертификат субъекти номи ичидаги фойдаланувчи номини чоп этиш учун ишлатилган регуляроқ вырожение. Ўрнатилган стандарт кўрсатилган. Бу фойдаланувчи номиниUserDetailsServiceга юклаш учун юкланган. -
user-service-ref. Бу X.509 билан ишлатиш учун ишлатилганUserDetailsServiceфункцонинг идентификатори. Агар контекстда фақат бир хил функция аниқланган бўлса, унинг керак эмас.
Subject-principal-regex бир гуруҳни ўз ичига олиши керак. Масалан, "CN=(.*?)," деб аталган стандарт вырожение умумий ном майдонига мос келади. Шундай қилиб, агар субъекти сертификатдаги номи "CN=Jimi Hendrix, OU=..." бўлса, фойдаланувчи номи "Jimi Hendrix" бўлади. Мос келиш регистрни инобатга олмайди. Шундай қилиб, "emailAddress=(.*?)," "EMAILADDRESS=jimi@hendrix.org,CN=…"га мос келади ва натижада фойдаланувчи номи "jimi@hendrix.org" бўлади. Агар мижоз сертификатни тақдим қилса, ва ҳақиқий фойдаланувчи номи муваффақиятли олинса, хавфсизлик контекстида ҳақиқий Authentication объекти пайдо бўлиши лозим. Агар сертификат топилмаса, ёки мос келувчи фойдаланувчи топилмаса, хавфсизлик контексти бўш қолади. Бу сизга X.509 асосидаги аутентификацияни форма билан кириш каби бошқа варианлар билан осонлик билан ишлатиш имконини беради.
Tomcatда SSL-протоколни созлаш
Spring Security учун намунавий репозиторийда бир неча олдиндан генерацияланган сертификатлар бор. Агар ўзингизнинг сертификатларингизни генерациялашни хоҳламасангиз, тест қилиш мақсадида SSL-протоколни фаоллаштириш учун уларни ишлатишингиз мумкин. server.jks файли сервер сертификати, ёпиқ калити ва сертификатлаш маркази сертификатини ўз ичига олади. Шунингдек, намуна дастур фойдаланувчилари учун бир нечта мижоз сертификатлари файллари бор. Уларни мижоз аутентификациясини SSL-протоколи орқали амалга ошириш учун браузерингизга ўрнатишингиз мумкин.
Tomcatни SSL-протоколни қўллаб-қувватлаш билан ишга тушириш учун, server.jks файлини tomcat каталогининг conf папкасига жойлаштиринг ва server.xml файлига қуйидаги коннекторни қўшинг
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="${catalina.home}/conf/server.jks"
keystoreType="JKS" keystorePass="password"
truststoreFile="${catalina.home}/conf/server.jks"
truststoreType="JKS" truststorePass="password"
/>
clientAuthни want қийматига ўрнатиш мумкин, агар мижоз сертификат тақдим этмаган бўлса ҳам SSL-протокол орқали алоқалар муваффақиятли ўрнатилиши керак бўлса. Агар мижоз сертификат тақдим этмаса, улар Spring Security билан муҳофаза қилинган объектларга кириш имконига эга бўлмайдилар, агар сиз X.509дан бошқа аутентификация механизмидан фойдаланмасангиз, масалан, форма орқали аутентификация.
GO TO FULL VERSION