Other Parts Discussed in Thread: CC3100, UNIFLASH
Hi All,
I am using cc3100 with sdk 1.2 and ti rtos and tm4c129encpdt microcontroller. I am trying to use ftps. For that, I first tried ftp with the simplelink socket api and it worked good. Now I am using FTPS and used the TLS from the simplelink api itself. The way I followed is-
1. I have the root CA certificate in .pem format and wrote it into the serial flash of the cc3100 using the file systems api -
#define SL_SSL_CA_CERT_FILE_NAME "/cert/testcacert.der" int32_t writeCert(uint8_t *data , uint32_t len) { int32_t fHdl, file; char filename[] = SL_SSL_CA_CERT_FILE_NAME; int32_t status; uint32_t offset, token; uint32_t writeLen; fHdl = sl_FsOpen(filename, FS_MODE_OPEN_CREATE(len, _FS_FILE_OPEN_FLAG_SECURE|_FS_FILE_OPEN_FLAG_COMMIT|_FS_FILE_PUBLIC_WRITE |_FS_FILE_PUBLIC_READ), &token, &file); if( fHdl >= 0 ) { offset = 0; do { if (len < CERT_WRITE_CHUNK_SIZE) { writeLen = len; } else { writeLen = CERT_WRITE_CHUNK_SIZE; } status = sl_FsWrite(file, offset, &(data[offset]), writeLen); offset += writeLen; } while (offset < len); sl_FsClose(file,0,0,0); return 0; } else { return -1; } }
This writes successfully as it return 0.
2. Now I use the slsocketopt -
SlSockSecureMethod method; unsigned long cipher = SL_SEC_MASK_SECURE_DEFAULT ; method.secureMethod = SL_SO_SEC_METHOD_TLSV1_2; // security method we want to use //int sock = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, IPPROTO_IP); int sock = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, SL_SEC_SOCKET); if (sock == -1) { logg("ftp: ***ERROR*** - socket not created.",""); sock = 0;goto sockCleanup; } else { if (ftp_debug) logStr("ftp: socket %s created successfully.","",ipAddress); } int ret = sl_SetSockOpt(sock, SL_SOL_SOCKET, SL_SO_SECMETHOD, (_u8 *)&method, sizeof(method)); ret = sl_SetSockOpt(sock, SL_SOL_SOCKET, SL_SO_SECURE_MASK, &cipher, sizeof(cipher)); ret= sl_SetSockOpt(sock, SL_SOL_SOCKET, SL_SO_SECURE_FILES_CA_FILE_NAME, selfCertFileName, (SlSocklen_t)strlen(selfCertFileName));
But when I try to call connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
It gives the -456 error which bad ca file.
I am using the self-signed root ca and generating the intermediate certificate to put into my local ftps server which is on Filezilla.
Why am I getting this error? I tried so many things. Help me out this.
My root CA is in .pem format. I copied the contents into the array and used the fs api to write into cc3100 serial flash. If I convert this .pem to .der format, the file looks likes this(opened in notepad++)-
0‚ð0‚Y ’X «0 *†H†÷ 010 UIN10U Karnataka10U Bengaluru10U Gluon10UEmbedded10U ftps.gluon1!0 *†H†÷ akhilesh@gluon.com0 191223093042Z 241221093042Z010 UIN10U Karnataka10U Bengaluru10U Gluon10UEmbedded10U ftps.gluon1!0 *†H†÷ akhilesh@gluon.com0Ÿ0 *†H†÷ 0‰ Ä3ê×bX¶h¥’šÆ"RXTÚX3ŽÝSÎ%ÿ8™Å@Ãji?¬Þ4”‰%}2V‡ ¥n:Ñ#¤_ «yQx‘›‘p±/¤¶m!_þÍ[ ‘hôúÌ0HQØÓéWêrü‚ˆéL²Å’-,õ È™~çÑgîbþ,P½±.Å –1v_ £P0N0U*f·éª ÔË…àQ•ßoþj0U#0€*f·éª ÔË…àQ•ßoþj0U0ÿ0 *†H†÷ ‹Ùm9(, á\âr$L¤º×—¡6¤’l*½ÌÉ=ÉdÏ4æÞÀélá3Xð„$·®oÙÒØÈXðp<šŠˆ)¾Ã„öµšÛ̲:‚ç £JÒíCzLO}k+]`C9ê«àÈ ¤»}3ÒA䩃¯$Øb§cv‘2€ñ
How to write .der format into serial flash using filesystem API?
Thanks
Akhilesh