TLS 인증을 사용하는 MQTT 채널 구성 예

이 예는 TLS 인증을 사용하는 MQTT 채널을 구성하는 예를 안내합니다. MQTT 와 Mosquitto 사이에 채널을 구성합니다.

이 예에서는 Docker 둘 다에 대한 컨테이너IBM® MQ ~에Red Hat® Enterprise Linux® 그리고 모기 CentOS, 그러나 모든 유형의 서버에 적용됩니다. (레지스트리 인타이틀먼트로 인해CentOS 가 모기에 사용되었습니다.)

이 예에서는 TLS를 사용한 채널 인증을 위한 원격 측정 채널 구성 MQ 에 설명된 구성 변경 사항을 알고 있다고 가정합니다.

단방향 TLS를 위한 IBM MQ 키 저장소 및 채널 구성

[2024년 6월MQ 9.4.0 ][2024년 6월MQ 9.4.0 ]중요: IBM MQ 9.4.0, CMS 키 저장소 및 저장소 파일은 SSL/TLS를 사용하는 AMQP 및 MQTT 채널에서 지원되지 않습니다. PKCS #12 키 저장소를 사용하고 대신 IBM MQ 비밀번호 보호 시스템을 사용하여 키 저장소 비밀번호를 보호하십시오.
다음 단계를 완료하십시오.
  1. [2024년 6월MQ 9.4.0 ][2024년 6월MQ 9.4.0 ] IBM MQ PKCS #12 키 저장소를 만듭니다:
    runmqakm -keydb -create -db mqtt.p12 -pw "passw0rd" -type p12
  2. [2024년 6월MQ 9.4.0 ][2024년 6월MQ 9.4.0 ]개인 인증서를 만듭니다:
    runmqakm -cert -create -db mqtt.p12 -pw "passw0rd" -size 2048 -dn "CN= mqm, OU=MQTest, O=MQSupport, C=US" -sig_alg SHA256_WITH_RSA -label ibmwebspheremqmqm
    다음 명령을 사용하여 인증서 작성을 확인할 수 있습니다.
    runmqakm -cert -list -v -db mqtt.p12 -pw "passw0rd"
  3. [2024년 6월MQ 9.4.0 ][2024년 6월MQ 9.4.0 ]Runmqsc 프롬프트에 다음 명령을 입력하여 MQTT 채널을 만듭니다:
    DEFINE CHANNEL(MQTTDEMO) CHLTYPE(MQTT) BACKLOG(4096) PORT(8883) MCAUSER('mqm') PROTOCOL(MQTTV311,MQTTV3,HTTP) SSLCAUTH(OPTIONAL) SSLCIPH('SSL_RSA_WITH_AES_256_CBC_SHA256') SSLKEYR('/var/mqm/mqtt/mqtt.p12') SSLKEYP('passw0rd') TRPTYPE(TCP)
    참고로 이 채널은 Java 암호 매핑을 사용합니다. JMS용 MQ 클래스의 TLS CipherSpecs 및 CipherSuites 참조하세요.
  4. 인증서를 추출하십시오.
    runmqakm -cert -extract -db mqtt.p12 -pw "passw0rd" -label ibmwebspheremqmqm -target serverCert.pem

Docker 컨테이너의 CentOS 에 모기 설치

다음 단계를 완료하여 Docker 모기가 달리는 컨테이너 CentOS:

  1. docker pull centos
  2. docker run -it centos /bin/bash
  3. dnf -y install epel-release
  4. dnf -y install mosquitto

서명자 인증서를 모기로 이동

IBM MQ 에서 작성한 인증서를 모기로 이동하려면 다음 단계를 완료하십시오. 이러한 단계는 Docker 호스트 머신에서 실행됩니다.
  1. Docker에서 컨테이너 ID를 보십시오.
    docker container ls
  2. Docker 컨테이너에서 로컬 시스템 Docker로 파일 복사
    cp MQ_Container_ID:/var/mqm/mqtt/serverCert.pem serverCert.pem 
  3. 로컬 시스템에서 centOS 시스템의 루트 디렉토리로 파일을 복사하십시오.
    docker cp serverCert.pem CentOS_ContainerID:/serverCert.pem

모기를 사용하여 공개

다음 명령을 사용하여 모기에 테스트 메시지를 공개하십시오.
mosquitto_pub -h 172.17.0.2 --cafile serverCert.pem --insecure -p 8883 -i mosquittoClient -t test -m 'test message' -d
명령 인수의 의미는 다음과 같습니다.
-h
Red Hat Enterprise Linux 호스트 IP 주소 ( nslookup를 사용하여 찾을 수 있음).
--cafile
서명자 인증서를 포함하는 파일입니다.
--insecure
이 옵션은 예제에서 자체 서명된 인증서를 사용하기 때문에 지정됩니다. 실제 CA 인증서를 사용할 때 이 옵션을 사용하지 마십시오.
-p
포트 번호입니다.
-i
클라이언트 ID입니다.
-t
발행되는 토픽입니다.
-m
발행되는 메시지입니다.
-d
디버그 메시지를 사용으로 설정하십시오.

상호 TLS 인증을 위해 MQTT 채널 구성

다음 명령을 입력하여 MQTT 채널을 SSLCAUTH (REQUIRED) 로 재구성하십시오.

ALTER CHANNEL(MQTTDEMO) CHLTYPE(MQTT) SSLCAUTH(REQUIRED)

모기 서버에서 키/인증서 쌍을 작성하고 IBM MQ 에 추가하십시오.

다음 명령을 입력하여 모기에 키/인증서 쌍을 작성하십시오.

  1. openSSL 를 사용하여 모기에 대한 키/인증서 쌍을 작성하십시오.
    openssl req -x509 -newkey rsa:4096 -keyout mosquittoKey.pem -out mosquittoCert.pem -subj "/CN=Mosquitto"
  2. 컨테이너의 컨테이너 ID를 나열하십시오.
    docker container ls
  3. 다음과 같이 모기를 인증서에 로컬 시스템 Docker에 복사하십시오.
    docker cp CentOS_ContainerID:mosquittoCert.pem .
  4. 다음과 같이 모기를 IBM MQ에 인증서로 복사하십시오.
    docker cp mosquittoCert.pem MQ_Container_ID:/var/mqm/mqtt
  5. IBM MQ 키 저장소에 인증서를 추가하십시오.
    runmqakm -cert -add -db mqtt.p12 -pw "passw0rd" -file mosquittoCert.pem
  6. MQTT 채널을 재시작하십시오.

모기를 사용하여 공개 및 상호 인증

상호 인증을 사용하여 모기와 함께 공개하려면 다음 단계를 완료하십시오.
  1. 다음 명령은 테스트 메시지를 공개해야 합니다.
    mosquitto_pub -h 172.17.0.2 --cafile serverCert.pem --insecure -p 8883 -i mosquittoClient -t test -m 'test message' -d --cert mosquittoCert.pem --key mosquittoKey.pem
  2. 다음 명령은 모기로부터 개인 인증서를 보내지 않으므로 테스트 메시지를 공개하고 오류 메시지를 생성하는 데 실패해야 합니다.
    mosquitto_pub -h 172.17.0.2 --cafile serverCert.pem --insecure -p 8883 -i mosquittoClient -t test -m 'test message' -d /var/mqm/qmgrs/mqttDemoQM/errors/ mqxr_0.log