Import certifikátů CAcert do telefonů a tabletů Android

Andreas Terpotiz

Popis

Pomocí tohoto skriptu (batch souboru) lze importovat kořenový certifikát CAcert do mobilního zařízení.

Požadované soubory budou staženy automaticky. Jsou-li potřebná hesla, budou vyžádána.

Musíte-li kopírovat do telefonu svoje osobní certifikáty, uložte je do podadresáře Own (vlastní). Tento podadresář by měl být tentýž, kde je uložen soubor skriptu. Formát souboru(ů) musí být .p12 .

Testováno na Windows 7 Home Professional x64
Skript můžete stáhnout z odkazu za koncem zdrojového kódu.

@ECHO OFF
CLS
REM ##########################################################################################################################################
REM ### (c) 2013 Andreas Terpotiz <andreas.terpotiz@cacert.org>                                                                            ###
REM ##########################################################################################################################################
REM ### Funkce: Aktualizace certifikátů CA na mobilním zařízení Android.                                                                   ###
REM ### Předpoklad: Přístup k Internetu                                                                                                    ###
REM ### wget: http://downloads.sourceforge.net/project/gnuwin32/wget/1.11.4-1/wget-1.11.4-1-bin.zip?r=&ts=1357593613&use_mirror=netcologne ###
REM ### Heslo k souboru s vlastním certifikátem a heslo Keystore mobilu je třeba zadat ručně                                               ###
REM ##########################################################################################################################################

REM ######################################################################################################################

SET /P WGET_PATH="Kde je umístěn spustitelný soubor WGET.EXE? "
IF NOT EXIST "%WGET_PATH%\wget.exe" CALL :ERROR_MSG "WGET.EXE nebyl nalezen."

REM ######################################################################################################################

REM Download potřebných souborů
ECHO Stahuji potřebné soubory...
"%WGET_PATH%\wget" -qc http://stahlforce.com/dev/unzip.exe
"%WGET_PATH%\wget" -qc http://dottech.org/downloads/adb_fastboot_and_other_tools.zip
unzip -qq adb_fastboot_and_other_tools.zip
MOVE adb_fastboot_and_other_tools adb 2>NUL 1>&2
SET PATH=%PATH%;%CD%\adb\android

IF EXIST "%ProgramFiles(x86)%\java\j*" GOTO SET_JAVA
IF EXIST "%ProgramFiles%\java\j*" GOTO SET_JAVA
CALL :ERROR_MSG "Java není nainstalována"

:SET_JAVA
SET OLD_DIR="%CD%"
CD "%ProgramFiles(x86)%\Java\j*"
SET JAVA_HOME="%CD%"
SET PATH=%PATH%;%JAVA_HOME%\bin
CD "%OLD_DIR%"

REM ######################################################################################################################

REM Vytvoření a zápis potřebných souborů
REM Zde je třeba zadat hesla pro přístup ke KeyStore
ECHO "" > cert_passwords_for_store.txt
ECHO changeme >> cert_passwords_for_store.txt
ECHO changeit >> cert_passwords_for_store.txt

REM Zde lze vložit aliasy ke zrušení souborů CAcert po akci
ECHO CACERT3 > cert_alias_to_del.txt
ECHO CACERT >> cert_alias_to_del.txt
ECHO cacertclass3 >> cert_alias_to_del.txt
ECHO cacertclass1 >> cert_alias_to_del.txt
ECHO class3 >> cert_alias_to_del.txt
ECHO root >> cert_alias_to_del.txt

