Я развернул войну на удаленном сервере tomcat9 с помощью.Доступ к серверу LDAP возможен только из внутренней сети.Сервер приложений и сервер LDAP находятся в одной сети.Поэтому я пытаюсь подключиться к серверу LDAP через эту конфигурацию.
SecurityConfiguration
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public Md5PasswordEncoder md5PasswordEncoder() {
return new Md5PasswordEncoder();
}
@Autowired
public void registerGlobalAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userDnPatterns("uid={0},ou=people")
.contextSource()
.url("ldap://xx.xx.xx.xx:389/dc=xx,dc=xx,dc=xx")
.and()
.passwordCompare().passwordEncoder(md5PasswordEncoder()).passwordAttribute("password");
}
@Bean
public AuthenticationManager getAuthenticationManager() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/css/**").permitAll().anyRequest()
.fullyAuthenticated().and().formLogin().defaultSuccessUrl("/welcome");
}
}
Затем, когда я пытаюсь подключиться к серверу, у меня есть
Error: javax.naming.CommunicationException: [xx.xx.x.xx]:[389] [Root exception is java.net.ConnectException: Connection refused: connect]
Другой способ - у этого сервера LDAP есть сертификат для подключения ssl, который я устанавливаю и проверяю, находится ли он в доверенном хранилище.Как говорит гид,
Это означает, что вы будете доверять сертификату на сервере LDAP и будете правильно использовать SSL в своей тестовой среде (вместо того, чтобы иметь какой-либо собственный код для отключения части проверки SSL).После того, как вы сделали это (один раз), ваш код должен работать без каких-либо изменений.
chage config to ldaps: //xx.xx.xx.xx: 636 и иметь ошибку
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
Caused by: org.springframework.ldap.CommunicationException: simple bind failed: xx.xx.x.xx:636; nested exception is javax.naming.CommunicationException: simple bind failed: xx.xx.xx.xx:636 [Root exception is javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present]
PS из putty (ssh) с помощью команды openssl s_client -connect xx.xx.xx.xx: 636 У меня есть
No client certificate CA names sent
---
SSL handshake has read 1378 bytes and written 663 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : AES256-SHA256
Session-ID: D7C55F5D3288CEC64B6B9FADCD7D4C6683311DB75750A9E3F4C2527A1F5C1D72
Session-ID-ctx:
Master-Key: DED896B18F2345CA8EDDAC43E3AB0CA649EAC14460526C3B85F48D9FEDA7C3C110B409AFFD895E87099BA683B2630A6A
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1540467501
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
No client certificate CA names sent
---
SSL handshake has read 1378 bytes and written 663 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : AES256-SHA256
Session-ID: D7C55F5D3288CEC64B6B9FADCD7D4C6683311DB75750A9E3F4C2527A1F5C1D72
Session-ID-ctx:
Master-Key: DED896B18F2345CA8EDDAC43E3AB0CA649EAC14460526C3B85F48D9FEDA7C3C110B409AFFD895E87099BA683B2630A6A
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1540467501
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
closed
Буду благодарен за любые решения.