MQTT 에서 SSL / TLS 를 사용 하여 안전성 을 높이다

번역http://rockingdlabs.dunmire.org/exercises-experiments/ssl-client-certs-to-secure-mqtt
MQTT 에서 SSL / TLS 를 사용 하여 안전성 을 높이다
MQTT 를 사용 하기 시 작 했 을 때 SSL / TLS 인증 을 사용 하여 에이전트 와 의 데 이 터 를 암호 화 하 는 관련 자 료 를 쉽게 찾 을 수 있 음 을 발견 했다.OwnTracks 프로젝트 는 CA 와 서명 을 설정 하 는 스 크 립 트 까지 제공 하지만 인증 서 는 클 라 이언 트 가 아 닌 프 록 시 서버 에 사 용 됩 니 다.
그 설명 에 따라 SSL 로 MQTT 클 라 이언 트 의 신분 을 검증 할 때 저 는 문제 가 생 겼 습 니 다. 이 가죽 은 주로 기 존 문서 의 부족 한 부분 을 보완 하려 고 합 니 다.
용어 설명: TLS (전송 층 보안) 는 SSL 의 새 이름 (콘돔 연결 층) 입 니 다.StackExchange 는 SSL, TLS, and HTTPS 의 차이 점 에 대해 더욱 상세 한 분석 을 제공 합 니 다.
준비 하 다.
  • openssl 을 사용 하여 인증 서 를 생 성 합 니 다 (저 는 Ubuntu 14.04 LTS 에서 이 과정 을 개발 하고 직접 테스트 했 습 니 다).
  • 이 과정 을 보 여 주 려 면 오픈 소스 에이전트 mosquitto 를 사용 합 니 다.apt - get 을 통 해 설치:
  • $ sudo apt-get install mosquitto
    순서
    알림: 이 과정 은 같은 시스템 에서 진 행 됩 니 다.
    1. 보 호 받 는 workspace 만 들 기
    경고: 인증서 의 키 에 암 호 를 사용 하지 않 았 습 니 다.이것 은 최선 의 방법 이 아 닐 수도 있 지만, 데 몬 과 끼 워 넣 는 장치 에서 쉽게 사용 할 수 있 습 니 다.잘 숨 기 는 게 중요 해.
    현재 예제 에서 저 희 는 다른 사용자 가 접근 할 수 없 는 디 렉 터 리 를 만 들 고 사용 할 것 입 니 다.$ mkdir myCA $ chmod 700 myCA $ cd myCA
    2. CA 를 만 들 고 server 엔 드 인증 서 를 생 성 합 니 다.
    OweTracks 프로젝트 에서 generate - CA. sh 스 크 립 트 를 다운로드 하고 실행 합 니 다.이 스 크 립 트 는 CA 파일 을 만 들 고 서버 인증 서 를 만 들 며 CA 를 사용 하여 인증 서 를 서명 합 니 다.
    주: 생산 환경 에서 이 인 스 턴 스 를 사용 하기 전에 thegenerate - CA. sh 스 크 립 트 를 맞 춰 야 합 니 다. 이것 은 이 장 에서 설명 할 범 위 를 초과 합 니 다.$ wget https://github.com/owntracks/tools/raw/master/TLS/generate-CA.sh . $ bash ./generate-CA.sh
    generate - CA. sh 는 6 개의 파일 을 생 성 합 니 다. ca. crt, ca. key, ca. srl, my host. crt, my host. csr 와 my host. key.각각 인증서 (. CRT), 열쇠 (. KEY), 요청 (. csr 파일), 서명 과정 에서 일련의 기록 파일 (. slr) 입 니 다.myhost 파일 이 시스템 에서 다른 이름 일 수도 있 습 니 다.
    그 중 세 개의 파일 이 / etc / mosquitto 디 렉 터 리 로 복 사 됩 니 다.$ sudo cp ca.crt /etc/mosquitto/ca_certificates/ $ sudo cp myhost.crt myhost.key /etc/mosquitto/certs/
    프로필 / etc / mosquitto / mosquitto. conf 는 대략 다음 과 같 습 니 다.
    # mosquitto.conf
    pid_file /var/run/mosquitto.pid
    persistence true
    persistence_location /var/lib/mosquitto/
    log_dest file /var/log/mosquitto/mosquitto.log
    cafile /etc/mosquitto/ca_certificates/ca.crt
    certfile /etc/mosquitto/certs/myhost.crt
    keyfile /etc/mosquitto/certs/myhost.key
    

    인증서 파일 을 복사 하고 mosiquitto. conf 를 수정 한 후 서 비 스 를 다시 시작 합 니 다.$ sudo service mosquitto restart
    3. 검사
    클 라 이언 트 mosquitto 사용 가능sub 에서 검증 하기:$ mosquitto_sub -t \$SYS/broker/bytes/\# -v --cafile ca.crt $SYS/broker/bytes/received 65 $SYS/broker/bytes/sent 67 $SYS/broker/bytes/received 130 $SYS/broker/bytes/sent 196
    이 토픽 들 은 10 초 에 한 번 씩 업 데 이 트 됩 니 다.디 버 깅 이 필요 하 다 면 이렇게 mosquitto_sub -d 하거나 / var / logs / mosquitto / mosquitto. log 로그 기록 을 볼 수 있 습 니 다.
    4. 인증서 생 성
    이 점 에서 제 가 했 던 절 차 를 시도 하고 generate - CA. sh 를 사용 하여 다른 인증 서 를 만 들 수 있 지만 그 러 지 마 세 요!인증서 nsCertType 을 만 드 는 것 이 서버 로 유효 하기 때문에 클 라 이언 트 에서 사용 할 수 없습니다.스 크 립 트 를 사용 해 보 았 습 니 다. 매 뉴 얼 페이지 의 OpenSSL 을 읽 은 후에 다음 세 가지 명령 이 제 가 필요 로 하 는 인증 서 를 만 들 것 입 니 다.$ openssl genrsa -out client.key 2048 $ openssl req -new -out client.csr
    -key client.key -subj "/CN=client/O=example.com"
    $ openssl x509 -req -in client.csr -CA ca.crt
    -CAkey ca.key -CAserial ./ca.srl -out client.crt
    -days 3650 -addtrust clientAuth

    관건 적 인 매개 변 수 는 -addtrust clientAuth 이 고 서명 한 인증 서 를 클 라 이언 트 와 똑 같이 적용 합 니 다.
    이것 은 매우 간단 하지만, 당신 은 일 정량의 다른 클 라 이언 트 의 인증 서 를 원할 수도 있 습 니 다.이런 방식 으로 클 라 이언 트 의 인증 서 를 실현 하 는 것 은 믿 을 수 없다.그래서 추 가 된 스 크 립 트 는 generate - CA. sh 의 보충 입 니 다.이렇게 사용 가능:$ bash ./generate-client.sh client2
    5. 다시 설정
    mosquitto 설정 을 변경 합 니 다. / etc / mosquitto / mosquitto. conf 파일 끝 에 이 몇 줄 을 추가 하여 클 라 이언 트 에 안전 인증 을 추가 하도록 합 니 다.
    # mosquitto.conf
    pid_file /var/run/mosquitto.pid
    persistence true
    persistence_location /var/lib/mosquitto/
    log_dest file /var/log/mosquitto/mosquitto.log
    cafile /etc/mosquitto/ca_certificates/ca.crt
    certfile /etc/mosquitto/certs/SVE14A1HFXB.crt
    keyfile /etc/mosquitto/certs/SVE14A1HFXB.key
    require_certificate true
    

    그리고 서 비 스 를 다시 시작 합 니 다.$ sudo service mosquitto restart
    6. 테스트
    이때 이렇게 mosquitto 를 사용 합 니 다.sub 명령 실패:$ mosquitto_sub -t \$SYS/broker/bytes/\# -v --cafile ca.crt
    //Error: Protocol error
    Error: A TLS error occurred.
    

    서버 요 구 를 충족 시 키 기 위해 인자 – cert 와 – key 를 지정 합 니 다:$ mosquitto_sub -t \$SYS/broker/bytes/\# -v --cafile ca.crt --cert client.crt --key client.key $SYS/broker/bytes/received 65 $SYS/broker/bytes/sent 67 $SYS/broker/bytes/received 130 $SYS/broker/bytes/sent 136
    두 번 째 client 도 이렇게 합 니 다.$ mosquitto_sub -t \$SYS/broker/bytes/\# -v --cafile ca.crt --cert client2.crt --key client2.key $SYS/broker/bytes/received 130 $SYS/broker/bytes/sent 198 $SYS/broker/bytes/received 195 $SYS/broker/bytes/sent 269
    총결산
    클 라 이언 트 인증 서 를 사용 하면 다른 차원 에서 도 MQTT 시스템 에 안전 보 호 를 제공 합 니 다.현재 암호 화 된 통신 채널 을 제외 하고 서버 도 올 바른 서명 인증서 의 연결 만 받 을 것 입 니 다.
    MQTT 시스템 에 서 는 안전 작업 이 많 고 암호 화 통신 정 보 는 좋 은 시작 입 니 다.
    Follow-up
    연락 이 필요 하 시 면 제 구 글 + 글 에 메 시 지 를 남 겨 주세요.

    좋은 웹페이지 즐겨찾기