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 ]](ng940.gif)
중요: IBM MQ 9.4.0, CMS 키 저장소 및 저장소 파일은 SSL/TLS를 사용하는 AMQP 및 MQTT 채널에서 지원되지 않습니다. PKCS #12 키 저장소를 사용하고 대신 IBM MQ 비밀번호 보호 시스템을 사용하여 키 저장소 비밀번호를 보호하십시오.다음 단계를 완료하십시오.
![[2024년 6월MQ 9.4.0 ]](ng940.gif)
IBM MQ PKCS #12 키 저장소를 만듭니다:runmqakm -keydb -create -db mqtt.p12 -pw "passw0rd" -type p12![[2024년 6월MQ 9.4.0 ]](ng940.gif)
개인 인증서를 만듭니다:
다음 명령을 사용하여 인증서 작성을 확인할 수 있습니다.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 ibmwebspheremqmqmrunmqakm -cert -list -v -db mqtt.p12 -pw "passw0rd"![[2024년 6월MQ 9.4.0 ]](ng940.gif)
Runmqsc 프롬프트에 다음 명령을 입력하여 MQTT 채널을 만듭니다:
참고로 이 채널은 Java 암호 매핑을 사용합니다. JMS용 MQ 클래스의 TLS CipherSpecs 및 CipherSuites 참조하세요.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)- 인증서를 추출하십시오.
runmqakm -cert -extract -db mqtt.p12 -pw "passw0rd" -label ibmwebspheremqmqm -target serverCert.pem
Docker 컨테이너의 CentOS 에 모기 설치
다음 단계를 완료하여 Docker 모기가 달리는 컨테이너 CentOS:
docker pull centosdocker run -it centos /bin/bashdnf -y install epel-releasednf -y install mosquitto
서명자 인증서를 모기로 이동
IBM MQ 에서 작성한 인증서를 모기로 이동하려면 다음 단계를 완료하십시오. 이러한 단계는 Docker 호스트 머신에서 실행됩니다.
- Docker에서 컨테이너 ID를 보십시오.
docker container ls - Docker 컨테이너에서 로컬 시스템 Docker로 파일 복사
cp MQ_Container_ID:/var/mqm/mqtt/serverCert.pem serverCert.pem - 로컬 시스템에서 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 에 추가하십시오.
다음 명령을 입력하여 모기에 키/인증서 쌍을 작성하십시오.
- openSSL 를 사용하여 모기에 대한 키/인증서 쌍을 작성하십시오.
openssl req -x509 -newkey rsa:4096 -keyout mosquittoKey.pem -out mosquittoCert.pem -subj "/CN=Mosquitto" - 컨테이너의 컨테이너 ID를 나열하십시오.
docker container ls - 다음과 같이 모기를 인증서에 로컬 시스템 Docker에 복사하십시오.
docker cp CentOS_ContainerID:mosquittoCert.pem . - 다음과 같이 모기를 IBM MQ에 인증서로 복사하십시오.
docker cp mosquittoCert.pem MQ_Container_ID:/var/mqm/mqtt - IBM MQ 키 저장소에 인증서를 추가하십시오.
runmqakm -cert -add -db mqtt.p12 -pw "passw0rd" -file mosquittoCert.pem - MQTT 채널을 재시작하십시오.
모기를 사용하여 공개 및 상호 인증
상호 인증을 사용하여 모기와 함께 공개하려면 다음 단계를 완료하십시오.
- 다음 명령은 테스트 메시지를 공개해야 합니다.
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 - 다음 명령은 모기로부터 개인 인증서를 보내지 않으므로 테스트 메시지를 공개하고 오류 메시지를 생성하는 데 실패해야 합니다.
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