저는 Https를 통한 접속이 아닌 일반 SSL 소켓접속을 시도하고 있습니다.
몇일 동안 거의 인터넷을 뒤지고 책을 찾아보았지만
대부분 Https에 관한 연결만 나왔습니다.
접속을 위해서 아래와 같은 조건이 있습니다.
1. MS Server RDP(remote desktop protocol) 포트인 3389로 접속을 합니다.
2. MS Server RDP는 NLA(Network Level Authentication)가 활성화 되어있습니다.
RDP서버에 NLA가 활성화된 경우 MS-RDP 문서를 보면 TLS(SSL)를 구현해서 연결을 해야 한다고
되어있습니다.
그래도 몇 가지 찾은 자료와 소스도 있었지만, 제겐 별 도움이 안되었습니다.
windows 에서 지원한는 "원격데스크톱연결" 프로그램은 접속하려는 서버에 NLA가
활성화 되어있어도 특별한 별도의 인증서를 클라이언트 PC에 설치 하지 안아도 연결이 잘 됩니다.
제가 찾은 자료들은 하나같이 인증서를 만들고 이 것을 서버와 클라이언트 모두에 적용해서
SSL 소켓통신을 합니다.
실제로 외국업체 제품(android 버전 RDP 프로그램)같은 경우에도 서버쪽에 NLA가 활성화 되어도
잘 접속됩니다. 그렇다고 스마트폰이나 탭에 별도의 인증서를 설치 하지도 않습니다.
이것은 어덯게 구현하는 건지요??
암호화도 인증도 처음이라 대체 뭐가뭔지 모르겠습니다.
OpenSSL NDK로 적용 해보라고 하던데요...
NDK 빌드로 openssl, libcrypto-static.a, libssl-static.a 를 생성했습니다만
이 놈을 어찌 적용해야 하는지 모르겠습니다.
.a를 다시 .so로 만들어서 적용하라고 하는데 ...
계속 실패 입니다.
그리고 NDK로 만든 .a 나 .so 를 기존 프로제트 적용하면 안되고 다시 NDK(jni)를 사용 할 수 있는
프로젝트로 다시 만들어서 적용해야 하는지요?




늦은 댓글 이지만...
인증서 validate 안하는 ssl socket을 만들면 되는것이지요?
import javax.net.ssl; public SSLSocketFactory createSSLSocket() { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[] {}; } @Override public void checkClientTrusted( java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { // TODO Auto-generated method stub } @Override public void checkServerTrusted( java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { // TODO Auto-generated method stub } } }; // Install the all-trusting trust manager try { SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); SSLSocketFactory ssf = sc.getSocketFactory(); return ssf; } catch (Exception e) { e.printStackTrace(); } return null;}리턴받은 ssf.createSocket 을 이용해 소켓생성해서 해보세요.