자체 서명 된 인증서 설치는 성공을 주장하지만 안드로이드는 인증서가없는 것처럼 작동합니다.


17

Android 4.3에서 웹 서버에 대한 자체 서명 인증서를 설치하려고합니다. SD 카드의 루트에 .crt 파일이 있습니다 (슬롯에 SD 카드가 없으므로 실제로 에뮬레이션됩니다).

인증서를 설치하려면 설정-> 일반-> 보안-> 자격 증명 저장소-> 장치 저장소에서 설치로 이동하십시오.

인증서 이름 (파일 이름에서 .crt 확장명을 빼고 .crt 확장자를 뺀 값), "VPN 및 앱"을 선택한 상태에서 "사용한"풀다운 및 하단에 텍스트를 표시하는 대화 상자가 나타납니다. "패키지에 하나의 사용자 인증서가 포함되어 있습니다"라는 메시지가 표시됩니다. 모든 것이 정상으로 보이므로 "확인"을 클릭하십시오. 대화창이 사라지고 "[name] installed"와 함께 토스트 메시지가 나타납니다.

그러나 즉시 "신뢰할 수있는 자격 증명"으로 이동하여 "사용자"를 선택하면 아무 것도 없습니다! 새 인증서도 "시스템"아래에 없지만 기대하지는 않습니다.이 후에 브라우저로 이동하여 웹 사이트에서 사이트 인증서를 신뢰할 수 없다는 경고 메시지가 표시되며 재부팅도 시도했지만 차이가 없습니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까? 오류 메시지의 완전한 부족은 도움이되지 않습니다. 인증서가 잘못된 형식 일 수 있습니까? 서버의 ssl 디렉토리에서 .crt 파일을 사용하려고 시도했으며 DER 형식으로 변환하려고했습니다.

업데이트 : 안드로이드가 p12 형식의 인증서가 필요하다는 것을 읽었으므로 다음 명령을 사용하여 Apache2 인증서를 p12로 변환했습니다.

openssl pkcs12 -export -inkey server.key -in server.crt -out ~/server.p12

그런 다음 위의 단계를 반복하고 동일한 성공 메시지를 얻은 후에도 여전히 사용자 자격 증명에 인증서가 표시되지 않고 모바일 브라우저에서 신뢰할 수없는 인증서 오류가 발생합니다.

답변:


19

나에게 효과적인 방법을 설명하는 이 사이트 를 찾을 때까지 안드로이드가 실제로 인증서를 설치하도록하는 것과 같은 문제가있었습니다 . 다음 단계로 요약됩니다.

  1. 확장명이 v3_req 인 개인 키 및 공개 x509 인증서를 생성하고 CA로 활성화합니다.

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/my_site.key -out /etc/ssl/certs/my_site.crt -reqexts v3_req -extensions v3_ca

  2. 인증서를 DER 형식으로 변환하십시오.이 형식은 Android에서 이해합니다.

    sudo openssl x509 -in /etc/ssl/certs/my_site.crt -outform der -out my_site.der.crt

  3. 모든 방법을 사용 my_site.der.crt하여 Android 기기 로 가져 오기 -웹 서버에서 파일을 호스팅하고 Android 브라우저를 통해 파일을 다운로드하면 자동으로 설치할 수 있습니다.

1 단계를 2 (1a. 개인 키 생성 및 1b. 공개 인증서 생성)로 나누고 싶었지만 그렇게하는 방법을 조사하는 데 너무 많은 시간을 투자하지 않았습니다. 작동하는 방법을 찾으면 의견을 보내주십시오. 감사합니다.

(댓글을 추가하는 것이 아니라 나중에 참조 할 수 있도록 답변의 일부로 포함되어 있다고 생각합니다. --Michael)

CA로 활성화 된 인증서를 만드는 대신 자체 서명 된 CA를 만든 다음 기존 키 / csr을 새 CA로 다시 서명했습니다. 그런 다음 자체 서명 된 CA를 Android 및 voila에 추가했습니다! 효과가 있었다!

자체 서명 된 CA 생성

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem

키를 생성하여 기존 CSR에 재 서명

openssl x509 -req -in existing.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out existing.crt -days 3649

이제 두 번째 명령의 수정 된 형식을 사용하여 CA 인증서를 DER 형식으로 변환했습니다.

openssl x509 -in /etc/apache2/ssl/rootCA.pem -outform der -out ~/rootCA.der.crt

이것에 대한 가장 큰 장점은 이제 새로운 자체 서명 된 CA로 다시 서명 된 신뢰할 수없는 추가 인증서를 다른 장치를 설치할 필요없이 새 CA가 설치된 것보다 모든 장치에서 신뢰할 수 있다는 것입니다. 이렇게하면 제어 할 수없는 사이트를 신뢰하는 문제를 정확하게 해결할 수는 없지만 내부 서버 나 다른 것에 대해 IT 부서에 영향을주는 경우 더 쉬워 질 수 있습니다.


1
이미 설치해야 할 인증서가 있으므로 2 단계를 시도했는데 설치에 성공한 후에도 여전히 사용자 신뢰 자격 증명에 표시되지 않으며 Chrome은 다시 시작한 후에도 "신뢰할 수없는 사이트"오류를 표시합니다.
Michael

1
v3_req 확장명에 대한 정보가있을 수 있으며 Android에서 인증서를 사용하기 위해 인증서에 필요한 CA로 사용할 수 있습니까? 그렇다면 설치하려는 모든 인증서를 제어 할 수 없으므로 기존 인증서를 가져 와서 해당 정보를 추가하는 데 사용할 수있는 명령이 있습니까?
Michael

3
이전 질문의 첫 번째 절반에 답하기 위해 링크 한 페이지를 읽었으며 문제는 Android가 자체 서명 된 인증서 (자체 서명 된 CA가 아닌)의 설치를 거부하는 것 같습니다. 이것은 문서화되지 않은 것으로 보이며 안드로이드가 설치하는 척하는 것이 훨씬 더 나빠집니다. 그러나 내가 통제 할 수없는 자체 서명 된 인증서가 있다면 "CA"-방법을 사용하여 설치할 수 있습니까?
Michael

1
@ 걱정하지 않기를 바랍니다. 솔루션에 실제로 포함되어 있기 때문에 의견에 솔루션을 포함시키는 대신 솔루션을 포함하도록 답변을 편집 할 것입니다.
Michael

1
existing.csr 서명 요청이 생성되는 방법을 알 수 없습니다. 이것이 단계별 튜토리얼의 마지막 누락 부분이라고 생각합니다.
cguenther
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.