난 그냥이 작업 있고 난 당신이 내 대답에 매우 행복 할 것 같아요하지만 경우, 작업 :
그래서 어려운 부분은 당신이 클라이언트 인증을 수행하는 데 필요한 PKCS12 인증서를 얻을 수 있습니다 않습니다 귀하의 인증서가 이미 pkcs12에 있다면 당신은 모든 어려운 일들을 빠져 나갔고, SSL client authentication in Android에 대한 두번째 대답을 참조하여 그 인증서를 어떻게 사용하는지보십시오.
방금 공개 개인 키 쌍이 있고 pkcs12 인증서가없는 경우 하나를 만들어야합니다. 당신이 안드로이드 NDK와 openssl을 사용할 필요가 있도록이 인증서를 생성하는 방법은 java/android에 없다.
openssl-android 프로젝트를 https://github.com/guardianproject/openssl-android에서 다운로드하면이 프로젝트를 사용하여 openssl을 빌드 할 수 있습니다. 기본적으로 그것은 .so 공유 객체로 컴파일되지만이 코드를 실행하려고 시도한 일부 안드로이드 장치 만 libcrypto와 연결할 수 있었으므로 Android.mk 파일에 들어가서 더 나은 방법이 있는지 확인합니다. 대체되었습니다. 정적 라이브러리를 컴파일 할 수 있도록 include $ (BUILD_STATIC_LIBRARY)와 함께 $ (BUILD_SHARED_LIBRARY)를 몇 군데에 포함 시켰습니다.
그런 다음 Android NDK: Link using a pre-compiled static library의 정보를 사용하여 내 기본 코드에 컴파일 된 libcrypto.a를 연결합니다.
이 네이티브 코드는 SSL client authentication in Android
먼저 당신이 공공 및 민간 얻을 필요가 먼저 X509 인증서를 만들 수있는 OpenSSL을 사용하고 내가 전에에 위치한 언급 한 방식으로 사용할 수있는 PKCS12 파일을 생성하는 데 사용 열쇠는 당신이 X509 인증서를 만들려면 다음 코드를 사용할 수 있습니다에 어떤 형식에 따라 다양한 방법으로 일어날 수 EVP_PKEY 포인터로 본국으로 키이 가장 최소 유효 X509 인증서를 생성
X509 *public_key_cert = X509_new();
X509_gmtime_adj(X509_get_notBefore(public_key_cert),0);
X509_gmtime_adj(X509_get_notAfter(public_key_cert), (long) 60*60*24*365);
X509_set_pubkey(public_key_cert,evp_pub_key);
유효 기간은 1 년입니다. 자신의 인증 기관을 운영하려는 경우 인증서에 서명하는 것과 같은 다른 작업을 수행하거나 다양한 정보 비트가 포함 된 많은 헤더 집합을 설정할 수 있습니다.
다음 당신은 사용하여 PKCS12 인증서를 작성해야이 같은 X509의 인증서 :
PKCS12 *pkcs12 = PKCS12_create(password, "Some Sort of Friendly Name", evp_priv_key, public_key_cert, NULL, 0, 0, 0, 0, 0);
암호가
트리플 DES를 사용하여 개인 키를 암호화하는 데 사용되는 암호를 포함하는 문자의 *입니다
이제 pkcs12 인증서를 가지고 SSL client authentication in Android으로 이동하여 클라이언트 인증을받을 수 있습니다.
행운을 빌어 요!
내 클라이언트 인증서 및 개인 키가 들어있는 KeyStore 개체로 KeyManager를 초기화 (init)하는 것으로 충분합니까? 나는 내 클라이언트 인증서와 개인 키를 setCertificateEntry와 setKeyEntry를 사용하여 push 할 수 있다고 가정한다. – Bjorn