문제
나는 SSL 소켓을 통해 로컬 서버에 연결을 시도하고있다. 서버가 SSL 인증서 것을 사용합니다
- 자체 서명입니다.
- MD5withRSA가 서명을 가지고 (?)
나는 보안 의미를 알고,하지만 내 통제 할 수없는 이유로, 나는 변경하거나 변경 요청이 인증서에 따라서 내가 일을 강요하고 그것으로 할 수 - 주위, 또는 오히려.
위의 두 점을 극복하기 위해, 내가 만든 :
- A는
TrustManager
모든 인증서를 허용하는. - 는
AlgorithmConstraints
모든 알고리즘을 허용하는.
나는 다음과 같은 오류와 끝까지 :
Caused by: java.security.cert.CertPathValidatorException: Algorithm constraints check failed on signature algorithm: MD5withRSA
이 알고리즘의 제약을 휴식에 나의 접근 방식은 결함이 보인다.
참고 : 나는 그 것을 알고 MD5withRSA
알고리즘은 JVM 구성 또는 명령 줄 매개 변수를 변경을 통해 허용 될 수 있지만이 프로그램이 작업을 수행해야합니다.
코드
는 TrustManager
다음과 같이 만들었습니다 :
TrustManager[] trustManager = new TrustManager[] {
new X509TrustManager() {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
는 AlgorithmConstraints
다음과 같이 만들었습니다 :
AlgorithmConstraints algorithmConstraints = new AlgorithmConstraints() {
@Override
public boolean permits(Set<CryptoPrimitive> primitives, String algorithm, AlgorithmParameters parameters) {
return true;
}
@Override
public boolean permits(Set<CryptoPrimitive> primitives, Key key) {
return true;
}
@Override
public boolean permits(Set<CryptoPrimitive> primitives, String algorithm, Key key, AlgorithmParameters parameters) {
return true;
}
}
다음과 같이 그리고 마지막으로, 소켓 코드는 다음과 같습니다
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManager, new java.security.SecureRandom());
SSLSocketFactory factory = sslContext.getSocketFactory();
SSLSocket sslsocket = (SSLSocket) factory.createSocket(server, port);
SSLParameters sslParameters = new SSLParameters();
sslParameters.setAlgorithmConstraints(algorithmConstraints);
sslsocket.setSSLParameters(sslParameters);
sslSocket.startHandshake();
제안?
해결책
언급 한 바와 같이 이 대답에 , 하나는 사용할 필요가 X509ExtendedTrustManager
대신을 X509TrustManager
. 이것은 또한 사용자 지정의 필요성 부정 AlgorithmConstraints
제가 질문했던 것처럼, 구현.
경고
발견 누구든지 /이 솔루션을 사용한다 :
참고 표준 인증 검사를 우회하면 접속을 노출 (및 확장 응용 프로그램) 사소한 어느 것도 보안 위험의 수 있다고!
적어도 구현해야합니다 일부 와 같은 추가 보안 검사를 고정 인증서 확인 응용 프로그램이 신뢰할 수있는 환경에서 사용되는 것을 적어도 100 %, 또는!