• RABBITMQ的本地测试证书生成脚本


    由于小程序要求必须访问wss的接口,因此需要将测试环境也切换到https,看了下官方的文档

    RabbitMQ Web STOMP Plugin | RabbitMQ里面有这个信息

    然后敲打GPT一阵子,把要求输入几个来回,得到这样一个脚本:

    generate_cert.sh

    1. #!/bin/bash
    2. # 检查是否提供了IP地址
    3. if [ "$#" -ne 1 ]; then
    4. echo "Usage: $0 "
    5. exit 1
    6. fi
    7. IP_ADDRESS=$1
    8. PASSWORD="changeme"
    9. # 创建必要的目录
    10. mkdir -p certs
    11. # 生成 CA 密钥
    12. openssl genrsa -des3 -passout pass:$PASSWORD -out certs/ca.key 2048
    13. # 生成 CA 证书
    14. openssl req -x509 -new -nodes -key certs/ca.key -sha256 -days 1024 -passin pass:$PASSWORD -out certs/ca_certificate.pem -subj "/CN=${IP_ADDRESS}"
    15. # 生成服务器密钥
    16. openssl genrsa -des3 -passout pass:$PASSWORD -out certs/server.key 2048
    17. # 生成服务器证书签名请求(CSR)
    18. openssl req -new -key certs/server.key -passin pass:$PASSWORD -out certs/server.csr -subj "/CN=${IP_ADDRESS}"
    19. # 创建一个配置文件用于扩展
    20. cat <<EOF > certs/openssl.cnf
    21. [ v3_ca ]
    22. basicConstraints = CA:TRUE
    23. [ v3_req ]
    24. basicConstraints = CA:FALSE
    25. subjectAltName = @alt_names
    26. [ alt_names ]
    27. IP.1 = ${IP_ADDRESS}
    28. EOF
    29. # 使用 CA 证书签署服务器证书
    30. openssl x509 -req -in certs/server.csr -CA certs/ca_certificate.pem -CAkey certs/ca.key -CAcreateserial -out certs/server_certificate.pem -days 500 -sha256 -passin pass:$PASSWORD -extfile certs/openssl.cnf -extensions v3_req
    31. # 转换服务器密钥为 PEM 格式
    32. openssl rsa -in certs/server.key -out certs/server_key.pem -passin pass:$PASSWORD -passout pass:$PASSWORD
    33. # 打印完成信息
    34. echo "Certificates and keys generated successfully in the 'certs' directory."
    35. echo "CA Certificate: certs/ca_certificate.pem"
    36. echo "Server Certificate: certs/server_certificate.pem"
    37. echo "Server Key: certs/server_key.pem"

    在WSL的ubuntu里使用
    generate_cert.sh <测试IP> 来生成

    然后在RabbitMQ服务器的log/db同级目录下建立rabbitmq.conf

    第一个张图片内容贴进去,然后重启rabbitMQ服务,再看管理界面,https的端口15673成功起来了
     

    ---------------------------- [ 2024/08/27的分割线 ] ----------------------------

    这种方式生成的证书,在开发PC上连接内网IP是没问题。但是用手机浏览器走wss协议去连会出现一直连接不了的问题,究其原因,因为手机的安全限制,需要对证书进行可信验证才可以连接。除了一部一部手机导入证书的繁琐方法,也可以采用内网认证域名的方式一劳永逸,解决方案如下:

    1)随便买一个1元域名,例如ABC.COM只要能用的就行

    2)去域名控制台设置一个推送的二级域名,例如PUSH.ABC.COM

    3)去JOYSSL网站(ssl.inhitech.cn)申请一个PUSH.ABC.COM的免费证书,采用CNAME模式验证

    4)去内网路由器建立一个劫持域名(建议支持OPENWRT的路由,普通路由器没这个功能 ),指向内网rabbitmq服务器,例如192.168.1.99。建立完ping一下,看看是不是去到192.168.1.99了。

    5)把JOYSSL网站下载的证书压缩包打开,对应的是这几个文件名,我没有改文件名直接配置指向过去了,如下:

    1. web_stomp.ssl.cacertfile = C:\Users\Administrator\AppData\Roaming\RabbitMQ\certs\push.aibuy.site.ca-bundle
    2. web_stomp.ssl.certfile = C:\Users\Administrator\AppData\Roaming\RabbitMQ\certs\push.aibuy.site.pem
    3. web_stomp.ssl.keyfile = C:\Users\Administrator\AppData\Roaming\RabbitMQ\certs\push.aibuy.site.key
    4. web_stomp.ssl.password = XXXXXXXX

    password是证书压缩包里password.txt内的数据

    6)然后手机就可以用wss://PUSH.ABC.COM/ws去正常连接内网的rabbitmq 加密TLS服务了

  • 相关阅读:
    linux后台开发面试题
    Qt如何读取.txt文件(将内容读到文本编辑框)
    Leetcode560. 和为 K 的子数组
    Java JVM——12. 垃圾回收理论概述
    动态规划和递归法求解斐波那契数列
    docker命令总结
    C++指针
    “座驾改造” VoxEdit 创作大赛
    Git从入门到起飞(详细)
    DPDK&VPP关键技术文档总结
  • 原文地址:https://blog.csdn.net/applebomb/article/details/140350128