k001
k001
:...
April 2032
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

android: importing certificates

Все спят, а я пробую поставить свой (самоподписанный) SSL сертификат в гуглофон. Фигушки с маслицем! То есть он как бы туда ставится, но это ничего не меняет.

Собственно, задача в том, чтобы получить доступ к своему почтовому серверу по IMAP over SSL (dovecot), SMTP + TLS (sendmail). Доступ-то я получил (IMAP, кстати, работает со штатным клиентом очень хорошо), только с опциями "SSL (trust any certificate)" и "TLS (trust any certificate)". Хочется то, что в скобках, убрать.

Собственно, поставить сертификат очень просто -- надо сделать так, чтобы веб-сервер отдавал его с Content-Type: application/x-x509-ca-cert. Для этого пишем:
cat << EOF >> /etc/httpd/conf.d/types.conf
AddType application/x-x509-ca-cert .pem
EOF
/etc/init.d/httpd restart


Дальше открываем URL с сертификатом, и он вроде как импортируется (при этом спрашивается пароль на внутрений keychain). Причём это получилось у меня сделать с сертификатом в формате pem.

Кстати, нашёл в Интернетах вопиюще неправильные инструкции. Дескать, надо подсунуть телефону сертификат в формате PKCS12, и всё зажужжит. А чтобы сделать такой сертификат, надо, мол, иметь доступ к приватному ключу (про это много где написано). Вот такая примерно неправильная команда предлагается:

openssl pkcs12 -export -out cert.p12 -in cert/cert.pem -inkey private/cert.pem -name "My cert"

В результате мы получаем файлик, в котором есть и сертификат, и приватный ключ (в чём можно убедиться, просмотрев вывод openssl pkcs12 -info -nodes -in cert.p12). Конечно, это совсем не то, что мы хотим выкладывать и раздавать! Правильная команда вот такая:

openssl pkcs12 -export -out cert.p12 -in cert.pem -nokeys -name "My cert"

Впрочем, это не помогает всё равно. При попытке открыть URL с сертификатом телефон спрашивает пароль от сертификата в бесконечном цикле (пока не нажмёшь Cancel) -- никакой пароль не подходит. Я пробовал делать файл сертификата с паролем и без -- без разницы, и так и так не работает.

Потом я подумал, что проблема в том, что это самоподписанный сертификат, и вспомнил про CAcert.org. Дай, думаю, их рутовый CA сертификат поставлю. Тут тоже всё просто, но ничего не работает. Во-первых, заходим на https://www.cacert.org/ и убеждаемся, что браузер ругается на подписанный непонятно кем сертификат. Во-вторых, открываем http://www.cacert.org/certs/root.crt -- сертификат импортируется. В-третьих, проверяем, что есть результат -- снова открываем https://www.cacert.org/ -- ой, всё равно ругается.

Не знаю, что я делаю не так. Вроде бы всё делаю так. Android 2.2.

Есть вариант, конечно, пересобрать кейчейн и подсунуть ему, но для этого надо разлочивать телефон, это как-то неспортивно.

From:
( )Anonymous- this user has disabled anonymous posting.
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message:



Notice! This user has turned on the option that logs IP addresses of anonymous posters.