CryptodevATECCx08 Auth: различия между версиями
Xenols (обсуждение | вклад) |
Xenols (обсуждение | вклад) |
||
Строка 4: | Строка 4: | ||
В контроллеры '''WirenBoard''' встроен чип '''ATECCx08''', назначением которого является генерация ключевых пар, хранение приватных ключей а также операции асимметричного шифрования с использованием эллиптических кривых. | В контроллеры '''WirenBoard''' встроен чип '''ATECCx08''', назначением которого является генерация ключевых пар, хранение приватных ключей а также операции асимметричного шифрования с использованием эллиптических кривых. | ||
Приватный ключ после начальной инициализации хранится в микросхеме и не покидает ее, тем самым исключается его компрометация. | Приватный ключ после начальной инициализации хранится в микросхеме и не покидает ее, тем самым исключается его компрометация. | ||
Используя данную микросхему можно организовать авторизацию контроллера и защиту соединения по SSL на внешних сервисах и быть уверенным, что запрос выполнен с использованием именно этого экземпляра микросхемы. | Используя данную микросхему можно организовать авторизацию контроллера и защиту соединения по SSL на внешних сервисах и быть уверенным, что запрос выполнен с использованием именно этого экземпляра микросхемы. | ||
В данной статье пойдет речь о трех вариантах применения: nginx, openssl, mosquitto. | В данной статье пойдет речь о трех вариантах применения: nginx, openssl, mosquitto. | ||
Для доступа к криптоустройству нужна библиотека libateccssl1.1, установим ее | Для доступа к криптоустройству нужна библиотека libateccssl1.1, установим ее командой: | ||
'''apt install libateccssl1.1''' | '''apt install libateccssl1.1''' | ||
Строка 24: | Строка 27: | ||
init = 1 | init = 1 | ||
</pre> | </pre> | ||
Теперь приступим к созданию сертификатов. | |||
Для начала создадим свой центр сертификации (Certification Authority, CA): | |||
Для этого сгенерируем ключевую пару: | |||
'''openssl genrsa -out ca.key 2048''' | |||
И сертификат нашего CA: | |||
'''openssl req -x509 -new -days 3650 -key ca.key -out ca.crt -subj "/CN=MY CA"''' | |||
'''CA''' является основой безопасности в данной схеме, поэтому эти операции выполняем на машине доступ к которой | |||
есть только у владельца '''CA'''. | |||
Далее на конроллере WB создаем запрос на сертификат устройства: | |||
openssl req -new -engine ateccx08 -keyform engine -key ATECCx08:00:04:C0:00 -subj "/CN=wirenboard-AP6V5MDG" -out device_AP6V5MDG.csr | |||
В этой команде мы указываем, что запрос подписывается приватным ключом, находящимся в криптоустройстве ateccx08 ключом | |||
с идентификатором ATECCx08:00:04:C0:00 и публичным именем wirenboard-AP6V5MDG. Запрос помещаем в файл device_AP6V5MDG.csr. | |||
Имя можно выбрать любое уникальное, удобно для этой цели спользовать идентификатор устройства, который по умолчанию прописывается | |||
в файле /etc/hostname: | |||
cat /etc/hostname | |||
wirenboard-AP6V5MDG | |||
Далее этот запрос подписываем в нашем центре сертификации: | |||
openssl x509 -req -in device_AP6V5MDG.csr -CA ca.crt -CAkey ca.key -out device_AP6V5MDG.crt -days 365 -CAcreateserial | |||
В этой команде мы уазываем файл запроса, и файлы CA необходимые для подписи. В итоге получаем сертификат устройства device_AP6V5MDG.crt. | |||
Файл device_AP6V5MDG.crt копируем на контроллер WB, он будет необходим для авторизацци. | |||
Давайте посмотрим, что содержится в файлах сертификатов CA и устройства: |
Версия 17:47, 5 февраля 2019
Использование встроенного чипа ATECCx08 для авторизации на внешних сервисах.
В контроллеры WirenBoard встроен чип ATECCx08, назначением которого является генерация ключевых пар, хранение приватных ключей а также операции асимметричного шифрования с использованием эллиптических кривых. Приватный ключ после начальной инициализации хранится в микросхеме и не покидает ее, тем самым исключается его компрометация.
Используя данную микросхему можно организовать авторизацию контроллера и защиту соединения по SSL на внешних сервисах и быть уверенным, что запрос выполнен с использованием именно этого экземпляра микросхемы.
В данной статье пойдет речь о трех вариантах применения: nginx, openssl, mosquitto.
Для доступа к криптоустройству нужна библиотека libateccssl1.1, установим ее командой:
apt install libateccssl1.1
Далее нужно отредактировать файл /etc/ssl/openssl.cnf, добавив в нем следующие строчки:
openssl_conf = openssl_init [openssl_init] engines = engine_section [engine_section] ateccx08 = ateccx08_section [ateccx08_section] init = 1
Теперь приступим к созданию сертификатов. Для начала создадим свой центр сертификации (Certification Authority, CA):
Для этого сгенерируем ключевую пару:
openssl genrsa -out ca.key 2048
И сертификат нашего CA:
openssl req -x509 -new -days 3650 -key ca.key -out ca.crt -subj "/CN=MY CA"
CA является основой безопасности в данной схеме, поэтому эти операции выполняем на машине доступ к которой есть только у владельца CA.
Далее на конроллере WB создаем запрос на сертификат устройства:
openssl req -new -engine ateccx08 -keyform engine -key ATECCx08:00:04:C0:00 -subj "/CN=wirenboard-AP6V5MDG" -out device_AP6V5MDG.csr
В этой команде мы указываем, что запрос подписывается приватным ключом, находящимся в криптоустройстве ateccx08 ключом с идентификатором ATECCx08:00:04:C0:00 и публичным именем wirenboard-AP6V5MDG. Запрос помещаем в файл device_AP6V5MDG.csr.
Имя можно выбрать любое уникальное, удобно для этой цели спользовать идентификатор устройства, который по умолчанию прописывается в файле /etc/hostname:
cat /etc/hostname wirenboard-AP6V5MDG
Далее этот запрос подписываем в нашем центре сертификации: openssl x509 -req -in device_AP6V5MDG.csr -CA ca.crt -CAkey ca.key -out device_AP6V5MDG.crt -days 365 -CAcreateserial
В этой команде мы уазываем файл запроса, и файлы CA необходимые для подписи. В итоге получаем сертификат устройства device_AP6V5MDG.crt. Файл device_AP6V5MDG.crt копируем на контроллер WB, он будет необходим для авторизацци.
Давайте посмотрим, что содержится в файлах сертификатов CA и устройства: