最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

post quantum cryptography - Error when integrating Fiware with Mosquitto using PQC - Stack Overflow

programmeradmin1浏览0评论

I am conducting a Mosquitto integration test using post quantum quantum algorithms (PQC) and Fiware.

I have configured the Dockerfile to install all the necessary dependencies:

FROM fiware/iotagent-ul:latest

USER root

RUN apt update && apt install -y \
    build-essential \
    cmake \
    gcc \
    libtool \
    libssl-dev \
    make \
    ninja-build \
    git \
    doxygen && \
    apt clean

RUN apt update && apt install -y wget && \
    wget .22.0/cmake-3.22.0-linux-x86_64.tar.gz && \
    tar -xzvf cmake-3.22.0-linux-x86_64.tar.gz && \
    mv cmake-3.22.0-linux-x86_64 /opt/cmake && \
    ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake

ARG OPENSSL_TAG=openssl-3.3.2
ARG LIBOQS_TAG=0.11.0
ARG OQSPROVIDER_TAG=0.7.0
ARG INSTALLDIR=/opt/oqssa
ARG LIBOQS_BUILD_DEFINES="-DOQS_DIST_BUILD=ON"
ARG KEM_ALGLIST="kyber768:p384_kyber768"
ARG SIG_ALG="dilithium3"

WORKDIR /opt
RUN git clone --depth 1 --branch ${LIBOQS_TAG}  && \
    git clone --depth 1 --branch ${OPENSSL_TAG} .git && \
    git clone --depth 1 --branch ${OQSPROVIDER_TAG} .git

WORKDIR /opt/liboqs
RUN mkdir build && cd build && \
    cmake -G"Ninja" .. ${LIBOQS_BUILD_DEFINES} -DCMAKE_INSTALL_PREFIX=${INSTALLDIR} && \
    ninja install

WORKDIR /opt/openssl
RUN LDFLAGS="-Wl,-rpath -Wl,${INSTALLDIR}/lib" ./config shared --prefix=${INSTALLDIR} && \
    make -j $(nproc) && \
    make install_sw install_ssldirs && \
    if [ -d ${INSTALLDIR}/lib ]; then ln -s ${INSTALLDIR}/lib ${INSTALLDIR}/lib64; fi

ENV PATH="${INSTALLDIR}/bin:${PATH}"

