HTTPS - AWS IoT Core

HTTPS

Os clientes podem publicar mensagens fazendo solicitações para a API REST usando os protocolos HTTP 1.0 ou 1.1. Para os mapeamentos de porta e autenticação usados por solicitações HTTP, consulte Protocolos, mapeamentos de porta e autenticação.

nota

O HTTPS é compatível com um valor de clientId como o MQTT. O clientId está disponível ao usar o MQTT, mas não está disponível ao usar HTTPS.

URL da mensagem HTTPS

Dispositivos e clientes publicam suas mensagens fazendo solicitações POST para um endpoint específico do cliente e um URL específico do tópico:

https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
  • IoT_data_endpoint é o endpoint de dados do dispositivo de AWS IoT. É possível encontrar o endpoint no console de AWS IoT na página de detalhes do objeto ou no cliente usando o comando AWS CLI:

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    O endpoint deve ser algo parecido com isto: a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com

  • url_encoded_topic_name é o nome de tópico completo da mensagem que está sendo enviada.

Exemplos de código de mensagem HTTPS

Estes são alguns exemplos de como enviar uma mensagem HTTPS à AWS IoT.

Python (port 8443)
import requests import argparse # define command-line parameters parser = argparse.ArgumentParser(description="Send messages through an HTTPS connection.") parser.add_argument('--endpoint', required=True, help="Your AWS IoT data custom endpoint, not including a port. " + "Ex: \"abcdEXAMPLExyz-ats.iot.us-east-1.amazonaws.com\"") parser.add_argument('--cert', required=True, help="File path to your client certificate, in PEM format.") parser.add_argument('--key', required=True, help="File path to your private key, in PEM format.") parser.add_argument('--topic', required=True, default="test/topic", help="Topic to publish messages to.") parser.add_argument('--message', default="Hello World!", help="Message to publish. " + "Specify empty string to publish nothing.") # parse and load command-line parameter values args = parser.parse_args() # create and format values for HTTPS request publish_url = 'https://' + args.endpoint + ':8443/topics/' + args.topic + '?qos=1' publish_msg = args.message.encode('utf-8') # make request publish = requests.request('POST', publish_url, data=publish_msg, cert=[args.cert, args.key]) # print results print("Response status: ", str(publish.status_code)) if publish.status_code == 200: print("Response body:", publish.text)
Python (port 443)
import requests import http.client import json import ssl ssl_context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT) ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2 # note the use of ALPN ssl_context.set_alpn_protocols(["x-amzn-http-ca"]) ssl_context.load_verify_locations(cafile="./<root_certificate>") # update the certificate and the AWS endpoint ssl_context.load_cert_chain("./<certificate_in_PEM_Format>", "<private_key_in_PEM_format>") connection = http.client.HTTPSConnection('<the ats IoT endpoint>', 443, context=ssl_context) message = {'data': 'Hello, I'm using TLS Client authentication!'} json_data = json.dumps(message) connection.request('POST', '/topics/device%2Fmessage?qos=1', json_data) # make request response = connection.getresponse() # print results print(response.read().decode())
CURL

Você pode usar o curl de um cliente ou dispositivo para enviar uma mensagem para a AWS IoT.

Como usar curl a fim de enviar uma mensagem de um dispositivo de cliente do AWS IoT
  1. Verifique a versão do curl.

    1. No cliente, execute esse comando em um prompt de comando.

      curl --help

      No texto de ajuda, procure as opções de TLS. Você deve ver a opção --tlsv1.2.

    2. Se você vir a opção --tlsv1.2, continue.

    3. Se você não vir a opção --tlsv1.2 ou receber um erro command not found, pode ser necessário atualizar ou instalar o curl no cliente ou instalar o openssl antes de continuar.

  2. Instale os certificados no cliente.

    Copie os arquivos de certificado que você criou ao registrar o cliente (objeto) no console do AWS IoT. Verifique se você tem esses três arquivos de certificado no cliente antes de continuar.

    • O arquivo do certificado CA (Amazon-root-CA-1.pem neste exemplo).

    • O arquivo de certificado do cliente (device.pem.crt neste exemplo).

    • O arquivo de chave privada do cliente (private.pem.key neste exemplo).

  3. Crie a linha de comando curl, substituindo os valores substituíveis pelos da sua conta e do sistema.

    curl --tlsv1.2 \ --cacert Amazon-root-CA-1.pem \ --cert device.pem.crt \ --key private.pem.key \ --request POST \ --data "{ \"message\": \"Hello, world\" }" \ "https://IoT_data_endpoint:8443/topics/topic?qos=1"
    --tlsv1.2

    Use TLS 1.2 (SSL).

    --cacert Amazon-root-CA-1.pem

    O nome e o caminho do arquivo, se necessário, do certificado CA para verificar o peer.

    --cert device.pem.crt

    O nome e o caminho do arquivo de certificado do cliente, se necessário.

    --key private.pem.key

    O nome e o caminho do arquivo de chave privada do cliente, se necessário.

    --solicitação POST

    O tipo de solicitação HTTP (nesse caso, POST).

    --data "{ \"message\": \"Hello, world\" }"

    Os dados de HTTP POST que você deseja publicar. Nesse caso, é uma string JSON, com as aspas internas escapadas com o caractere de barra invertida (\).

    "https://IoT_data_endpoint:8443/topics/topic?qos=1"

    O URL do endpoint dos dados do dispositivo de AWS IoT do cliente, seguido da porta HTTPS :8443, que é seguida pela palavra-chave /topics/ e o nome do tópico, topic, neste caso. Especifique a qualidade do serviço como o parâmetro de consulta, ?qos=1.

  4. Abra o cliente de teste MQTT no console do AWS IoT.

    Siga as instruções em Visualizar mensagens MQTT com o cliente MQTT do AWS IoT e configure o console para assinar mensagens com o nome do tópico usado em seu comando curl, ou use o filtro de tópico curinga de #.

  5. Teste o comando.

    Ao monitorar o tópico no cliente de teste do console do AWS IoT, acesse o cliente e emita a linha de comando curl criada na etapa 3. Você deve ver as mensagens do cliente no console.