X.509 сертификатына негізделген аутентификацияның ең кең таралған қолданылуы – бұл сервердің шынайылығын тексеру, SSL-протоколын қолданған кезде, көп жағдайда браузерден HTTPS қолданылған кезде. Браузер автоматты түрде сервер ұсынған сертификаттың тізімде көрсетілген сенімді сертификаттау орталықтарының бірімен шығарылғанын (яғни, цифрлық қолтаңбамен қол қойылғанды) тексереді.
Сіз сондай-ақ SSL-протоколымен "өзара аутентификацияны" қолдана аласыз; бұл жағдайда сервер клиенттен SSL байланысын орнатуды растау элементі ретінде жарамды сертификатты сұрайды. Сервер клиентті аутентификациялайды, оның сертификатының қол қойылған сенімді сертификаттау орталығын тексеру арқылы. Жарамды сертификат көрсетілсе, оны қолданбадағы servlet 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-протоколы бойынша аутентификациялай аласыз.
SSL-протоколын қолдайтын tomcat-ты іске қосу үшін 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 байланысы сәтті қосылса. Сертификат ұсынбаған клиенттер, егер X.509-тан басқа аутентификация механизмін қолданбасаңыз, мысалы, форма аутентификациясы, Spring Security қорғалатын ресурстарына қол жеткізе алмайтын болады.
GO TO FULL VERSION