2016-05-28 2 views
0

Я разрабатываю приложение для Android, которое может соединяться с несколькими серверами узлов. Это соединение должно быть безопасным, поэтому мне нужны сертификаты. Но я не могу платить за сертификаты. Как и мои исследования, я создам сертификаты для каждого сервера и подписываю их своим собственным корневым сертификатом (мне также это нужно). Затем я отправлю корневой сертификат в свое приложение для Android. Поэтому я могу подключить несколько серверов из одного приложения для Android. Но я не знаю, как создавать эти сертификаты и как привязывать их к андроидному приложению.создание сертификата для android volley и nodejs

+0

Вы спрашиваете о сертификации SSL? – pedrofb

+0

Да. Мне нужно создать сертификаты. Я использую окна. Я нашел инструмент, который может создавать и управлять сертификатами, но он не работал. Я пробовал с хром, и я получил ошибку. Я также читал, что мне нужен bks keystore для Android. Я не понял, как его создать. – ekilic

+0

Если вы не хотите иметь дело с созданием сертификатов и доверительными магазинами, я предлагаю вам использовать доверенный орган.Попробуйте https://letsencrypt.org/. Это бесплатно. Если вы предпочитаете использовать свои собственные сертификаты, выполните поиск в SO, как это сделать, и как настроить свой конкретный сервер. Этот вопрос большой – pedrofb

ответ

1

ЦС может сгенерировать сертификат, связанный с IP, но это не является обычным явлением. Я согласен в этом случае, более целесообразно использовать самогенерируемые сертификаты. Вам нужно

1) Создание сертификата CA и SSL сертификат

извлеченного из here Вам понадобится OpenSSL

Создание сертификата CA

openssl genrsa -out rootCA.key 2048 
openssl genrsa -des3 -out rootCA.key 2048 
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem 

Это запустит интерактивный сценарий, который спросит вас о различных битах информации. Вы получите rootCA.pem

Создать один сертификат для каждого устройства

openssl genrsa -out device.key 2048 
openssl req -new -key device.key -out device.csr  
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 500 -sha256 

Вам будет предложено различные вопросы (Страна, Штат/провинция и т.д.), во втором шаге вставки в «общим названием» IP- или имя вашего устройства. Важно, чтобы соответствовать настоящее имя, потому что браузер или Android устройство будет проверять его

2) Настройки сервера nodejs использовать протокол HTTPS я не имею достаточно знаний о Node.js, чтобы обеспечить вам хорошее объяснение или ссылку , поэтому используйте официальную документацию. Возможно, какой-нибудь читатель мог бы отредактировать это и предоставить ссылку

3) добавить открытый ключ и цепочку сертификата в доверительный магазин приложения Android.

Извлеченные here из

Вам нужно будет

1) Получить публичную часть вашего CA сертификата

2) Создание хранилища ключей BKS и импортировать сертификат (только необходимо будет корень)

3) Используйте хранилище ключей в своем приложении. Создайте пользовательский HTTP-клиент Apache, который использует ваше хранилище ключей для настройки SSL-соединения.

Подробности приведены в ссылке, то есть в вики сообщества.

Для Android Volley. Using Android Volley With Self-Signed SSL Certificate

+0

У меня есть некоторые вопросы о втором шаге. При создании сертификата, если я ввожу публичный ip своего устройства, могу ли я получить к нему доступ из своей локальной сети с помощью частного ip like (192.168.1.1). Я хочу получить доступ к этому устройству вместе с публичным и частным адресом. Является ли это возможным? И я не понял термин имени устройства. Вы говорите о имени хоста? – ekilic

+1

Я хотел сказать имя хоста. Если вы установите общее имя (имя хоста) сертификата на IP-адрес, то оно будет действительным только для этого IP-адреса. Если вы хотите использовать частный и открытый доступ, вам нужны два сертификата и две конечные точки, или используйте DNS-имя вместо ip-адреса. – pedrofb

+0

Да, я думаю использовать динамические DNS. Поэтому мне не нужно платить за статический адрес для моих конечных точек. Но если я его использую, я не могу использовать свои конечные точки локально без подключения к Интернету. Если ssl предоставляет опцию для нескольких общих имен или не проверяет общее имя, это решит мою проблему. – ekilic

Смежные вопросы