WORKDIR /opt/oqs-provider
RUN ln -s ../openssl . && \
    cmake -DOPENSSL_ROOT_DIR=${INSTALLDIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${INSTALLDIR} -S . -B _build && \
    cmake --build _build && \
    cp _build/lib/oqsprovider.so ${INSTALLDIR}/lib64/ossl-modules && \
    sed -i "s/default = default_sect/default = default_sect\noqsprovider = oqsprovider_sect/g" ${INSTALLDIR}/ssl/opensslf && \
    sed -i "s/\[default_sect\]/\[default_sect\]\nactivate = 1\n\[oqsprovider_sect\]\nactivate = 1\n/g" ${INSTALLDIR}/ssl/opensslf && \
    sed -i "s/providers = provider_sect/providers = provider_sect\nssl_conf = ssl_sect\n\n\[ssl_sect\]\nsystem_default = system_default_sect\n\n\[system_default_sect\]\nGroups = ${KEM_ALGLIST}\n/g" ${INSTALLDIR}/ssl/opensslf

ENV LD_LIBRARY_PATH=${INSTALLDIR}/lib64:$LD_LIBRARY_PATH
ENV PATH=${INSTALLDIR}/bin:$PATH

EXPOSE 4041
CMD ["node", "/opt/iotaul/bin/iotagent-ul"]

Despite this, I can't get it to connect correctly to the broker (even though openssl works correctly with PQC). Could it be that Fiware is not using openssl from the system? How could Fiware be configured to work with PQC?

I have run the following docker-compose:

version: '3'
services:
  mongo:
    image: mongo:4.4
    container_name: fiware-mongo
    networks:
      - mosquitto-test
    ports:
      - "27017:27017"

  orion:
    image: fiware/orion:latest
    container_name: fiware-orion
    depends_on:
      - mongo
    networks:
      - mosquitto-test
    ports:
      - "1026:1026"
    command: -dbhost mongo -logLevel DEBUG

  iotagent-ul:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: fiware-iotagent
    depends_on:
      - orion
    networks:
      - mosquitto-test
    ports:
      - "4041:4041"
    environment:
      # Configuración del IoT Agent UL
      - IOTAGENT_UL=iotagent-ul
      - MOSQUITTO=oqs-mosquitto-broker
      # Context Broker
      - IOTA_CB_HOST=orion
      - IOTA_CB_PORT=1026
      # Parámetros para la conexión MQTT segura al broker PQC
      - IOTA_MQTT_HOST=oqs-mosquitto-broker
      - IOTA_MQTT_PORT=8883
      - IOTA_MQTT_USE_TLS=true
      - IOTA_MQTT_CA_CERT=/certs/ca.crt
      - IOTA_MQTT_CLIENT_CERT=/certs/client.crt
      - IOTA_MQTT_CLIENT_KEY=/certs/client.key
      - IOTA_MQTT_CIPHERS=OQS_AES128_GCM_SHA256:HIGH:!aNULL:!MD5
    volumes:
      - /home/kali/oqs-certs:/certs

networks:
  mosquitto-test:
    external: true

When I run it, it does not establish the connection to Mosquitto.

I am conducting a Mosquitto integration test using post quantum quantum algorithms (PQC) and Fiware.

I have configured the Dockerfile to install all the necessary dependencies:

FROM fiware/iotagent-ul:latest

USER root

RUN apt update && apt install -y \
    build-essential \
    cmake \
    gcc \
    libtool \
    libssl-dev \
    make \
    ninja-build \
    git \
    doxygen && \
    apt clean

RUN apt update && apt install -y wget && \
    wget https://github.com/Kitware/CMake/releases/download/v3.22.0/cmake-3.22.0-linux-x86_64.tar.gz && \
    tar -xzvf cmake-3.22.0-linux-x86_64.tar.gz && \
    mv cmake-3.22.0-linux-x86_64 /opt/cmake && \
    ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake

ARG OPENSSL_TAG=openssl-3.3.2
ARG LIBOQS_TAG=0.11.0
ARG OQSPROVIDER_TAG=0.7.0
ARG INSTALLDIR=/opt/oqssa
ARG LIBOQS_BUILD_DEFINES="-DOQS_DIST_BUILD=ON"
ARG KEM_ALGLIST="kyber768:p384_kyber768"
ARG SIG_ALG="dilithium3"

WORKDIR /opt
RUN git clone --depth 1 --branch ${LIBOQS_TAG} https://github.com/open-quantum-safe/liboqs && \
    git clone --depth 1 --branch ${OPENSSL_TAG} https://github.com/openssl/openssl.git && \
    git clone --depth 1 --branch ${OQSPROVIDER_TAG} https://github.com/open-quantum-safe/oqs-provider.git

WORKDIR /opt/liboqs
RUN mkdir build && cd build && \
    cmake -G"Ninja" .. ${LIBOQS_BUILD_DEFINES} -DCMAKE_INSTALL_PREFIX=${INSTALLDIR} && \
    ninja install

WORKDIR /opt/openssl
RUN LDFLAGS="-Wl,-rpath -Wl,${INSTALLDIR}/lib" ./config shared --prefix=${INSTALLDIR} && \
    make -j $(nproc) && \
    make install_sw install_ssldirs && \
    if [ -d ${INSTALLDIR}/lib ]; then ln -s ${INSTALLDIR}/lib ${INSTALLDIR}/lib64; fi

ENV PATH="${INSTALLDIR}/bin:${PATH}"

WORKDIR /opt/oqs-provider
RUN ln -s ../openssl . && \
    cmake -DOPENSSL_ROOT_DIR=${INSTALLDIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${INSTALLDIR} -S . -B _build && \
    cmake --build _build && \
    cp _build/lib/oqsprovider.so ${INSTALLDIR}/lib64/ossl-modules && \
    sed -i "s/default = default_sect/default = default_sect\noqsprovider = oqsprovider_sect/g" ${INSTALLDIR}/ssl/openssl.cnf && \
    sed -i "s/\[default_sect\]/\[default_sect\]\nactivate = 1\n\[oqsprovider_sect\]\nactivate = 1\n/g" ${INSTALLDIR}/ssl/openssl.cnf && \
    sed -i "s/providers = provider_sect/providers = provider_sect\nssl_conf = ssl_sect\n\n\[ssl_sect\]\nsystem_default = system_default_sect\n\n\[system_default_sect\]\nGroups = ${KEM_ALGLIST}\n/g" ${INSTALLDIR}/ssl/openssl.cnf

ENV LD_LIBRARY_PATH=${INSTALLDIR}/lib64:$LD_LIBRARY_PATH
ENV PATH=${INSTALLDIR}/bin:$PATH

EXPOSE 4041
CMD ["node", "/opt/iotaul/bin/iotagent-ul"]

Despite this, I can't get it to connect correctly to the broker (even though openssl works correctly with PQC). Could it be that Fiware is not using openssl from the system? How could Fiware be configured to work with PQC?

I have run the following docker-compose:

version: '3'
services:
  mongo:
    image: mongo:4.4
    container_name: fiware-mongo
    networks:
      - mosquitto-test
    ports:
      - "27017:27017"

  orion:
    image: fiware/orion:latest
    container_name: fiware-orion
    depends_on:
      - mongo
    networks:
      - mosquitto-test
    ports:
      - "1026:1026"
    command: -dbhost mongo -logLevel DEBUG

  iotagent-ul:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: fiware-iotagent
    depends_on:
      - orion
    networks:
      - mosquitto-test
    ports:
      - "4041:4041"
    environment:
      # Configuración del IoT Agent UL
      - IOTAGENT_UL=iotagent-ul
      - MOSQUITTO=oqs-mosquitto-broker
      # Context Broker
      - IOTA_CB_HOST=orion
      - IOTA_CB_PORT=1026
      # Parámetros para la conexión MQTT segura al broker PQC
      - IOTA_MQTT_HOST=oqs-mosquitto-broker
      - IOTA_MQTT_PORT=8883
      - IOTA_MQTT_USE_TLS=true
      - IOTA_MQTT_CA_CERT=/certs/ca.crt
      - IOTA_MQTT_CLIENT_CERT=/certs/client.crt
      - IOTA_MQTT_CLIENT_KEY=/certs/client.key
      - IOTA_MQTT_CIPHERS=OQS_AES128_GCM_SHA256:HIGH:!aNULL:!MD5
    volumes:
      - /home/kali/oqs-certs:/certs

networks:
  mosquitto-test:
    external: true

When I run it, it does not establish the connection to Mosquitto.

Share Improve this question asked Feb 5 at 16:42 PauPau 1
Add a comment  | 

1 Answer 1

Reset to default 0

I am sure you are aware of the existing FIWARE tutorial on connecting to MQTT.

Within that tutorial, the IoT Agent is looking for an MQTT broker called "mosquitto"

 iotagent-ul:
    environment:
      - IOTA_MQTT_HOST=mosquitto

And the MQTT broker container is hosted on the same network with the hostname "mosquitto"

mosquitto:
    image: eclipse-mosquitto
    hostname: mosquitto
    container_name: mosquitto
    networks:
        - default
    expose:
        - '1883'
        - '9001'
    ports:
        - '1883:1883'
        - '9001:9001'

You have the line MOSQUITTO=oqs-mosquitto-broker for an external MQTT broker this needs to be a publicly accessible MQTT broker such as broker.hivemq.com rather than just the hostname alias within the default network.

On start-up with the IOTA_LOG_LEVEL=DEBUG set, you should see a series of debug messages related to MQTT - just look for IOTAUL.MQTT.Binding

2025-02-12 11:22:05 time=2025-02-12T10:22:05.673Z | lvl=INFO | corr=280391b1-1627-46db-aca8-4514e33a428b | trans=280391b1-1627-46db-aca8-4514e33a428b | op=IOTAUL.MQTT.Binding | from=n/a | srv=n/a | subsrv=n/a | msg=Starting MQTT binding with options {"protocol":"mqtt","host":"mosquitto","port":"1883","key":null,"ca":null,"cert":null,"rejectUnauthorized":true,"username":null,"password":null,"clean":true,"clientId":"iotaul_0dc1b825","keepalive":60,"connectTimeout":3600000} retries 5 retryTIme 5 | comp=IoTAgent
2025-02-12 11:22:05 time=2025-02-12T10:22:05.673Z | lvl=INFO | corr=280391b1-1627-46db-aca8-4514e33a428b | trans=280391b1-1627-46db-aca8-4514e33a428b | op=IOTAUL.MQTT.Binding | from=n/a | srv=n/a | subsrv=n/a | msg=creating connection | comp=IoTAgent
2025-02-12 11:22:05 time=2025-02-12T10:22:05.698Z | lvl=INFO | corr=280391b1-1627-46db-aca8-4514e33a428b | trans=280391b1-1627-46db-aca8-4514e33a428b | op=IOTAUL.MQTT.Binding | from=n/a | srv=n/a | subsrv=n/a | msg=connected | comp=IoTAgent
2025-02-12 11:22:05 time=2025-02-12T10:22:05.711Z | lvl=INFO | corr=280391b1-1627-46db-aca8-4514e33a428b | trans=280391b1-1627-46db-aca8-4514e33a428b | op=IOTAUL.MQTT.Binding | from=n/a | srv=n/a | subsrv=n/a | msg=MQTT Client connected | comp=IoTAgent
2025-02-12 11:22:05 time=2025-02-12T10:22:05.711Z | lvl=DEBUG | corr=280391b1-1627-46db-aca8-4514e33a428b | trans=280391b1-1627-46db-aca8-4514e33a428b | op=IOTAUL.MQTT.Binding | from=n/a | srv=n/a | subsrv=n/a | msg=Recreating global subscriptions for all devices | comp=IoTAgent
2025-02-12 11:22:05 time=2025-02-12T10:22:05.711Z | lvl=DEBUG | corr=280391b1-1627-46db-aca8-4514e33a428b | trans=280391b1-1627-46db-aca8-4514e33a428b | op=IOTAUL.MQTT.Binding | from=n/a | srv=n/a | subsrv=n/a | msg=Generating topics | comp=IoTAgent
2025-02-12 11:22:05 time=2025-02-12T10:22:05.711Z | lvl=DEBUG | corr=280391b1-1627-46db-aca8-4514e33a428b | trans=280391b1-1627-46db-aca8-4514e33a428b | op=IoTAgentNGSI.ContextServer | from=n/a | srv=n/a | subsrv=n/a | msg=Subscribing to topics: ["$share/ul//+/+/attrs/+","$share/ul//ul/+/+/attrs/+","$share/ul//+/+/attrs","$share/ul//ul/+/+/attrs","$share/ul//+/+/configuration/commands","$share/ul//ul/+/+/configuration/commands","$share/ul//+/+/cmdexe","$share/ul//ul/+/+/cmdexe","$share/ul/+/+/attrs/+","$share/ul/ul/+/+/attrs/+","$share/ul/+/+/attrs","$share/ul/ul/+/+/attrs","$share/ul/+/+/configuration/commands","$share/ul/ul/+/+/configuration/commands","$share/ul/+/+/cmdexe","$share/ul/ul/+/+/cmdexe"] | comp=IoTAgent
2025-02-12 11:22:05 time=2025-02-12T10:22:05.716Z | lvl=INFO | corr=280391b1-1627-46db-aca8-4514e33a428b | trans=280391b1-1627-46db-aca8-4514e33a428b | op=IoTAgentNGSI.ContextServer | from=n/a | srv=n/a | subsrv=n/a | msg=Successfully subscribed to the following topics: ["$share/ul//+/+/attrs/+","$share/ul//ul/+/+/attrs/+","$share/ul//+/+/attrs","$share/ul//ul/+/+/attrs","$share/ul//+/+/configuration/commands","$share/ul//ul/+/+/configuration/commands","$share/ul//+/+/cmdexe","$share/ul//ul/+/+/cmdexe","$share/ul/+/+/attrs/+","$share/ul/ul/+/+/attrs/+","$share/ul/+/+/attrs","$share/ul/ul/+/+/attrs","$share/ul/+/+/configuration/commands","$share/ul/ul/+/+/configuration/commands","$share/ul/+/+/cmdexe","$share/ul/ul/+/+/cmdexe"] | comp=IoTAgent

In your case you will find that the creating connection and connected messages will fail because the location of the MQTT broker has not been found.

发布评论

评论列表(0)

  1. 暂无评论