Android 기기에 신뢰할 수있는 CA 인증서를 설치하는 방법은 무엇입니까? 파일을 내 컴퓨터에 복사하고 portecle 1.5를

내 자체 CA 인증서를 만들었으며 이제 장치가 내 인증서를 신뢰하도록 Android Froyo 장치 (HTC Desire Z)에 설치하려고합니다.

Android는의 Java 키 저장소에 CA 인증서를 저장 /system/etc/security/cacerts.bks합니다. 파일을 내 컴퓨터에 복사하고 portecle 1.5를 사용하여 인증서를 추가 한 후 다시 장치로 푸시했습니다.

이제 Android는 파일을 자동으로 다시로드하지 않는 것 같습니다. 장치를 다시 시작해야하는 여러 블로그 게시물을 읽었습니다. 그렇게하면 파일이 원래 파일로 다시 덮어 쓰게됩니다.

다음 시도는 SD 카드에서 인증서를 복사하고 설정 메뉴에서 해당 옵션을 사용하여 인증서를 설치하는 것입니다. 장치에서 인증서가 설치되었다고 알려주지 만 인증서를 신뢰하지 않는 것 같습니다. 또한 키 저장소를 컴퓨터에 복사하려고 할 때도 여전히 원본을 찾습니다 cacerts.bks.

그렇다면 자신의 루트 CA 인증서를 Android 2.2 장치에 신뢰할 수있는 인증서로 설치하는 올바른 방법은 무엇입니까? 프로그래밍 방식으로 수행 할 수 있습니까?



답변

Android KitKat에 앞서 새로운 인증서를 설치하려면 기기를 루팅해야합니다.

Android KitKat (4.0)에서 Nougat (7.0) 까지 가능하고 쉽습니다. 루트가없는 장치에 Charles Web Debbuging Proxy 인증서를 설치하고 SSL 트래픽을 스니핑 할 수있었습니다.

http://wiki.cacert.org/FAQ/ImportRootCert 에서 추출

Android 버전 Gingerbread & Froyo를 사용하는 Android 버전 4.0 이전에는 기본적으로 모든 CA ( ‘system’) 인증서를 신뢰하는 신뢰 저장소를 포함하는 단일 읽기 전용 파일 (/system/etc/security/cacerts.bks)이있었습니다. 기계적 인조 인간. 시스템 앱과 Android SDK로 개발 된 모든 애플리케이션이 모두 사용합니다. Android Gingerbread, Froyo, …에 CAcert 인증서를 설치할 때 다음 지침을 사용하십시오.

Android 4.0 (Android ICS / ‘Ice Cream Sandwich’, Android 4.3 ‘Jelly Bean’및 Android 4.4 ‘KitKat’)부터 시스템 신뢰 인증서는 ‘/ system / etc / 폴더의 (읽기 전용) 시스템 파티션에 있습니다. 보안 / ‘개별 파일로. 그러나 사용자는 이제 ‘/ data / misc / keychain / certs-added’에 저장 될 자신의 ‘사용자’인증서를 쉽게 추가 할 수 있습니다.

시스템 설치 인증서는 설정-> 보안-> 인증서-> ‘시스템’섹션의 Android 장치에서 관리 할 수있는 반면 사용자가 신뢰할 수있는 인증서는 ‘사용자’섹션에서 관리됩니다. 사용자가 신뢰할 수있는 인증서를 사용하는 경우 Android는 Android 기기 사용자에게 추가적인 안전 조치를 강요하도록합니다. 사용자 제공 인증서를 사용할 때는 PIN 코드, 패턴 잠금 또는 기기 잠금을 해제하기위한 비밀번호를 사용해야합니다.

CAcert 인증서를 ‘사용자가 신뢰할 수있는’인증서로 설치하는 것은 매우 쉽습니다. ‘신뢰할 수있는 시스템’인증서로 새 인증서를 설치하려면 더 많은 작업이 필요하고 루트 액세스가 필요하지만 Android 잠금 화면 요구 사항을 피할 수 있다는 장점이 있습니다.

Android N부터는 조금 더 어려워집니다. Charles 프록시 웹 사이트 에서이 추출을 참조하십시오 .

Android N부터 Charles SSL 프록시에서 생성 한 SSL 인증서를 신뢰하려면 앱에 구성을 추가해야합니다. 즉, 제어하는 ​​앱에서만 SSL 프록시를 사용할 수 있습니다.

