Я использую 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 с проблемой. Может быть что-то еще?
Я действительно в растерянности и не могу понять, что попробовать дальше ...
Каждый бит информации помогает.