REM Alias pro zrušení souboru vlastního certifikátu po akci
ECHO sso >> cert_alias_to_del.txt
ECHO andreas@terpotiz.net >> cert_alias_to_del.txt
ECHO aterpotiz@terpotiz.net >> cert_alias_to_del.txt
ECHO a.terpotiz@terpotiz.net >> cert_alias_to_del.txt
ECHO terpotiz@buz.at >> cert_alias_to_del.txt
ECHO andreas.terpotiz@live.at >> cert_alias_to_del.txt
ECHO CAcert Inc. ID von Andreas Terpotiz >> cert_alias_to_del.txt
ECHO CAcert Inc. ID von Andreas Terpotiz #5 >> cert_alias_to_del.txt
ECHO CAcert Inc. ID von Andreas Terpotiz #4 >> cert_alias_to_del.txt
ECHO CAcert Inc. ID von Andreas Terpotiz #2 >> cert_alias_to_del.txt

REM Zde jsou příkazy pro zavedení certifikátu do mobilu Android
ECHO su -c "mount -o rw,remount -t rfs /dev/block/stl9 /system" > android.txt
ECHO sleep 5 >> android.txt
ECHO su -c "cat /mnt/sdcard/cacerts.bks > /system/etc/security/cacerts.bks" >> android.txt
ECHO sleep 5 >> android.txt
ECHO su -c "mount -o ro,remount -t rfs /dev/block/stl9 /system" >> android.txt
ECHO sleep 5 >> android.txt
ECHO "reboot" >> android.txt

REM ######################################################################################################################

REM Zkouška mobilu
ECHO Prosím uzamkněte mobil Android.
adb wait-for-device shell exit

ECHO Zavedení seznamu certifikátů z mobilu
adb pull /system/etc/security/cacerts.bks cacerts.bks 2>NUL 1>&2

ECHO Zkouška hesla souboru certifikátu
CALL :CHECK_DL http://bouncycastle.org/download/bcprov-jdk16-141.jar "A/n" A
FOR /F %%a IN (cert_passwords_for_store.txt) DO (
        SET PASSWORD=%%a
        keytool -keystore cacerts.bks -storetype BKS -providerpath bcprov-jdk16-141.jar -provider org.bouncycastle.jce.provider.BouncyCastleProvider -storepass %PASSWORD% -v -list 2>NUL 1>&2
        IF ERRORLEVEL 0 GOTO WEITER
)

REM Ruční vstup hesla pro Keystore
SET /P PASSWORD="Prosím, zadejte heslo Keystore: " || set PASSWORD=""
keytool -keystore cacerts.bks -storetype BKS -providerpath bcprov-jdk16-141.jar -provider org.bouncycastle.jce.provider.BouncyCastleProvider -storepass %PASSWORD% -v -list 2>NUL 1>&2
IF %ERRORLEVEL% EQU 0 GOTO WEITER

CALL :ERROR_MSG "Nesprávné heslo"

:WEITER
IF %PASSWORD%=="" (ECHO Prázdné heslo pro soubor certifikátů) ELSE ECHO Heslo: %PASSWORD%

REM ######################################################################################################################

REM ################################################
REM ### Maže se certifikát s názvem ALIAS        ###
REM ################################################
:DEL_CERT
        SET /P DEL_CERT="Smazat starý certifikát?(A/n): " || SET DEL_CERT=a
        IF  /I "%DEL_CERT%" EQU "a" ( GOTO DEL_CERT_YES ) ELSE ( GOTO DEL_CERT_NO )
        GOTO DEL_CERT
:DEL_CERT_YES
        ECHO Výmaz případně existujícího starého certifikátu
        FOR /F %%a IN (cert_alias_to_del.txt) DO @keytool -keystore cacerts.bks -storetype BKS -providerpath bcprov-jdk16-141.jar -provider org.bouncycastle.jce.provider.BouncyCastleProvider -storepass %PASSWORD% -alias %%a -delete 2>NUL 1>&2
:DEL_CERT_NO

REM ######################################################################################################################

REM ######################################
REM ### Import certifikátu CAcert      ###
REM ######################################
:CACERT_IMP
        SET /P CACERT_IMP="Importovat certifikát CAcert?(A/n): " || SET CACERT_IMP=a
        IF  /I "%CACERT_IMP%" EQU "a" ( GOTO CACERT_IMP_YES) ELSE ( GOTO CACERT_IMP_NO )
        GOTO CACERT_IMP