Charles를 신뢰하도록 앱을 구성하려면 앱에 네트워크 보안 구성 파일을 추가해야합니다. 이 파일은 시스템 기본값을 재정 의하여 앱이 사용자가 설치 한 CA 인증서 (예 : Charles Root Certificate)를 신뢰할 수 있도록합니다. 프로덕션 빌드가 기본 신뢰 프로파일을 사용하도록 애플리케이션의 디버그 빌드에만 적용되도록 지정할 수 있습니다.

res / xml / network_security_config.xml 파일을 앱에 추가하십시오 :

<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <!-- Trust user added CAs while debuggable only -->
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

그런 다음 앱 매니페스트에이 파일에 대한 참조를 다음과 같이 추가하십시오.

<?xml version="1.0" encoding="utf-8"?>
<manifest>
    <application android:networkSecurityConfig="@xml/network_security_config">
    </application>
</manifest>

답변

이에 대한 답을 찾으려고 많은 시간을 보냈습니다 (StartSSL 인증서를 보려면 Android가 필요합니다). 결론 : Android 2.1 및 2.2에서는 인증서를 가져올 수 있지만 WiFi 및 VPN에서만 사용할 수 있습니다. 신뢰할 수있는 루트 인증서 목록을 업데이트하기위한 사용자 인터페이스는 없지만 해당 기능 추가에 대한 설명이 있습니다. cacerts.bks 파일을 수동으로 업데이트하고 교체하기위한 안정적인 해결 방법이 있는지 확실하지 않습니다.

세부 사항 및 링크 : http://www.mcbsys.com/techblog/2010/12/android-certificates/ . 이 게시물에서 Android 버그 11231에 대한 링크를 참조하십시오. 해당 버그에 투표 및 쿼리를 추가 할 수 있습니다.


답변

HTTPS 연결에 인증서가 필요한 경우 .bks 파일을 응용 프로그램에 원시 리소스로 추가하고 DefaultHttpConnection을 확장하여 인증서가 HTTPS 연결에 사용되도록 할 수 있습니다.

public class MyHttpClient extends DefaultHttpClient {

    private Resources _resources;

    public MyHttpClient(Resources resources) {
        _resources = resources;
    }

    @Override
    protected ClientConnectionManager createClientConnectionManager() {
        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory
            .getSocketFactory(), 80));
        if (_resources != null) {
            registry.register(new Scheme("https", newSslSocketFactory(), 443));
        } else {
            registry.register(new Scheme("https", SSLSocketFactory
                .getSocketFactory(), 443));
        }
        return new SingleClientConnManager(getParams(), registry);
    }

    private SSLSocketFactory newSslSocketFactory() {
        try {
            KeyStore trusted = KeyStore.getInstance("BKS");
            InputStream in = _resources.openRawResource(R.raw.mystore);
            try {
                trusted.load(in, "pwd".toCharArray());
            } finally {
                in.close();
            }
            return new SSLSocketFactory(trusted);
        } catch (Exception e) {
            throw new AssertionError(e);
        }
    }
}

답변

여기에 링크 된 안내서 는 사용자 정의 SSL 커넥터를 프로그래밍 할 필요없이 원래 질문에 대답 할 것입니다.

다른 버전의 Android 기기 (다른 기기 중에서도)에 신뢰할 수있는 CA 인증서를 설치하는 과정을 안내하는 루트 인증서 가져 오기에 대한 자세한 방법 안내서를 찾았습니다.

기본적으로 다음이 필요합니다.

  1. 다운로드 : 휴대 전화에서 cacerts.bks 파일.

    adb 풀 /system/etc/security/cacerts.bks cacerts.bks

  2. 허용하려는 인증 기관에서 .crt 파일을 다운로드하십시오.

  3. BouncyCastle Provider를 사용하여 컴퓨터에서 cacerts.bks 파일을 수정하십시오.

  4. cacerts.bks 파일을 전화기에 다시 업로드하고 재부팅하십시오.

이전 안드로이드 폰을 업데이트하는 단계별 세부 정보는 다음과 같습니다
.Android-4.0 이전 기기에서 HTTPS 보안 인증 기관 키 저장소를 업데이트하는 방법


답변

여기 또는 관련 스레드에 게시 된 것보다 훨씬 쉬운 해결책이 있습니다. 웹보기를 사용하는 경우 (있는 그대로) JAVASCRIPT 함수를 실행하여이를 달성 할 수 있습니다. 웹뷰를 사용하지 않는 경우이 목적으로 숨겨진 것을 만들 수 있습니다. 다음은 ca 설치를 시작하기 위해 거의 모든 브라우저 (또는 웹보기)에서 작동하는 기능입니다 (일반적으로 Droid를 포함하여 공유 OS 인증서 저장소를 통해). iFrames와 함께 멋진 트릭을 사용합니다. 이 함수에 URL을 .crt 파일로 전달하십시오.

