Upgrade 하는 FW Image에 대한 인증과 무결성 검증은 다음과 같은 과정으로 진행 됩니다.
코드 암호화를 위한 Private Key와 무결성 검증을 위한 ECDSA Signature 인증서를 AWS에 등록 시켜 사용 합니다.
Certificate 생성에 OpenSSL을 사용합니다. 설치가 되어 있지 않다면 실습 0-6을 참고하여 설치 합니다.
실습용으로 다운로드한 Package의 x-cube-aws-sensordemo/scripts/ota-scripts 폴더를 참조 하십시오. Batch 파일을 이용해 cert_config.txt 파일만 변경하여 인증서 파일을 간단히 생성하여 사용할 수 있습니다.
다음의 내용을 포함하는 cert_config.txt 파일을 생성 합니다.
[ req ]
prompt = no
distinguished_name = my_dn
[ ota_dn ]
commonName = test_signer@amazon.com
[ ota_exts ]
keyUsage = digitalSignature
extendedKeyUsage = codeSigning
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
openssl req -new -x509 -config cert_config.txt -extensions ota_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
윈도우즈 하단 CMD창에 openssl을 입력하시면, OpenSSL command prompt를 찾아서 실행하실 수 있습니다.
prompt가 나타나면 먼저 실습용으로 다운로드 받으신 x-cube-aws-sensordemo의 scripts\ota-scripts 폴더로 이동합니다. 예를 들면) cd C:\dev\x-cube-aws-sensordemo\scripts\ota-scripts
1_0_create_ecdsa_key.bat
배치 파일을 실행합니다 : ecdsasigner.key1_0_create_ecdsa_key.bat
2_0_create_ecdsa_create_cert.bat
배치 파일을 실행합니다 : ecdsasigner.crt2_0_create_ecdsa_create_cert.bat
본 실습에서는 OTA Job을 생성하면서 콘솔을 통해 Upload 합니다. 다음의 AWS CLI 명령 실행은 진행하지 않습니다.
AWS CLI를 사용하는 방법은 다음과 같습니다. AWS CLI 작업 시 참고 하시면 됩니다.
aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
{
"CertificateArn": "arn:aws:acm:ap-northeast-2:189427507247:certificate/972ef760-0ec9-488f-bfad-8048f67e1268"
}
/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */
//#define CONFIG_ST_CUSTOM_DEMO_ENABLED
/* USER CODE END EM */
static const char pcClientCertificatePem[] =
"-----BEGIN CERTIFICATE-----\n"
"MIICNjCCAbygAwIBAgIUEFCiZSz0U0NfD/kvxi8plpqaIzgwCgYIKoZIzj0EAwIw\n"
"UjELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UECgwT\n"
"RGVmYXVsdCBDb21wYW55IEx0ZDEOMAwGA1UEAwwFU1RNMzIwHhcNMTkwODAxMTM0\n"
"MzAzWhcNMjIwNDI3MTM0MzAzWjBSMQswCQYDVQQGEwJYWDEVMBMGA1UEBwwMRGVm\n"
"YXVsdCBDaXR5MRwwGgYDVQQKDBNEZWZhdWx0IENvbXBhbnkgTHRkMQ4wDAYDVQQD\n"
"DAVTVE0zMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ2bLnKMrhIv8dYwT5C37580\n"
"xdvsqmVVZKTlRZUatELS2Njq/X+ekalP4W87BDRoQAxHIeHbJwpjTZO0yHz0FasT\n"
"nOV4gQigVB4PG8DZU9SfoJ1m4Ri8Y+rdtbnGGVAd2KNTMFEwHQYDVR0OBBYEFNpZ\n"
"KYz6S/zzKlyu3KWN07uInExyMB8GA1UdIwQYMBaAFNpZKYz6S/zzKlyu3KWN07uI\n"
"nExyMA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDaAAwZQIxAMCm5HMx1REz\n"
"oxYV0/jDB2VGrBaQ5dSj4rHeA+wpGgRZI8TSqDB+NWXimVXrJG5gQgIwZ9Ek8+YV\n"
"kpFNZ102HE1pOqbI4UcVAiQejK5n2TSuxGbxrl29FYjrSGKrWa2Jt2Ws\n"
"-----END CERTIFICATE-----\n";
6 3679 [iot_thread] [INFO ][DEMO][3679] ---------STARTING DEMO---------
7 3686 [iot_thread] [INFO ][INIT][3686] SDK successfully initialized.
..8 7400 [iot_thread] [INFO ][DEMO][7400] Successfully initialized the demo. Network type for the demo: 1
9 7409 [iot_thread] [INFO ][MQTT][7409] MQTT library successfully initialized.
10 7416 [iot_thread] OTA demo version 0.9.2
11 7420 [iot_thread] Creating MQTT Client...
..12 11979 [iot_thread] Connecting to broker...
13 11983 [iot_thread] [INFO ][MQTT][11983] Establishing new MQTT connection.
#define APP_VERSION_MAJOR 1
#define APP_VERSION_MINOR 2
#define APP_VERSION_BUILD 1
그리고, 우측 상단에 TeamRole/MasterKey @ 12자리 숫자 형식으로 된 버튼을 클릭하여, 내 계정의 12자리 고유 번호를 복사합니다.
Bucket 이름을 afr-ota-[내 계정의 12자리 고유 숫자] 형식으로 입력하고 Region은 Seoul을 선택 한 후 Next 버튼을 클릭합니다. 예를 들면 afr-ota-355516781203 와 같이 버킷의 이름을 사용하실 수 있습니다.