나는 매력처럼 작동하는 로컬 라즈베리 파이에 모기 MQTT가 있습니다. AWS IoT에서도 작동하는 MQTT 브로커를 만들었습니다.
내 라즈베리 파이에서 mosquitto_pub 및 mosquitto_sub 명령을 사용하여 AWS 브로커에 "수동으로"연결, 게시 및 구독 할 수 있습니다. 이 작업을 수동으로 수행 할 때 모든 인증서와 항목을 사용합니다. 내가 사용하는 명령은 다음과 같습니다.
mosquitto_pub --cafile amazonCA1.pem --cert certificate.cert --key private.key -h XXXXXXXXXXXXXXXXXX.amazonaws.com -p 8883 -q 1 -d -t "iot/test" -m "testing message"
그래서 문제는 인증서에 있지 않다고 생각합니다.
문제는 "브리지 모드"를 사용하도록 구성을 변경할 때 mosquitto 로그에 다음 메시지가 표시됩니다.
1584371971: Connecting bridge (step 1) awsiot (XXXXXXXXXXXXXXXXXXXXX.amazonaws.com:8883)
1584371972: Connecting bridge (step 2) awsiot (XXXXXXXXXXXXXXXXXXXXX.amazonaws.com:8883)
1584371972: Bridge bridgeawsiot sending CONNECT
1584371972: OpenSSL Error: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
1584371972: Socket error on client local.bridgeawsiot, disconnecting.
1584371977: Bridge local.bridgeawsiot doing local SUBSCRIBE on topic #
내 mosquitto.conf는 다음과 같습니다.
pid_file /var/run/mosquitto.pid
persistence true persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log log_type all
#log_dest topic
log_type error log_type warning log_type notice log_type information
connection_messages true log_timestamp true
include_dir /etc/mosquitto/conf.d
password_file /etc/mosquitto/passwordfile allow_anonymous false
그리고 여기 내 /etc/mosquitto/conf.d/bridge.conf
connection awsiot
address XXXXXXXXXXXXXXXXXXXX.amazonaws.com:8883
# Specifying which topics are bridged
topic # both 1
# Setting protocol version explicitly
bridge_protocol_version mqttv311
bridge_insecure false
# Bridge connection name and MQTT client Id,
# enabling the connection automatically when the broker starts.
cleansession true
clientid bridgeawsiot
start_type automatic
notifications false
log_type all
# =================================================================
# Certificate based SSL/TLS support
# -----------------------------------------------------------------
#Path to the rootCA
bridge_cafile /home/pi/certs/amazonCA1.pem
# Path to the PEM encoded client certificate
bridge_certfile /home/pi/certs/certificate.cert
# Path to the PEM encoded client private key
bridge_keyfile /home/pi/certs/private.key
따라서 전반적인 문제는 수동으로 연결 / 게시 / 구독하면 모든 것이 작동하지만 브리지 conf 파일을 사용하면 오류가 발생합니다.
OpenSSL Error: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
어떤 제안? 로컬 브로커 (라즈베리 파이)에서 사용자 이름 / pw로 인증 방법을 사용하고 AWS에서 인증서 인증을 사용하는 데 문제가 있습니까 ??
감사
좋아, 내가 뭘했는지 모르겠다. 문제가 해결되었다는 것만 알고있다.
처음에는 내가 가지고있는 Ubuntu VM에 모기를 새로 설치했고 모든 것이 올바르게 작동했습니다.
그런 다음 라즈베리 파이에서 Mosquitto를 제거하고 다시 설치했습니다. Ubuntu VM을 구성한 방식대로 구성했지만 여전히 운이 없습니다. 문제가 내 라즈 비안 이미지라고 생각하기 시작했습니다 ...하지만 구성을 약간 조정 한 후 인증서 파일을 한 디렉터리에서 다른 디렉터리로 이동하고 권한을 변경하고 bridge.conf 파일 디렉터리 등을 변경합니다. 일하기 시작했고 이제 괜찮습니다.
따라서 앞으로이 문제가 발생하면 파일이나 디렉토리의 권한 일 수 있습니다.
편집 (하루 후) : 다른 브로커에서 동일한 것을 복제하려고 시도했을 때 모든 작업을 동일하게 수행했지만 로컬 브로커가 AWS IoT 브리지와의 연결을 안정화하자마자 연결이 끊어졌습니다 (아래 메시지. 인증서 오류 없음 시각):
1584456917: Bridge local.bridgeawsiot doing local SUBSCRIBE on topic #
1584456917: Connecting bridge (step 1) awsiot (XXXXXXXXXXXXXXX.amazonaws.com:8883)
1584456918: Connecting bridge (step 2) awsiot (XXXXXXXXXXXXXXX.amazonaws.com:8883)
1584456918: Bridge bridgeawsiot sending CONNECT
1584456918: Received CONNACK on connection local.bridgeawsiot.
1584456918: Bridge local.bridgeawsiot sending SUBSCRIBE (Mid: 2, Topic: #, QoS: 0, Options: 0x00)
1584456918: Sending PUBLISH to local.bridgeawsiot (d0, q0, r1, m0, 'XXXXX/XXXXX/XXXXX', ... (6 bytes))
1584456918: Sending PUBLISH to local.bridgeawsiot (d0, q0, r1, m0, 'XXXXX/XXXXX/XXXXX/LWT', ... (6 bytes))
1584456918: Sending PUBLISH to local.bridgeawsiot (d0, q0, r1, m0, 'XXXXX/XXXXX/XXXXX/LWT', ... (6 bytes))
1584456918: Sending PUBLISH to local.bridgeawsiot (d0, q0, r1, m0, 'XXXXX/XXXXX/XXXXX/LWT', ... (6 bytes))
1584456918: Sending PUBLISH to local.bridgeawsiot (d0, q0, r1, m0, 'XXXXX/XXXXX/XXXXX/LWT', ... (6 bytes))
1584456918: Sending PUBLISH to local.bridgeawsiot (d0, q0, r1, m0, 'XXXXX/XXXXX/XXXXX/LWT', ... (6 bytes))
1584456918: Received SUBACK from local.bridgeawsiot
1584456919: Socket error on client local.bridgeawsiot, disconnecting.
나는 모든 주제와 함께 다리를 사용하고 있었다.
topic # both 1
나는 THINK I는 다리와 연결로 많은 장치가 많은 메시지를 게시하고 연결이 떨어졌다 즉시. 그래서 제가 연결된 주제를 변경 한 후 모든 것이 정확했습니다.
topic iot/test both 1
[다른 편집 : 3 일 후] "topic # both 1"을 사용했을 때 연결이 끊어진 이유를 알아 냈습니다. 내 장치 중 하나가 RETAIN 플래그가 TRUE로 설정된 메시지를 전송했기 때문입니다.
AWS IoT 설명서에 따르면 RETAIN TRUE를 지원하지 않으며 AWS IoT Broker의 연결이 끊어지는 방식으로 메시지가 전송되는 경우.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다