보안을 유지하려는 간단한 MQTT Mosquitto 서버가 있습니다.
모기.conf:
log_type all
password_file /etc/mosquitto/mosquitto_users.txt
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
port 8883
cafile /etc/mosquitto/ca_certificates/ca.crt
keyfile /etc/mosquitto/ca_certificates/server.key
certfile /etc/mosquitto/ca_certificates/server.crt
tls_version tlsv1
현재 서버에서 다음을 생성합니다.
CA 인증서
openssl genrsa -des3 -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
서버 인증서:
openssl genrsa -out server.key 2048
openssl req -new -out server.csr -key server.key
자체 서명된 서버 인증서:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 720
구성 에 따라 msoquitto.conf
필요한 모든 파일을 배치하십시오 .
ca.crt
인증서를 통해 메시지를 구독하고 게시하려면 다음 명령을 사용하고 있습니다 .
mosquitto_sub -h 192.168.1.8 -t sensor --cafile ca.crt -p 8883 -d
mosquitto_pub -h 192.168.1.8 -t sensor --cafile ca.crt -m "test" -p 8883 -d
모든 것이 정상입니다. 하지만 사람들 사이의 의사소통은 안전한가요? 서버를 인터넷에 올려놓으면 아무도 정보를 얻을 수 없나요?
답변1
이렇게 작동하면 항상 조금 무섭습니다.
테스트하고 싶다면 실패하도록 시도해 볼 수도 있습니다. 누군가가 귀하의 서버를 스푸핑하려고 시도하는 경우 귀하의 (자체 서명된) CA 인증서로 서명된 인증서를 사용하여 그렇게 할 수 없습니다. 따라서 클라이언트가 사용하는 CA 인증서가 서버 인증서에 서명하는 데 사용되는 인증서와 일치하지 않는 경우 어떤 일이 발생하는지 확인하고 싶을 수 있습니다.
따라서 클라이언트가 인증서를 mosquitto_sub
올바르게 확인하고 있는지 테스트하기 위해 mosquitto_pub
새로운 "더미" CA 인증서를 생성해 볼 수 있습니다. 아니요서버에 설치하세요. 하지만 다음 명령 mosquitto_sub
과 함께 사용해 보세요 mosquitto_pub
.
mosquitto_sub -h 192.168.1.8 -t sensor --cafile dummy_ca.crt -p 8883 -d
mosquitto_pub -h 192.168.1.8 -t sensor --cafile dummy_ca.crt -m "test" -p 8883 -d
클라이언트가 서버와 안전하게 통신하는 경우에는 실패합니다. 이는 서버 인증서가 클라이언트가 기대하는 CA 인증서로 서명되지 않았기 때문입니다. 가상 인증서에 적용되는 경우 문제가 있는 것이며 그 이유를 조사해야 합니다.
공개 키 암호화는 키 쌍(공개 및 개인 키)을 사용하여 작동합니다. 개인 키는 숨겨져 있으며 다른 사람과 절대 공유되지 않습니다.누구나. 공개 키를 사용하여 암호화된 모든 항목은 개인 키를 통해서만 해독할 수 있습니다. 공개 키도 공개 키로 암호화된 내용을 해독하는 데 사용할 수 없으며 공개 키에서 개인 키를 알아낼 수도 없습니다.
따라서 암호화된 채널을 통해 통신하기 위해 두 장치(클라이언트 및 서버)는 개인 키를 비밀로 유지하면서 공개 키를 서로에게 보냅니다. 이 정보는 어떤 것도 해독하는 데 사용할 수 없기 때문에 해커가 이러한 정보를 얻을 수 있었는지 여부는 중요하지 않습니다. 그러면 클라이언트는 서버의 공개 키를 사용하여 모든 것을 암호화하고, 서버는 클라이언트의 공개 키를 사용하여 모든 것을 암호화합니다. 메시지를 해독할 수 있는 개인 키를 가진 유일한 서버이기 때문에 서버만이 수신한 메시지를 해독할 수 있습니다. 마찬가지로 클라이언트는 전송된 메시지를 해독할 수 있는 유일한 클라이언트입니다.
인증서는 해커가 서버를 가장하여 "중간자 공격"을 수행할 수 없도록 보장하는 데에만 사용됩니다. 인증서에는 세 가지 주요 정보가 포함되어 있습니다.
- 서버 이름(예: 도메인 이름)
- 서버의 공개 키
- CA의 서명은 인증서가 진짜임을 증명합니다.
이렇게 하면 해커는 다음을 수행해야 하기 때문에 서버를 가장할 수 없습니다.
- 보내는 모든 내용을 해독하려면 서버의 개인 키에 액세스하세요. 이 정보는 서버에 의해 항상 비밀로 유지되고 누구에게도 공개되지 않기 때문에 얻을 수 없습니다.
- 자신의 (가짜) 공개 키가 서버에 적합하다는 것을 나타내는 인증서를 보냅니다. CA 서명을 얻을 수 없기 때문에 가짜 인증서를 만들 수 없습니다.