Как установить доверенный сертификат ЦС на Android-устройство?
Я создал свой собственный сертификат CA и теперь хочу установить его на свое устройство Android Froyo (HTC Desire Z), чтобы оно доверяло моему сертификату.
Android хранит сертификаты ЦС в своем хранилище ключей Java в /system/etc/security/cacerts.bks . Я скопировал файл на свой компьютер, добавил свой сертификат с помощью portecle 1.5 и отправил его обратно на устройство.
Теперь Android, похоже, не перезагружает файл автоматически. Я прочитал в нескольких сообщениях в блоге, что мне нужно перезагрузить устройство. Это приведет к тому, что файл снова будет перезаписан исходным.
Моя следующая попытка заключалась в том, чтобы установить сертификат с SD-карты, скопировав его и используя соответствующий параметр в меню настроек. Устройство сообщает мне, что сертификат был установлен, но, видимо, не доверяет сертификату. Более того, когда я пытаюсь скопировать хранилище ключей на свой компьютер, я все равно нахожу исходный стандартный файл cacerts.bks .
Итак, как правильно установить мой собственный корневой сертификат ЦС на устройстве Android 2.2 в качестве доверенного сертификата? Есть ли способ сделать это программно?
До Android KitKat вам необходимо выполнить рутирование устройства для установки новых сертификатов.
С Android KitKat (4.0) до Nougat (7.0) это возможно и просто. Мне удалось установить сертификат Charles Web Debbuging Proxy на моем устройстве без рутирования и успешно прослушивать SSL-трафик.
Извлечение из http://wiki.cacert.org/FAQ/ImportRootCert
До версии Android 4.0, с версией Android Gingerbread & Froyo, был один файл только для чтения (/system/etc/security/cacerts.bks), содержащий хранилище доверенных сертификатов со всеми Сертификаты CA (‘system’) доверенные по умолчанию на Android. Его используют как системные приложения, так и все приложения, разработанные с помощью Android SDK. Используйте эти инструкции по установке сертификатов CAcert на Android Gingerbread, Froyo, …
Начиная с Android 4.0 (Android ICS/’Ice Cream Sandwich’, Android 4.3 ‘Jelly Bean’ и Android 4.4 ‘KitKat ‘), системные доверенные сертификаты находятся в системном разделе (только для чтения) в папке’/system/etc/security/’в виде отдельных файлов. Однако теперь пользователи могут легко добавлять свои собственные «пользовательские» сертификаты, которые будут храниться в «/data/misc/keychain/certs-added».
Системными сертификатами можно управлять на Android устройства в разделе «Настройки» -> «Безопасность» -> «Сертификаты» -> «Система», тогда как доверенные сертификаты пользователя управляются там в разделе «Пользователь». При использовании доверенных сертификатов пользователя Android вынуждает пользователя устройства Android применять дополнительные меры безопасности: использование PIN-кода, графического ключа или пароля для разблокировки устройства является обязательным при использовании сертификатов, предоставленных пользователем.
Установить сертификаты CAcert как доверенные сертификаты пользователя очень просто.. Установка новых сертификатов в качестве «доверенных системным» сертификатов требует дополнительной работы (и требует корневого доступа), но она позволяет избежать требования блокировки экрана Android.
Начиная с Android N , становится немного сложнее, см. Этот отрывок с веб-сайта Charles Proxy:
Начиная с Android N, вам нужно добавить конфигурацию в свое приложение чтобы он доверял сертификатам SSL, созданным Charles SSL Proxying. Это означает, что вы можете использовать SSL-прокси только с приложениями, которые вы контролируете.
Чтобы настроить приложение на доверие Чарльзу, вам необходимо добавить в приложение файл конфигурации сетевой безопасности. Этот файл может переопределить системное значение по умолчанию, позволяя вашему приложению доверять установленным пользователем сертификатам CA (например, корневому сертификату Charles). Вы можете указать, что это применимо только в отладочных сборках вашего приложения, чтобы производственные сборки использовали профиль доверия по умолчанию.
Добавьте файл res/xml/network_security_config.xml в ваше приложение :
Затем добавьте ссылку на этот файл в манифест вашего приложения, следующим образом:
xml version = "1.0" encoding = "utf-8"?>
EAP-TLS Certificates for Wireless on Android
In this lesson, I want to demonstrate to you how to install a user certificate on an Android device so that you can authenticate to a wireless network using EAP-TLS. This is the most secure method of authentication when it comes to wireless networks, but it requires some more effort as you require certificates on the server and each client device.
If you don’t have a RADIUS server and Certificate Authority yet, then you should take a look at my PEAP and EAP-TLS on Windows Server 2008 lesson. In this lesson, I will be using a Windows Server 2008 machine running Certificate Services to generate a client certificate for my Android device.
There are three devices that we require for this lesson:
- Android Device: I’m using my Samsung Galaxy S3 running Android 4.x
- Certificate Authority: required to generate the user certificate. I’m using Windows Server 2008 R2.
- Windows computer: Used to request the user certificate for the Android device. I will be using Windows 7 in my example.
And there are two certificates that we require:
The user certificate is required to authenticate the user, and the root CA certificate is required in case you created your own certificate authority. We’ll start with the creation of a user certificate.
Generate User Certificate on Windows 7
First, we will generate a user certificate for the Android device. I will use Windows 7 to connect to the Certificate Authority and request a user certificate. I will use Web enrollment for this as it’s probably the most convenient method of enrolling user certificates.
Open the web browser and open http://your-server-ip/certsrv. Enter the credentials of the user account that requires a certificate. I’m doing this for a user called “Android”.
Click on the request a certificate button to continue.
There is no need for advanced options. Click on user certificate to continue.
Your web browser will warn you that you are about to request a certificate, click on Yes to continue.
In the final screen, the web enrollment is ready to submit your request. Hit the submit button to continue.
Your user certificate will be ready, and the web browser will ask if it should install the user certificate for you. Click on Install this Certificate to continue.
If everything went OK, you should get a message that the user certificate has been installed.
Now we have a user certificate on our Windows 7 computer. We will export this user certificate and import it to our Android device.
Export Certificates
Our Android device will require the user certificate that we just generated but also the root CA certificate in case you are running your own Certificate Authority. I will use my Windows 7 computer to export both certificates. We’ll start with the user certificate…
Export User Certificate
We will use the certificate manager on Windows 7 to view our certificates and export them.
Click on Start > type “CERTMGR.MSC” (without the quotes) and hit enter.
The Certificate manager will start. Click on Personal > Certificates and you will see the user certificate that we generated for the Android user.
Click on the Android user certificate (right mouse click) and select Export.
You will see the certificate export wizard. Click Next to continue.
The wizard will ask you to export the private key for the user certificate. Select Yes, export the private key, and click Next to continue.
In the next screen, you will have to choose the file format. Everything is greyed out since this is a user certificate. Select the “Include all certificates in the certification path if possible” and “Export all extended properties” checkboxes. Click Next to continue.
The export wizard will ask you to protect the private key with a password. This is a good idea, so enter a secure password. Click Next to continue.
The export wizard will ask you for a filename. I’ll name my user certificate “Android”. Click Next to continue.
Finally, the export is done. Click Finish to continue.
Now we have the user certificate for user Android stored in a file. We still will need the root CA certificate…
Export Root CA Certificate
If you don’t have the root CA certificate yet, you will have to export it from the certificate authority or your Windows 7 computer. In my other lesson, I already covered how to export the root CA in installing PEAP and EAP-TLS on Windows Server 2008. Take a look at the Configure Wireless Client section to see how you can export the root CA to a filename.
Once you are done, you should have two files:
- The user certificate is in PFX file format.
- The root CA certificate is in DER file format.
We are now ready to import the certificates on our Android device.
Import Certificates on Android Device
Most Android devices will only import certificates from an SD card (internal or external). I am using a Samsung Galaxy S3 running Android 4.x but importing the certificates should be similar on other Android 4.x devices.
Some older Android versions might only recognize certain file formats. If your certificate is not recognized, try renaming the “cer” files to “crt” and the “pfx” file to “p12”.
First, you need to copy the two certificate files to your Android device. In my case, I had to copy it to the internal storage, but it’s possible that you need to copy it to an external SD card on other Android devices. Whatever storage “device” it is, you need to copy the files to the root…don’t use any sub-folders. Here’s an example of where I stored the certificate files on my Samsung Galaxy S3:
Above, you can see that I stored the following two files on sdcard0 (despite the name, this is the internal storage of the phone):
Once you have the files in place, you import them. Go to the settings of your Android device.
Select the Security option from the Settings menu.
At the bottom, you will find the Credentials storage. Select Install from storage device.
Your Android device will find the certificate files on your storage device and prompt you with the following screen.
We need to install both. Let me give you an example of the user certificate. Type in the password for the private key and hit OK.
In case you get the error “No certificate file found on SD card” then A) your Android device doesn’t support the file format for the certificates that you copied or B) you copied the certificates to the wrong storage device.
Android will ask you for a certificate name. Keep the default or rename it to something else and press OK.
Make sure you import both certificates. You can verify that your Android device recognizes the certificates. Select Trusted credentials if you want to take a look.
Below you can see that this Android device has a user certificate.
Our Android device now knows about the certificates that we require. Time to connect to the wireless network!
Connect to Wireless Network using EAP-TLS
With the certificates in place, we are ready to connect to the Wireless Network. Go to the Wifi settings of your android device and connect to the correct SSID. You will be prompted for some security details. Enter the following items:
- EAP method: TLS
- Phase 2 authentication: none
- CA certificate: your root CA.
- User certificate: your user certificate.
- Identity: username
Leave the rest of the items empty and press Save.
You should now be connected to the wireless network:
That’s all there is to it! I hope this has been helpful in helping you connect your Android devices to the Wireless network using EAP-TLS. If you have any questions feel free to leave a comment in our forum!