Giới thiệu

  • Trong bài trước mình đã hướng dẫn cách cấu hình mosquitto – mqtt broker để sử dụng username và passwork để xác thực người dùng. Nghĩa là chỉ những tài khoản đã đăng ký mới có thể publish và subscribe đến broker.
  • Tuy nhiên việc sử dụng username và password như vậy có thể không thuận tiện trong trường hợp bạn làm việc với bên thứ 3 và bạn muốn đơn giản hóa việc sử dụng của khách hàng, không cần phải nhớ username và password, chỉ cần một public key đi kèm là đủ. Trong bài viết này mình sẽ hướng dẫn bạn cách cấu hình Mosquitto để sử dụng bảo mật TLS.
  • SSL là chữ viết tắt của Secure Sockets Layer (Lớp socket bảo mật). Một loại bảo mật giúp mã hóa liên lạc giữa website và trình duyệt. Công nghệ này đang lỗi thời và được thay thế hoàn toàn bởi TLS.
  • TLS là chữ viết tắt của Transport Layer Security, nó cũng giúp bảo mật thông tin truyền giống như SSL. Nhưng vì SSL không còn được phát triển nữa, nên TLS mới là thuật ngữ đúng nên dùng.
  • Các bước thực hiện sau đây sẽ tạo ra một kết nối được mã hóa giữa MQTT broker và MQTT client tương tự như kết nối giữa Webserver và web browser client.

Yêu cầu

  • Yêu cầu về MQTT client

    • Một chứng chỉ CA(Certification Authority) đã được ký và xác thực trên máy chủ chạy broker.
  • Yêu cầu về MQTT server

    • Một chứng chỉ CA(Certification Authority)  đã được xác thực trên máy chủ chạy MQTT Broker
    • Một chứng chỉ CA(Certification Authority) cho server
    • Một server key dùng cho việc giải mã hóa.
    • Để tạo và sử dụng các chứng chỉ ta sử dụng phần mềm free openssl, bạn chạy lệnh sau để cài openssl vào máy tính.
    • sudo apt-get install openssl

Cài đặt

  • Tạo ra cặp CA key
openssl genrsa -des3 -out ca.key 2048
  • Tạo chứng chỉ CA và dùng CA key ở bước trên để ký nó
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
  • Tạo cặp key cho broker , không sử dụng bảo vệ key bằng password
openssl genrsa -out server.key 2048
openssl rsa -in server.key -out server-nopass.key
  • Tạo chứng chỉ cho server dùng key ở bước 3
openssl req -new -out server.csr -key server.key
  • Dùng chứng chỉ CA để ký cho chứng chỉ của broker ở bước 4
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 360
  • Kiểm tra key có được tạo thành công hay không
openssl verify -CAfile ca.crt server.crt
  • Di chuyển các chứng chỉ đã tạo

Bây giờ bạn đã có các CA key, chứng chỉ CA, server key và chứng chỉ server, bây giờ ta tiến hành copy các file này vào các thư mục của mosquito cho dễ quản lý. thực ra bạn có thể để đâu tùy thích, và trong file cấu hình của mosquitto ta chỉ cần chỉ ra nó nằm ở đâu thôi. Tuy nhiên mình khuyến khích nên di chuyển để dễ quản lý.

sudo cp server.* *.key /etc/mosquitto/certs
sudo cp ca.* /etc/mosquitto/ca_certificates
  • Cấu hình cho mosquitto sử dụng những thiết lập này

Sửa lại nội dung của file/etc/mosquitto/conf.d/default.conf , sửa nội dung của file lại thành như sau.

port 8883
cafile /etc/mosquitto/ca_certificates/ca.crt
keyfile /etc/mosquitto/certs/server.key
certfile /etc/mosquitto/certs/server.crt
tls_version tlsv1
  • Chạy lại mosquitto và copy file ca.crt vào máy client.
sudo systemctl restart mosquitto
  • Chạy thử chương trình.  Bạn cần cài thêm vài thư viện và config vài thứ sau đây
sudo apt-get install python-pip
sudo pip install paho.mqtt
  • Chạy thử chương trình.

Bên dưới là code mẫu của phần publish và subscribe được viết bằng python.

Bạn cần đổi lại đường dẫn đến file ca.crt đang nằm trên máy bạn

publish code

subscribe code