0 Вопрос: Установите взаимную аутентификацию ssl с java и весенней загрузкой

вопрос создан в Wed, May 8, 2019 12:00 AM

Мне нужны некоторые пояснения о том, как выполнить аутентификацию клиента во взаимной ssl с весенней загрузкой. Я использую jhipster, и я хочу переопределить аутентификацию jwt шлюза с взаимной аутентификацией ssl. Я получаю доступ к URL через https, но когда я хочу аутентифицировать клиента, у меня не появляется всплывающее окно со списком сертификатов, которые можно использовать для выбора одного из аутентифицированных клиентов ... так что есть кто-то, кто может дать мне правильный способ сделать это .. и танки :) :)

это мой код в классе конфигурации безопасности:


@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {



    @Autowired
    private UserRepository userRepository;

    @Autowired
    private HttpServletRequest request;

    public static final String BEGIN_CERT = "-----BEGIN CERTIFICATE-----";
     public static final String END_CERT = "-----END CERTIFICATE-----";
     public final static String LINE_SEPERATOR = System.getProperty("line.separator");

     public static String formatCrtFileContents(final Certificate certificate) throws CertificateEncodingException {
            final Base64.Encoder encoder = Base64.getMimeEncoder(0, LINE_SEPERATOR.getBytes());
                //78
            final byte[] rawCrtText = certificate.getEncoded();
            final String encodedCertText = new String(encoder.encode(rawCrtText));
            final String prettified_cert = BEGIN_CERT +" "+ encodedCertText +" "+ END_CERT;
            return prettified_cert;
        }


    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
            .antMatchers(HttpMethod.OPTIONS, "/**")
            .antMatchers("/app/**/*.{js,html}")
            .antMatchers("/i18n/**")
            .antMatchers("/content/**")
            .antMatchers("/swagger-ui/index.html")
            .antMatchers("/test/**");
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {

          http.authorizeRequests().anyRequest().authenticated().and().x509().subjectPrincipalRegex("CN=(.*?)(?:,|$)").userDetailsService(userDetailsService());
          http.csrf().disable();
    }



     @Bean
        public UserDetailsService userDetailsService() {        



            return new UserDetailsService() {

                @Override
                public UserDetails loadUserByUsername(String username)  {   

                    X509Certificate[] certs = (X509Certificate[])
                            request.getAttribute("javax.servlet.request.X509Certificate");  

                            if (certs.length < 1) {
                              System.err.println("SSL not client authenticated");
                            }

                            X509Certificate principalCert = certs[0];


                         try {
                            System.out.println("test certificate content " + formatCrtFileContents(principalCert));
                        } catch (CertificateEncodingException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }

                            try {
                                if (userRepository.findByCertificat(formatCrtFileContents(principalCert))!=null) {
                                    return new User(username, "", AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_USER"));
                                }
                                else
                                {
                                    return new User(username, "", AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_not found"));
                                }
                            } catch (Exception e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                                 throw new UsernameNotFoundException("User not found!");
                            }



                }



                };



        }

и это код, который я использую в файле свойств моего приложения: я уже сгенерировал хранилище ключей и файлы доверенного хранилища:

server:
    port : 443
    ssl:
        enabled : true
        key-store: classpath:config/tls/keystore.jks
        key-store-password: test
        key-store-type: JKS
        key-password : test
        key-alias: localhost
        key-store-provider: SUN
        ciphers: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
        enabled-protocols: TLSv1.2
        trust-store : classpath:config/tls/truststore.jks
        trust-store-password : test 
        trust-store-type: JKS
        client-auth : need 

    
- 1
0 ответов                              0                         
источник размещен Вот