HTTPS - AWS IoT Core

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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. Você pode encontrar o endpoint no AWS IoT console na página de detalhes da coisa ou no cliente usando o AWS CLI comando:

    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.

Para usar o curl para enviar uma mensagem de um dispositivo AWS IoT cliente
  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 quando registrou seu cliente (coisa) no AWS IoT console. 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"

    A URL do endpoint de dados do AWS IoT dispositivo do seu cliente, seguida pela porta HTTPS:8443, seguida pela palavra-chave /topics/ e pelo nome do tópicotopic, nesse caso. Especifique a qualidade do serviço como o parâmetro de consulta, ?qos=1.

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

    Siga as instruções em Exibir mensagens MQTT com o cliente AWS IoT MQTT 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.