localy가 내 컴퓨터에 Apache 2 서버에 설치되었습니다. 먼저 단방향 SSL로 구성하고 Android에서 연결하려고합니다. 내 단방향 SSL Apache 2 서버를 구성하려면 서버 인증서를 만들어야했습니다. 나는 다음의 커멘드로했다 :안드로이드에서의 양방향 SSL : 클라이언트 인증이 작동하지 않음
하려면 openssl genrsa -out은 server.key 2048
하려면 openssl REQ -config ./openssl.cnf -new -key은 server.key -out server.req
OpenSSL을 509 -req -in server.req -CA ca.cer -CAkey ca.key -set_serial 100 -extfile openssl.cnf -Extensions 서버 -days 365 -outform PEM -out server.cer
그런 다음 server.cer 파일을 가져 왔습니다. java keytool을 사용하여 BKS로 변환합니다. Android의 인증이 작동했습니다. 그런 다음 Apache 2 서버 의 양방향 SSL 구성을 계속하고 안드로이드에서 comunicate를 시도했습니다.
하려면 openssl REQ -config ./openssl.cnf -newkey RSA : 나는 ... 작동하도록 을 관리하지 않았다 나는 클라이언트 인증서 만들려면 다음 명령을 사용 2048 -nodes -keyform PEM 을 - KEYOUT ca.key -x509 -days 3650 -Extensions certauth -outform PEM -out ca.cer
하려면 openssl genrsa -out client.key 2048
하려면 openssl REQ -config ./openssl.cnf -new -key client.key-out client.req
ope nssl 509 -req -in client.req -CA ca.cer -CAkey ca.key -set_serial 101 -extfile openssl.cnf -Extensions 클라이언트 -days 365 -outform PEM -out client.cer
에서 OpenSSL PKCS12 - export -inkey client.key -in client.cer -out client.p12
client.p12 파일을 가져온 후 PC 브라우저에서 작동합니다. 안드로이드에서 client.p12 파일을 Portecle 도구를 사용하여 BKS 형식으로 변환했지만 제대로 작동하지 않는 것 같습니다. 변환이 제대로 수행되지 않았을 수 있습니다. 나는 항상 javax.net.ssl.SSLPeerUnverifiedException을 받는다 : 피어 인증서 예외가 없다. 누구든지 문제가 될 수있는 아이디어가 있습니까?
public class SslTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
// load truststore certificate
InputStream clientTruststoreIs = getResources().openRawResource(
R.raw.server);
KeyStore trustStore = KeyStore.getInstance("BKS");
trustStore.load(clientTruststoreIs, "mypassword".toCharArray());
System.out.println("---- Loaded server certificates: "
+ trustStore.size());
// load client certificate
InputStream keyStoreStream = getResources().openRawResource(
R.raw.clientt);
KeyStore keyStore = KeyStore.getInstance("BKS");
keyStore.load(keyStoreStream, "password".toCharArray());
System.out
.println("-------Loaded client certificates: " + keyStore.size());
// initialize SSLSocketFactory to use the certificate
SSLSocketFactory socketFactory = new SSLSocketFactory(SSLSocketFactory.TLS,
keyStore, "password", trustStore, null, null);
// Set basic data
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, "UTF-8");
// Register http/s shemas!
SchemeRegistry schReg = new SchemeRegistry();
schReg.register(new Scheme("http", PlainSocketFactory
.getSocketFactory(), 80));
schReg.register(new Scheme("https", socketFactory, 443));
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(
params, schReg);
DefaultHttpClient sClient = new DefaultHttpClient(conMgr, params);
try {
String res = executeHttpGet(sClient, "https://10.41.0.102/");
System.out.println("------- SSL RESULT IS = " + res);
} catch (Exception e) {
System.out.println("---- ex " + e.getMessage());
e.printStackTrace();
}
} catch (Exception e) {
System.out.println("------Exception " + e.getMessage());
e.printStackTrace();
}
}
public String executeHttpGet(DefaultHttpClient client, String url) throws Exception {
BufferedReader in = null;
try {
HttpGet request = new HttpGet();
request.setURI(new URI(url));
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response
.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
in.close();
String result = sb.toString();
return result;
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}}
이