Home » Security
Archiv der Kategorie: Security
SSL debuggen
-Djavax.net.debug=ssl
SSL Auswahl der vorgewiesenen Zertifikate
Welches Zertifikat wird beim SSL-Handshake vorgewiesen?
Das auszuweisende Certifikat wird über den Parameter „keyStoreAlias“ definiert.
Es entspricht im KeyStore einem Eintrag mit
Aliasname: meinServer.hps.com
Spring Web mit Security mit Login-Page
Authorisierung via Login-Page Beispiel:
https://spring.io/guides/gs/securing-web/#initial
HTTPS mit Client-Authentifizierung via Client-Zertifikat (Beispiel mit Spring Boot)
Bealdung hat bietet uns einen wunderbares Tutorial X.509 Authentication in Spring Security zum Thema, welchen ich hier verarbeite/zusammenfasse. Die vollständigen Sourcen sind auf GitHub verfügbar.
Zertifikates & -Stores erstellen
Das Makefile beinhaltet die ganze Magie des
- Erstellens eines Keystores (für das Server-Certifikat, das den Server ausweisen wird)
- Erstellens eines Certificate Signing Requests
- Des selbst signierens desselben CSRs (würde in Scharfem Modus von einer wirklichen Certificate Authority gemacht)
- Erstellens eines TrustStores (für die Client-Certificate Trust Authority)
- Erstellens eines Client Certificates, exportieren desselbens
Definition von HTTPS des integrated Tomcat
Wird durch diese wenigen config entries in application.properties erreicht:
server.ssl.key-store=../keystore/keystore.jks server.ssl.key-store-password=changeit server.ssl.key-alias=localhost server.ssl.key-password=changeit server.ssl.enabled=true server.port=8443 security.user.name=Admin security.user.password=admin server.ssl.trust-store=../keystore/truststore.jks server.ssl.trust-store-password=changeit server.ssl.client-auth=need
Definition der Zugriffsberechtigung in der SPRING-Boot-Applikation
Die ganze Magie der Zugriffs-Berechtigungs-Verwaltung wird durch die Annotationen @EnableWebSecurity repektive @EnableGlobalMethodSecurity und das Ableiten von WebSecurityConfigurerAdapter und dessen überschreibene Methode configure bewerkstelligt.
@SpringBootApplication @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class X509AuthenticationServer extends WebSecurityConfigurerAdapter { public static void main(String[] args) { SpringApplication.run(X509AuthenticationServer.class, args); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().authenticated().and().x509().subjectPrincipalRegex("CN=(.*?)(?:,|$)").userDetailsService(userDetailsService()); } @Bean public UserDetailsService userDetailsService() { return new UserDetailsService() { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { if (username.equals("cid")) { return new User(username, "", AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_USER")); } throw new UsernameNotFoundException("User not found!"); } }; } }
Die configure-Methode hat also schon via
http.authorizeRequests().anyRequest().authenticated().and().x509()
Zugriff auf das vom Web-Server empfangene Zertifikat und kann es auswerten.
Client Zertifikat in Firefox registrieren
Siehe Tutorial X.509 Authentication in Spring Security