尊敬的:
我正在尝试将简单链路 CC3220器件与 AWS IOT 连接。 我只读了几个介绍根 CA 证书、客户端证书和客户端私钥设置的线程。
我正在使用 泛美卫生组织 MQTT 库来实现连接、但我不是从哪里开始。 在这里、我进行了一些试错、但工作不好。
任何人都可以向我解释如何启动它。 ?
SlSockSecureFiles_t cert;
cert.SecureFiles[0] = 1;
cert.SecureFiles[1] = 1;
cert.SecureFiles[2] = 1;
rc = TLSConnectNetwork(&gAppState.network, "end-point",
8883, &cert, SL_SO_SEC_METHOD_TLSV1_2, SL_SEC_MASK_TLS_RSA_WITH_AES_256_CBC_SHA, false);
int TLSConnectNetwork(Network *n, char *addr, int port,
SlSockSecureFiles_t *certificate,
unsigned char sec_method, unsigned int cipher,
char server_verify)
{
SlSockAddrIn_t sAddr;
int addrSize;
int retVal;
unsigned long ipAddress;
retVal = sl_NetAppDnsGetHostByName((_i8*) addr, strlen(addr), &ipAddress,
AF_INET);
if (retVal < 0)
{
return -1;
}
sAddr.sin_family = AF_INET;
sAddr.sin_port = sl_Htons((unsigned short) port);
sAddr.sin_addr.s_addr = sl_Htonl(ipAddress);
addrSize = sizeof(SlSockAddrIn_t);
n->my_socket = sl_Socket(SL_AF_INET, SL_SOCK_STREAM, SL_SEC_SOCKET);
if (n->my_socket < 0)
{
return -1;
}
SlSockSecureMethod_t method;
method.SecureMethod = sec_method;
retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET, SL_SO_SECMETHOD,
&method, sizeof(method));
if (retVal < 0)
{
ASSERT_ON_ERROR(retVal, "sl_SetSockOpt() failed");
return retVal;
}
SlSockSecureMask_t mask;
mask.SecureMask = cipher;
//_u8 mask= cipher;
retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET, SL_SO_SECURE_MASK,
&mask, sizeof(mask));
if (retVal < 0)
{
ASSERT_ON_ERROR(retVal, "sl_SetSockOpt() failed");
return retVal;
}
if (certificate != NULL)
{
if (certificate->SecureFiles[0] == 1)
{
retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET,
SL_SO_SECURE_FILES_CA_FILE_NAME,
"/cert/AmazonRootCA1.pem", strlen("/cert/AmazonRootCA1.pem"));
if (retVal < 0)
{
ASSERT_ON_ERROR(retVal, "sl_SetSockOpt() failed");
return retVal;
}
}
if (certificate->SecureFiles[1] == 1)
{
retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET,
SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME,
"/cert/certificate.pem.pem", strlen("/cert/certificate.pem"));
if (retVal < 0)
{
ASSERT_ON_ERROR(retVal, "sl_SetSockOpt() failed");
return retVal;
}
}
if (certificate->SecureFiles[2] == 1)
{
retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET,
SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME,
"/cert/msd-private.pem.pem", strlen("/cert/msd-private.pem"));
if (retVal < 0)
{
ASSERT_ON_ERROR(retVal, "sl_SetSockOpt() failed");
return retVal;
}
}
}
/*
retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET, SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME, (const void *)certificates[1], strlen((const char *)certificates));
if(retVal < 0){
return retVal;
}
*/
retVal = sl_Connect(n->my_socket, (SlSockAddr_t*) &sAddr, addrSize);
if (retVal < 0)
{
if (server_verify || retVal != -453)
{
sl_Close(n->my_socket);
return retVal;
}
}
return retVal;
}