function installTrustedRootCert( rootCertUrl ){
    id = "rootCertInstaller";
    iframe = document.getElementById( id );
    if( iframe != null ) document.body.removeChild( iframe );
    iframe = document.createElement( "iframe" );
    iframe.id = id;
    iframe.style.display = "none";
    document.body.appendChild( iframe );
    iframe.src = rootCertUrl;
}

최신 정보:

iframe 트릭은 API 19 이상의 Droid에서 작동하지만 이전 버전의 웹보기는 이와 같이 작동하지 않습니다. 일반적인 아이디어는 여전히 작동합니다-웹보기로 파일을 다운로드 / 연 다음 OS가 인수하도록하십시오. 이것은 더 쉽고 보편적 인 솔루션 일 수 있습니다 (실제 Java에서는).

 public static void installTrustedRootCert( final String certAddress ){
     WebView certWebView = new WebView( instance_ );
     certWebView.loadUrl( certAddress );
 }

instance_는 활동에 대한 참조입니다. 인증서의 URL을 알고 있으면 완벽하게 작동합니다. 그러나 필자의 경우 서버 측 소프트웨어를 사용하여 동적으로 해결합니다. 리디렉션 URL을 인터셉트하고 스레딩 합병증을 기반으로 충돌을 일으키지 않는 방식으로 이것을 호출하기 위해 상당한 양의 추가 코드를 추가해야했지만 여기에 모든 혼란을 추가하지는 않습니다 …


답변

startssl 인증서를 사용하기 위해 수행 한 작업은 매우 쉽습니다. (내 뿌리 전화에서)

/system/etc/security/cacerts.bks를 내 sdcard에 복사했습니다.

http://www.startssl.com/certs/ca.crthttp://www.startssl.com/certs/sub.class1.server.ca.crt 다운로드

portecle.sourceforge.net으로 이동하여 웹 페이지에서 직접 portecle을 실행했습니다.

내 sdcard에서 cacerts.bks 파일을 열었습니다 (암호를 요청할 때 아무것도 입력되지 않음)

portacle에서 import를 선택하고 sub.class1.server.ca.crt를여십시오. 내 경우에는 이미 ca.crt가 있지만 설치해야 할 수도 있습니다.

키 저장소를 저장하고 baxck를 /system/etc/security/cacerts.bks에 복사했습니다 (필요한 경우를 대비하여 먼저 해당 파일의 백업을 작성했습니다)

휴대 전화를 재부팅하면 이제는 startssl 인증서를 사용하여 오류없이 사이트를 방문 할 수 있습니다.


답변

이 단계는 저에게 효과적이었습니다.

  1. 모바일 장치에 Dory Certificate Android 앱을 설치하십시오 : https://play.google.com/store/apps/details?id=io.tempage.dorycert&hl=ko
  2. USB 케이블을 사용하여 모바일 장치를 랩톱에 연결하십시오.
  3. 내부 전화 메모리에 루트 폴더를 작성하고 해당 폴더에 인증서 파일을 복사 한 후 케이블을 분리하십시오.
  4. Dory Certificate Android 앱을 열고 둥근 [+] 버튼을 클릭 한 다음 올바른 파일 인증서 가져 오기 옵션을 선택하십시오.
  5. 형식을 선택하고 이름 (파일 이름과 동일하게 입력)을 제공 한 다음 인증서 파일을 찾아 [확인]을 클릭하십시오.
  6. 3 장의 카드가 나옵니다. [SIGN CSR] 버튼 만있는 카드를 무시하고 다른 두 카드에서 [INSTALL] 버튼을 클릭했습니다.
  7. 모바일 Chrome (로컬 IIS 웹 서버에서 호스팅 됨)과 voala를 열지 않은 PWA 웹 앱을 새로 고쳤습니다! 크롬 경고 메시지가 없습니다. 녹색 자물쇠가있었습니다. 작동하고있었습니다.

대안으로, 나는 스스로 시도 할 필요가 없지만 따라하기 쉬운이 옵션을 발견했습니다.

마지막으로 관련성이 없지만 로컬 IIS 웹 서버에서 호스팅되는 PWA 응용 프로그램 (웹 사이트)에 대해 자체 서명 된 인증서 (mkcert 포함)를 만들고 설정하려면이 페이지를 따르십시오.

https://medium.com/@aweber01/locally-trusted-development-certificates-with-mkcert-and-iis-e09410d92031

감사하고 도움이되기를 바랍니다! 🙂