0 Câu hỏi: Thiết lập xác thực ssl lẫn nhau với java và khởi động mùa xuân

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

tôi muốn có một số giải thích về cách thực hiện xác thực ứng dụng khách trong ssl lẫn nhau với spring boot .. tôi đang sử dụng jhipster và tôi muốn ghi đè xác thực jwt của cổng bằng xác thực ssl lẫn nhau .. tôi đã xác thực máy chủ và tôi Tôi đang truy cập url bằng https nhưng khi tôi muốn xác thực ứng dụng khách, tôi không nhận được cửa sổ bật lên hiển thị danh sách các chứng chỉ sẽ sử dụng để chọn một trong những khách hàng được xác thực ... vậy có ai có thể cho tôi cách làm đúng không nó .. và xe tăng :) :)

đây là mã của tôi trong lớp cấu hình bảo mật:


@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!");
                            }



                }



                };



        }

và đây là mã tôi đang sử dụng trong tệp thuộc tính ứng dụng của mình: tôi đã tạo kho lưu trữ khóa và tệp tin cửa hàng tin cậy:

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 Câu trả lời                              0                         
nguồn đặt đây