(необязательно) — подписание csr
На предыдущем шаге мы создали запрос тренировочного сертификата и ключ вымышленного сервера. Мы скопировали его в директорию /tmp на сервере ЦС, моделируя процесс, который мы бы использовали при отправке запросов CSR на подпись реальными клиентами или серверами.
Продолжим рассматривать вымышленный сценарий. Теперь серверу ЦС необходимо импортировать тренировочный сертификат и подписать его. Когда ЦС подтвердит сертификат и отправит ответ серверу, клиенты, доверяющие Центру сертификации, смогут также доверять новому сертификату.
Поскольку мы будем работать внутри инфраструктуры PKI в ЦС, где доступна утилита easy-rsa, мы будем использовать утилиту easy-rsa для большего удобства в отличие от использования openssl, как мы делали в предыдущем примере.
Первым шагом для подписания вымышленного CSR будет импорт запроса сертификата с помощью скрипта easy-rsa:
Output
. . .
The request has been successfully imported with a short name of: sammy-server
You may now use this name to perform signing operations on this request.
Теперь вы можете подписать запрос, запустив скрипт easyrsa с опцией sign-req, указав затем тип запроса и общее имя, включаемое в CSR. Запрос может иметь тип client, server или ca. Поскольку мы тренируемся с сертификатом для вымышленного сервера, нужно использовать тип запроса server:
В результатах вам будет предложено подтвердить, что запрос поступил из надежного источника. Для подтверждения введите yes и нажмите ENTER:
Output
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 3650 days:
subject=
commonName = sammy-server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
. . .
Certificate created at: /home/sammy/easy-rsa/pki/issued/sammy-server.crt
Если вы зашифровали ключ ЦС, вам будет предложено ввести пароль.
Выполнив эти шаги, мы подписали CSR sammy-server.req с помощью закрытого ключа сервера ЦС в директории /home/sammy/easy-rsa/pki/private/ca.key. Полученный файл sammy-server.crt содержит открытый ключ шифрования тренировочного сервера, а также новую подпись от сервера ЦС. Подпись сообщает всем, кто доверяет ЦС, что они также могут доверять сертификату sammy-server.
Если бы это был запрос веб-сервера, сервера VPN или другого реального сервера, последним шагом на сервере ЦС стало бы распространение новых файлов sammy-server.crt и ca.crt с сервера ЦС на удаленный сервер, отправивший запрос CSR:
На этом этапе выпущенный сертификат можно было бы использовать с веб-сервером, сервером VPN, инструментом управления конфигурацией, СУБД, системой аутентификации клиентов и т. п.
(необязательно) — создание и подписание образца запроса сертификата
Мы настроили ЦС для использования и теперь можем попробовать сгенерировать закрытый ключ и запрос сертификата, чтобы познакомиться с процессом подписания и распространения.
Запрос на подписание сертификата (CSR) состоит из трех частей, а именно открытого ключа, идентификационной информации запрашивающей системы и подписи запроса, создаваемой на основе закрытого ключа запрашивающей системы. Закрытый ключ остается секретным, и его можно будет использовать для шифрования информации, которую сможет расшифровать любой пользователь с подписанным открытым сертификатом.
Следующие шаги будут выполняться на второй системе Linux под управлением CentOS, Fedora или другого производного от RedHat дистрибутива Linux. Это может быть другой удаленный сервер или локальная система Linux, например ноутбук или настольный компьютер.
openssl обычно устанавливается по умолчанию в большинстве дистрибутивов Linux, но для уверенности стоит запустить в системе следующую команду:
Когда вам будет предложено установить openssl, введите y, чтобы продолжить выполнение установки. Теперь вы готовы создать тренировочный CSR с помощью openssl.
В первую очередь для создания CSR необходимо сгенерировать закрытый ключ. Чтобы создать закрытый ключ с помощью openssl, создайте директорию practice-csr и сгенерируйте ключ в этой директории. Мы будем выполнять этот запрос на фиктивном сервере под названием sammy-server, в отличие от случая создания сертификата для идентификации пользователя или другого ЦС.
Output
Generating RSA private key, 2048 bit long modulus (2 primes)
. . .
. . .
e is 65537 (0x010001)
Теперь у нас имеется закрытый ключ, с помощью которого можно создать CSR, используя утилиту openssl. Вам будет предложено заполнить ряд полей, в том числе указать страну, область и город. Вы можете ввести ., если хотите оставить поле пустым, но для реальных CSR лучше использовать правильные значения при указании своего расположения и организации:
Output
. . .
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:New York
Locality Name (eg, city) [Default City]:New York City
Organization Name (eg, company) [Default Company Ltd]:DigitalOcean
Organizational Unit Name (eg, section) []:Community
Common Name (eg, your name or your server's hostname) []:sammy-server
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Если вы хотите, чтобы эти значения добавлялись автоматически при вызове openssl, а не запрашивались через интерактивный диалог, вы можете передать аргумент -subj в OpenSSL. Обязательно измените выделенные значения для соответствия вашему расположению, организации и имени сервера:
Чтобы проверить содержимое CSR, вы можете прочитать файл запроса с помощью команды openssl и проверить поля внутри него:
Output
subject=C = US, ST = New York, L = New York City, O = DigitalOcean, OU = Community, CN = sammy-server
Когда вас устроит тема запроса тренировочного сертификата, скопируйте файл sammy-server.req на сервер ЦС с помощью scp:
На этом шаге вы сгенерировали запрос подписи сертификата для вымышленного сервера sammy-server. В реальной ситуации запрос может исходить от веб-сервера разработки, которому требуется сертификат TLS для тестирования, или от сервера OpenVPN, который запрашивает сертификат, чтобы пользователи могли подключиться к VPN. На следующем шаге мы перейдем к подписанию запроса на подписание сертификата с использованием закрытого ключа сервера ЦС.
Документация
Если сертификат и закрытый ключ находятся на токене, то для работы с таким сертификатом его надо установить в локальное хранилище.
Это можно сделать через программный интерфейс приложения КриптоАРМ ГОСТ или с помощью команд программы КриптоПРО CSP.
Установка сертификата из ключевого контейнера в КриптоАРМ ГОСТ на Windows.
Для установки сертификата из ключевого контейнера нужно выбрать в меню Сертификаты подпункт Ключи. В левой области представления отображаются все подключенные хранилища контейнеров закрытых ключей. В правой области отображается информация о сертификате в выделенном контейнере.
В каждом из хранилищ отображаются контейнеры закрытых ключей. В случае отсутствия контейнеров в хранилище, оно может быть скрыто как пустое.
После выбора контейнера отображается информация о находящемся в нем сертификате.
По кнопке Установить сертификат происходит установка сертификата в Личное хранилище сертификатов. Данный сертификат становится доступен для выполнения операций подписи, шифрования и расшифрования.
Для удаления контейнера нужно нажать кнопку Удалить контейнер и подтвердить операцию.
Если установить флаг Удалить связанный с контейнером сертификат, то вместе с контейнером сертификат удалится из хранилища личных сертификатов. Если флаг не установлен, сертификат останется в хранилище личных сертификатов без привязки к ключевому контейнеру. Таким сертификатом нельзя выполнять операции подписи и расшифрования.
В приложении реализован поиск контейнеров по символьному совпадению в названии контейнера.
Установка сертификата с помощью программы КриптоПРО CSP.
Установка с помощью программы КриптоПРО CSP отличается в операционных системах Windows, Linux и OS X.
- Установка на операционной системе Windows выполняется следующим образом.
Нужно подключить токен (например, Рутокен) и открыть программу КритоПро CSP. В появившемся диалоге перейти на вкладку Сервис и нажать на кнопку Просмотреть сертификаты в контейнере.
Далее нажать Обзор и выбрать контейнер.
После выбора контейнера нажать кнопку Далее.
В контейнере содержится сертификат, сведения о котором будут отображены на последнем шаге мастера. Этот сертификат можно установить в систему, нажав на кнопку Установить.
После успешной установки сертификата можно открыть приложение КриптоАРМ ГОСТ и перейти на вкладку
Сертификаты
. Установленный сертификат должен отображаться в списке Личные сертификаты.
Установка сертификата на Linux
- Для установки сертификата под операционной системой Linux нужно подключить токен (например, Рутокен) и открыть Терминал (Terminal). Далее следует ввести команду
/opt/cprocsp/bin/<arch>/list_pcsc
В результате получаем имя устройства, например,
Aktiv Rutoken ECP 00 00
Total: SYS: 0.010 sec USR: 0.000 sec UTC: 0.430 sec
ErrorCode: 0x00000000]
В команде под <arch> подразумевается один из следующих идентификаторов платформы:
ia32 — для 32-разрядных систем; amd64 — для 64-разрядных систем.
Далее нужно ввести команду:
sudo /opt/cprocsp/sbin/<arch>/cpconfig -hardware reader -add «имя_устройства», где в кавычках указывается имя устройства. Например, sudo /opt/cprocsp/sbin/amd64/cpconfig -hardware reader -add «Aktiv Rutoken ECP»
Затем потребуется ввести пароль администратора (пользователя root), после чего должно появиться сообщение вида:
Adding new reader:
Nick name: Aktiv Rutoken ECP
Succeeded, code:0x0
Для просмотра контейнеров на токене можно ввести команду
/opt/cprocsp/bin/<arch>/csptest -keys -verifyc -enu –fq -u
В результате получаем имя устройства и имя контейнера и после символа | — имя устройства и уникальное имя:
\.Aktiv Rutoken ECPимя_контейнера | \.Aktiv Rutoken ECPуникальное_имя
Затем требуется ввести для копирования сертификата с токена
/opt/cprocsp/bin/<arch>/certmgr -inst -cont ‘\.Aktiv Rutoken ECPуникальное_имя’
В кавычках должно быть указано имя Вашего устройства и уникальное имя контейнера (справа от символа |). В терминале должна вывестись информация об установленном Вами сертификате.
После завершения установки можно открыть программу КриптоАРМ ГОСТ и перейти на вкладку Сертификаты. Установленный сертификат должен отображаться в списке Личные сертификаты. Если сертификат отображается как действительный (зеленый индикатор), то с ним можно работать. Если сертификат отображается как недействительный (красный индикатор), то надо устанавливать корневой и промежуточные сертификаты. Для получения корневых и промежуточных сертификатов лучше обратиться в удостоверяющий центр.
Установка сертификата на OS X
- Для установки сертификата по операционной системой OS X требуется подключить токен (например, Рутокен) и открыть Терминал (Terminal). В терминале следует ввести команду:
/opt/cprocsp/bin/csptest -card -enum
В результате получаем имя устройства, например,
Aktiv Rutoken ECP 00 00
Total: SYS: 0.010 sec USR: 0.000 sec UTC: 0.430 sec
ErrorCode: 0x00000000]
Затем требуется ввести команду
sudo /opt/cprocsp/sbin/cpconfig -hardware reader -add «имя_устройства», где в кавычках указывается имя устройства. Например, sudo /opt/cprocsp/sbin/cpconfig — hardware reader -add «Aktiv Rutoken ECP»
Далее требуется ввести пароль администратора (пользователя root). В результате должно быть выведено сообщение вида:
Adding new reader:
Nick name: Aktiv Rutoken ECP
Succeeded, code:0x0
Для просмотра контейнеров на токене ввести команду: /opt/cprocsp/bin/csptest -keys -verifyc -enu –fq -u
В итоге получаем имя устройства и имя контейнера и после символа | — имя устройства и уникальное имя:
\.Aktiv Rutoken ECPимя_контейнера | \.Aktiv Rutoken ECPуникальное_имя
Ввести или вставить команду для копирования сертификата с токена
/opt/cprocsp/bin/certmgr -inst -cont ‘\.Aktiv Rutoken ECPуникальное_имя’
В кавычках должно быть имя Вашего устройства и уникальное имя контейнера (справа от символа |).
В терминале должна вывестись информация об установленном Вами сертификате.
После установки требуется открыть программу КриптоАРМ ГОСТ, перейти на вкладку Сертификаты. Установленный сертификат должен отображаться в списке Личные сертификаты. Если сертификат отображается как действительный (зеленый индикатор), то с ним можно работать. Если сертификат отображается как недействительный (красный индикатор), то надо устанавливать корневой и промежуточные сертификаты. Для получения корневых и промежуточных сертификатов лучше обратиться в удостоверяющий центр.
Как установить доверенный сертификат ca на android-устройство? oh! android
Я создал свой собственный сертификат CA, и теперь я хочу установить его на устройство Android Froyo (HTC Desire Z), чтобы устройство доверяло моему сертификату.
Android хранит сертификаты CA в своем хранилище ключей Java в /system/etc/security/cacerts.bks
. Я скопировал файл на свой компьютер, добавив свой сертификат с помощью portecle 1.5 и вернул его на устройство.
Теперь Android, похоже, не перезагружает файл автоматически. Я прочитал несколько сообщений в блоге, что мне нужно перезагрузить устройство. Это приведет к тому, что файл будет перезаписан оригинальным.
Моя следующая попытка состояла в том, чтобы установить сертификат с SD-карты, скопировав его и используя соответствующую опцию из меню настроек. Устройство сообщает мне, что сертификат установлен, но, видимо, он не доверяет сертификату. Более того, когда я пытаюсь скопировать хранилище ключей на свой компьютер, я все еще нахожу исходный cacerts.bks
.
Итак, какой правильный способ установить мой собственный корневой сертификат CA на устройстве Android 2.2 в качестве доверенного сертификата? Есть ли способ сделать это программно?
Теперь с Android 4.0 это возможно. Я легко смог установить сертификат прокси-сервера Charles Web Debbuging на моем ненагруженном устройстве и успешно обнюхать трафик 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.
Если вам нужен ваш сертификат для соединений 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); } } }
То, что я сделал, чтобы использовать сертификаты startssl, было довольно просто. (На моем корневом телефоне)
Я скопировал /system/etc/security/cacerts.bks на мою sdcard
Загружены http://www.startmy-sertif.ru/certs/ca.crt и http://www.startmy-sertif.ru/certs/sub.class1.server.ca.crt
Пошел на portecle.sourceforge.net и запустил portecle непосредственно с веб-страницы.
Открыл мой файл cacerts.bks с моей SD-карты (ничего не вводил при запросе пароля)
Выберите import в portacle и откройте файл sub.class1.server.ca.crt, в моем случае у него все уже было ca.crt, но, возможно, вам тоже нужно установить его.
Сохраненный хранилище ключей и скопировал его baxck в /system/etc/security/cacerts.bks (я сделал резервную копию этого файла сначала на всякий случай)
Перезагрузите мой телефон, и теперь я могу показать свой сайт, используя сертификат startssl без ошибок.
Существует более простое решение для этого, чем здесь, или в связанных потоках. Если вы используете веб-просмотр (как и я), вы можете добиться этого, выполнив в нем функцию JAVASCRIPT. Если вы не используете веб-просмотр, вы можете создать скрытую для этой цели. Вот функция, которая работает практически в любом браузере (или веб-просмотре) для запуска установки (обычно через общий репозиторий сертификатов os, в том числе на Droid). Он использует хороший трюк с 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 работает с Droids с API 19 и выше, но более старые версии веб-браузера не будут работать так. Общая идея все еще работает – просто загрузите / откройте файл с помощью веб-браузера, а затем оставьте его. Это может быть более легкое и универсальное решение (в настоящее время java):
public static void installTrustedRootCert( final String certAddress ){ WebView certWebView = new WebView( instance_ ); certWebView.loadUrl( certAddress ); }
Обратите внимание, что instance_ является ссылкой на Activity. Это прекрасно работает, если вы знаете URL-адрес сертификата. В моем случае, однако, я решаю это динамически с помощью программного обеспечения на стороне сервера. Мне пришлось добавить достаточный объем дополнительного кода для перехвата URL-адреса перенаправления и вызвать его таким образом, который не вызвал бы сбоя на основе сложности с потоками, но я не буду добавлять сюда эту путаницу …
Криптопро вставлен другой носитель: как исправить
Ошибка «Вставьте ключевой носитель» или «Вставлен другой носитель» возникает при попытке подписания электронного документа. Сначала следует убедиться, что USB-токен с сертификатом подключен к ПК (в качестве носителя используются защищенные криптоключи или обычные флешки).
- Открыть меню «Пуск» → «Панель управления» → «КриптоПро CSP».
- Зайти во вкладку «Сервис» → «Посмотреть сертификаты в контейнере» → «Обзор».
- Выбрать из списка ключевой контейнер, нажать ОК и «Далее».
- Нажать «Установить». Если появится предупреждение о том, что сертификат уже присутствует в хранилище, дать согласие на его замену.
- Дождаться загрузки сертификата в хранилище «Личное» и нажать ОК.
https://www.youtube.com/watch?v=rIOEXCM4PJg
После переустановки рекомендуется перезагрузить ПК. Для первичной инсталляции СКПЭП применим аналогичный алгоритм действий.
Распространенные сообщения об ошибках сертификатов
Проще всего отключить проверку сертификатов вообще. Но, к сожалению, для того что бы отключить проверку, всё равно придётся подписать минимум одну программу.
Большинство из нас сталкивались с сообщениями об ошибках сертификатов. Попробуем выделить их основные категории, описать причину и попытаться устранить.
«Срок действия сертификата истек»
Проблема возникает при установке приложения, подписанного просроченным сертификатом. Возможное решение проблемы:
1) Если Вы знаете когда был получен сертификат, которым подписано приложение, то просто переведите дату Вашего телефона на дату получения сертификата.
2) Если (что, как правило, и бывает) Вы не знаете дату получения сертификата — переводим дату на месяц (если не получилось — пол года, год и т.д.) назад.
3) После этого устанавливаем приложение, и выставляем текущую дату.
«Срок действия сертификата еще не наступил»
Дата начала действия сертификата программы еще не наступила. Ошибка актуальна для новых сертификатов или в случае некорректной системной даты в телефоне. Так же эта ошибка может появиться при сильно большом переводе даты во время решения предыдущей проблемы. Возможное решение проблемы:
1) Проверьте системную дату.
2) Если проблема возникла для сертификата, который недавно получен — переведите дату на один день вперёд и попробуйте снова. Затем переведите дату обратно.
«Невозможно установить защищенное приложение из ненадежного источника»
Устанавливаемое приложение не подписано персональным сертификатом. Такой сертификат создаётся для каждого смартфона отдельно, с привязкой к IMEI. Возможное решение проблемы:
1) Получить сертификат под IMEI Вашего телефона;
2) Подписать приложение on-line, что по правде проблематично.
«Ошибка сертификата«
Эта ошибка появляется когда приложение было подписано «чужим» сертификатом (выданным под другой IMEI). Возможно, Вы просто допустили ошибку при вводе своего IMEI в запросе на получение сертификата или on-line подписки. Возможное решение проблемы: Придётся подписать приложение своим сертификатом. При чем — не подписанную ранее версию. Если Вы попытаетесь подписать уже ранее подписанное чужим сертификатом приложение — оно не установится на Ваш смартфон.
«Установка запрещена», «Неверный сертификат»
Вы не отключили проверку сертификатов. Возможное решение проблемы: Диспетчер приложений -> Функции -> Настройки -> Прогр. усианов. -> Все, Проверка сертификатов -> Отключена
«Ошибка в сертификате — обратитесь к поставщику приложения!»
Приложение не имеет сертификата безопасности. Возможное решение проблемы: Необходимо подписать приложение.
При попытке установки приложения, Ваш смартфон пытается соединиться с Интернетом
Это происходит из-за необходимости проверки подлинности сертификата безопасности, которым подписана программа. Для соединения используется либо указанный Вами принудительно Интернет адрес, либо адрес по умолчанию, установленный в настройках Диспетчера приложений. Возможное решение проблемы: Необходимо в Диспетчере приложений отключить проверку сертификатов. Дисп. приложений — > Функции — > Настройки — > Прогр. устан.- > Все, Проверка сертиф. — > отключена.