使用 openssl 创建自签名证书(CA证书)以及客户端和服务器证书涉及以下步骤。以下是完整的教程和代码示例。
1. 创建自签名 CA 证书
-
生成 CA 私钥:
openssl genrsa -out ca.key 2048 -
**创建 CA 证书(有效期为10年)**:
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt- 按提示输入证书信息(如国家、组织名等)。这会生成
ca.crt文件。
- 按提示输入证书信息(如国家、组织名等)。这会生成
2. 创建服务器证书
-
生成服务器私钥:
openssl genrsa -out server.key 2048 -
**创建服务器证书签名请求(CSR)**:
openssl req -new -key server.key -out server.csr- 在
Common Name(CN) 部分填写服务器的域名(例如 ``)。
- 在
-
使用 CA 签署服务器证书:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 -sha256ca.srl文件会自动生成,包含 CA 的序列号。
3. 创建客户端证书
-
生成客户端私钥:
openssl genrsa -out client.key 2048 -
**创建客户端证书签名请求(CSR)**:
openssl req -new -key client.key -out client.csrCommon Name(CN) 部分可以填写设备 ID,例如client_12345。
-
使用 CA 签署客户端证书:
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650 -sha256
4. 验证证书
-
验证 CA 签署的服务器证书:
openssl verify -CAfile ca.crt server.crt -
验证 CA 签署的客户端证书:
openssl verify -CAfile ca.crt client.crt
如果一切正常,输出将类似于:
server.crt: OK
client.crt: OK
5. 使用生成的证书配置 MQTT
将生成的文件放置在合适的路径下,代码中的对应参数分别如下:
- CA 证书 (
ca.crt):用于验证服务器和客户端的身份。 - 服务器证书 (
server.crt) 和私钥 (server.key):用于配置 MQTT Broker。 - 客户端证书 (
client.crt) 和私钥 (client.key):用于配置 MQTT 客户端。
6. 示例:MQTT Broker 配置
以 Mosquitto 为例,编辑 mosquitto.conf:
listener 8883
cafile /path/to/ca.crt
certfile /path/to/server.crt
keyfile /path/to/server.key
require_certificate true
启动 Mosquitto:
mosquitto -c /path/to/mosquitto.conf
7. 示例:MQTT 客户端配置
在客户端代码中引用证书:
import ssl
import paho.mqtt.client as mqtt
client = mqtt.Client()
client.tls_set(
ca_certs="ca.crt",
certfile="client.crt",
keyfile="client.key",
tls_version=ssl.PROTOCOL_TLSv1_2
)
client.connect("", 8883)
client.loop_start()
client.publish("test/topic", "Hello, secure MQTT!")
总结
通过 openssl 生成的 CA、自签名服务器证书和客户端证书,您可以构建一个安全的 MQTT 传输环境,确保设备身份认证和数据加密安全。
