:CACERT_IMP_YES
        ECHO Importovat certifikáty CAcert
        "%WGET_PATH%\wget" -qc http://www.cacert.org/certs/root_X0F.crt
        "%WGET_PATH%\wget" -qc http://www.cacert.org/certs/class3_x14E228.crt
        FOR /F "tokens=*" %%a in ('dir /b /a-d *.crt') DO @keytool -keystore cacerts.bks -storetype BKS -providerpath bcprov-jdk16-141.jar -provider org.bouncycastle.jce.provider.BouncyCastleProvider -storepass %PASSWORD% -importcert -trustcacerts -alias "%%~na" -file %%a -v -noprompt
:CACERT_IMP_NO

REM ######################################
REM ### Import vlastních certifikátů   ###
REM ######################################
:CACERT_IMP
        SET /P CACERT_IMP="Importovat vlastní certifikáty?(a/N): " || SET CACERT_IMP=n
        IF  /I "%CACERT_IMP%" EQU "a" ( GOTO CACERT_IMP_YES) ELSE ( GOTO CACERT_IMP_NO )
        GOTO CACERT_IMP
:CACERT_IMP_YES
        ECHO Importuji vlastní certifikáty
        REM Nastavení hesel pro vlastní certifikáty
        set /P CERTPASS="Prosím vložte heslo vlastního certifikátu: " || set /P CERTPASS=undef
        FOR /F "tokens=*" %%a in ('dir /b /a-d Own\*.p12') DO @keytool -importkeystore -srckeystore Own\%%a -srcstoretype pkcs12 -srcstorepass %CERTPASS% -providerpath bcprov-jdk16-141.jar -provider org.bouncycastle.jce.provider.BouncyCastleProvider -destkeystore cacerts.bks -deststoretype BKS -deststorepass %PASSWORD% -noprompt
:CACERT_IMP_NO

REM ######################################################################################################################

ECHO Zápis seznamu certifikátů na SD kartu mobilu
adb push cacerts.bks /mnt/sdcard/ 2>NUL 1>&2
ECHO Práce s mobilem skončila
adb shell < android.txt

GOTO ENDE

REM ######################################################################################################################

REM ######################
REM ### Podprogramy    ###
REM ######################

:CHECK_DL
SETLOCAL
        :START
                SET /P CHKDL="Download z %1 %2" || SET CHKDL=%3
                IF  /I "%CHKDL%" EQU "a" ( GOTO CHKDL_DL) ELSE ( GOTO CHKDL_END )
                GOTO START
        :CHKDL_DL
                ECHO Stažení "%1"
                "%WGET_PATH%\wget" -qc "%1"
                IF ERRORLEVEL 1 CALL :ERROR_MSG "%1 nelze stáhnout"
        :CHKDL_END
ENDLOCAL
GOTO:EOF

:ERROR_MSG
CLS
ECHO "%~1"
ECHO Skript byl přerušen.
EXIT

REM ######################################################################################################################

:ENDE
DEL /F /S /Q adb  2>NUL 1>&2 & RD /S /Q adb 2>NUL 1>&2
DEL adb_fastboot_and_other_tools.zip 2>NUL 1>&2
DEL unzip.exe 2>NUL 1>&2
DEL cert_passwords_for_store.txt 2>NUL 1>&2
DEL cert_alias_to_del.txt 2>NUL 1>&2
DEL android.txt 2>NUL 1>&2
DEL cacerts.bks 2>NUL 1>&2
DEL class3_x14E228.crt 2>NUL 1>&2
DEL root_X0F.crt 2>NUL 1>&2
DEL bcprov-jdk16-141.jar 2>NUL 1>&2

CAcert_to_Android.bat


Andreas Terpotiz


Viz také FAQ


CAcertFürAndroid-Import/CZ (last edited 2021-07-14 10:01:00 by AlesKastner)