Не удалось подтвердить SSL-сертификат Mosquitto - PullRequest
0 голосов
/ 06 ноября 2018

Я использую Mosquitto версии 1.4.8 на своем тестовом ПК и сервере. Сервер доступен через ha.euroicc.com. Я сгенерировал сертификаты и ключи, используя следующий скрипт:

#! /usr/bin/env bash

# Create the CA Key and Certificate for signing Client Certs
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

# Create the Server Key, CSR, and Certificate
openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.csr

# We're self signing our own server cert here.  This is a no-no in production.
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

# Create the Client Key and CSR
openssl genrsa -out client.key 1024
openssl req -new -key client.key -out client.csr

# Sign the client certificate with our CA cert.  Unlike signing our own server cert, this is what we want to do.
# Serial should be different from the server one, otherwise curl will return NSS error -8054
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt

# Verify Server Certificate
openssl verify -purpose sslserver -CAfile ca.crt server.crt

# Verify Client Certificate
openssl verify -purpose sslclient -CAfile ca.crt client.crt

Я поставил «d», «dd» и «dddd» везде, кроме общего имени. Общее название для ca - «d», а для сервера / клиента - «ha.euroicc.com».

CN для сервера / клиента должно быть этим значением, или оно вообще не работает!

Мой текущий конфигурационный файл комаров:

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

persistence_file mosquitto.db
log_dest syslog
log_dest stdout
log_dest topic
log_type error
log_type warning
log_type notice
log_type information
connection_messages true
log_timestamp true

password_file /etc/mosquitto/passwd
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d

allow_anonymous false

port 8883
cafile /etc/mosquitto/certs/ca.crt
keyfile /etc/mosquitto/certs/server.key
certfile /etc/mosquitto/certs/server.crt

require_certificate true

Я использую эту команду для подписки с тестового ПК:

mosquitto_sub -h ha.euroicc.com -t "topic/test" -u "damjan" -P "damjan" -p 8883 --cafile ca.crt --key client.key --cert client.crt

И получите эти ошибки: На тестовом ПК:

Error: A TLS error occurred.

На сервере:

1532564086: OpenSSL Error: error:14089086:SSL
routines:ssl3_get_client_certificate:certificate verify failed
1532564086: Socket error on client <unknown>, disconnecting.

Я пробовал без require_certificate , установленного на стороне сервера, и без использования ключа клиента / сертификата на стороне клиента, и подписка работает в этом случае. Это означает, что параметры имени пользователя / пароля в порядке.

Это означает, что я либо сгенерировал сертификаты и ключи с проблемой, мой mosquitto.conf неисправен, либо я использую mosquitto_sub с проблемой. Может быть что-то еще?

Я действительно в растерянности и не могу понять, что попробовать дальше ... Каждый бит информации помогает.

1 Ответ

0 голосов
/ 06 ноября 2018

Хорошо, проблема в том, что я генерировал все файлы на своем тестовом ПК, а затем отправлял их на сервер.

Я попытался сгенерировать все на сервере, а затем скопировать соответствующие файлы на мой тестовый ПК, и все работает нормально.

Я следовал http://rockingdlabs.dunmire.org/exercises-experiments/ssl-client-certs-to-secure-mqtt. С меньшими изменениями, такими как имя хоста и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...