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.
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
-
Verifique a versão do curl.
-
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
.
-
Se você vir a opção --tlsv1.2
, continue.
-
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.
-
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).
-
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
.
-
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 #
.
-
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.