투케이2K

197. (TWOK/LOGIC) [Aws] AWS IoT Core 프로비저닝 클레임 인증서 개발, 운영 환경 동일 인증서 등록 요청 로직 - register certificate 본문

투케이2K 로직정리

197. (TWOK/LOGIC) [Aws] AWS IoT Core 프로비저닝 클레임 인증서 개발, 운영 환경 동일 인증서 등록 요청 로직 - register certificate

투케이2K 2026. 6. 7. 09:46
728x90
반응형

[로직 정리]

정리 로직 : AWS / IoT / 프로비저닝

제 목 : [Aws] AWS IoT Core 프로비저닝 클레임 인증서 개발, 운영 환경 동일 인증서 등록 요청 로직 - register certificate

 

[설 명]

 

// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------

1. 제 목 : [Aws] AWS IoT Core 프로비저닝 클레임 인증서 개발, 운영 환경 동일 인증서 등록 요청 로직 - register certificate


2. 테스트 환경 : Aws / IoT / 프로비저닝 / 클레임 인증서


3. 사전) 👉 AWS IoT Core 간단 설명 : 

  >> AWS IoT 는 IoT 디바이스를 다른 디바이스 및 AWS 클라우드 서비스에 연결하는 클라우드 서비스를 제공합니다.

  >> 디바이스가에 연결할 수 있는 경우 AWS IoT는 AWS 가 제공하는 클라우드 서비스에 디바이스를 AWS IoT 연결할 수 있습니다.

  >> AWS IoT Core 메시지 브로커는 MQTT 및 MQTT over WSS 프로토콜을 사용하여 메시지를 게시하고 구독하는 디바이스 및 클라이언트를 지원합니다. 
  
    - HTTPS 프로토콜을 사용하여 메시지를 게시하는 디바이스와 클라이언트도 지원합니다.


4. 사전) 👉 X.509 간단 설명 : 

  >> X.509 는 공개키 기반 구조 (PKI, Public Key Infrastructure) 에서 사용되는 디지털 인증서의 표준 규격입니다.

  >> X.509 는 인터넷에서 사용하는 SSL/TLS 인증서, AWS IoT 인증서, 전자서명 인증서 등이 어떤 형식으로 구성되어야 하는지 정의한 국제 표준입니다.

  >> X.509 인증서는 다음 정보를 담고 있습니다.

    - "이 공개키는 누구의 것인가?"
    - "누가 이 공개키를 보증하는가?"
    - "언제까지 유효한가?"

  >> X.509 인증서 구조 : Base64로 인코딩된 ASN.1 데이터가 들어있습니다.

    -----BEGIN CERTIFICATE-----
    MIIDYzCCAkugAwIBAgI...
    ...
    ...
    -----END CERTIFICATE-----

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------

------------------------------------------------------
🟦 사전 정리) 로직 구현 관련 필요 내용 정리
------------------------------------------------------

1. 개발, 시연, 운영 각 클레임 인증서 환경 별로 관리하던 펌웨어 BIN 파일을 통일 된 환경에서 공통으로 관리하기 위해 해당 로직 구현


2. AWS IoT Core 연결에 사용 되는 엔드포인트 정보는 App To Device TCP/IP 소켓 통신으로 동적으로 넘겨 주고 있는 상태


3. 각 DEV , STG , PRD 형식으로 구분되어 있던 템플릿 명칭도 COMMON 으로 통일 형식 지정


4. PRD 운영 클레임 인증서 기준으로 DEV , STG 환경 동일한 클레임 인증서를 사용하기 위해 등록 요청 및 인증서 유효성 체크 로직



------------------------------------------------------
🟦 로직 정리) 자바스크립트에서 클레임 인증서 유효성 검증 및 등록 요청 로직 정리
------------------------------------------------------
👉 웹 브라우저 라이브러리 CDN 설정 코드

<!-- node-forge 라이브러리 : X.509 인증서 유효성 검증 -->
<script src="https://cdn.jsdelivr.net/npm/node-forge@1.3.1/dist/forge.min.js"></script>

<!-- [aws-sdk 라이브러리 : AWS IoT Core 인증서 등록 요청] --> 
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1416.0.min.js"></script>
<script src="https://unpkg.com/aws-iot-device-sdk/browser/aws-iot-sdk-browser-bundle.js"></script>
------------------------------------------------------

1. 자바스크립트에서 input file 태그를 사용해 특정 클레임 인증서 선택 실시 

  <input type="file" id="certFile" accept=".pem,.crt,.txt" />


2. 자바스크립트에서 선택 된 인증서 파일 text 형식으로 읽어 현재 날짜 기준으로 인증서 유효 기간 확인 수행

  const cert = forge.pki.certificateFromPem(certPem);

  const now = new Date();

  const notBefore = cert.validity.notBefore;
  const notAfter = cert.validity.notAfter;

  console.log("checkCertPinger : 인증서 파일 유효 기간 확인 : ", notBefore + " / " + notAfter);

  let status = "유효";

  if (now < notBefore) {
    console.warn('checkCertPinger : 인증서 : 아직 유효기간 시작 전');
  }
  else if (now > notAfter) {
    console.error('checkCertPinger : 인증서 : 만료');
  }
  else {
    console.log('checkCertPinger : 인증서 : 유효 : ', JSON.stringify(cert));
  }


3. 인증서 파일 만료 기간이 유효한 경우 인증서 식별 정보 확인 수행 (👉 운영 인증서 기준으로 통일화를 수행하므로 운영 인증서 식별 정보와 같은 지 체크 수행)

  const md = forge.md.sha256.create();

  md.update(
    forge.asn1.toDer(
        forge.pki.certificateToAsn1(cert)
    ).getBytes()
  );

  var returnData = md.digest().toHex()
    .match(/.{1,2}/g)
    .join(":")
    .toUpperCase();


4. 식별 된 인증서 정보가 운영 인증서가 맞는 경우 registerCertificateWithoutCA API 호출을 통해 각 환경에 인증서 등록 요청 수행

  👉 인증서 등록 요청을 하기 위해 각 환경 별 사전 IAM AccessKey , SecretKey 정보가 필요합니다

  AWS.config.update({
    region: region,
    accessKeyId: accessKey,
    secretAccessKey: secretKey
  });

  const iot = new AWS.Iot();


  // ✅ 인증서 PEM 문자열 (파일 내용을 그대로 넣어야 함)
  const certificatePem = certPem;

  const params = {
    certificatePem: certificatePem,
    status: "ACTIVE"
  };

    
  iot.registerCertificateWithoutCA(params, function(err, data) {
    if (err) {
      console.error("❌ 인증서 등록 실패 : ", err);
    } else {
      console.log("✅ 인증서 등록 성공 : ", data);

      // [출력 되는 로그 예시]
      // {certificateArn: 'arn:aws:iot:ap-northeast-2:123456789012:cert/8e..6d', certificateId: '8e..6d'}

      // 인증서 PEM 내용 자체에 고유 식별 정보가 들어 있고, AWS IoT는 그 내용을 기반으로 certificateId를 결정합니다.
      //console.log("certificateArn:", data.certificateArn);
      //console.log("certificateId:", data.certificateId);
      
    }
  });


5. AWS IoT Core 인증서 등록 요청이 완료 된 경우 AWS 콘솔 대시보드에서 인증서 식별 정보 검색 및 정상 업로드 완료 상태 확인 수행


6. AWS 콘솔 대시보드에서 업로드 된 인증서 선택 후 필요한 정책 Policy 매핑 수행

  👉 정상적으로 정책까지 모두 매핑이 되어야만, 프로비저닝을 수행할 수 있습니다.



------------------------------------------------------
🟦 참고 사항) 
------------------------------------------------------

1. X.509 인증서 파일을 TEXT 로 읽을 때 BOM 제거 , 줄바꿈 통일 이 중요합니다. (인증서 형식 text 가 아닌 경우 Exception 에러가 발생)

  let certPem = event.target.result;
            
  // ✅ 중요: PEM 정리
  certPem = certPem
    .replace(/^\uFEFF/, "")   // BOM 제거
    .replace(/\r\n/g, "\n")   // 줄바꿈 통일
    .trim();

  console.log("✅ checkCertPeriod : 인증서 파일 읽기 완료 : " + "\n\n" + certPem);

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

▶️ [개선 요청] AWS IoT Core 프로비저닝 클레임 인증서 개발, 운영 환경 동일 인증서 사용 요청 - register certificate

https://kkh0977.tistory.com/8885

https://blog.naver.com/kkh0977/224306052667


▶️ [자바스크립트 node-forge 라이브러리 사용해 X.509 인증서 식별 정보 확인 - getSha256Fingerprint]

https://kkh0977.tistory.com/8893

https://blog.naver.com/kkh0977/224307596780


▶️ [자바스크립트 node-forge 라이브러리 사용해 X.509 인증서 만료 기간 유효성 검증 수행]

https://kkh0977.tistory.com/8892

https://blog.naver.com/kkh0977/224307272979


▶️ [자바스크립트 AWS Iot registerCertificateWithoutCA 사용해 클레임 인증서 등록 요청 수행 - 공통 클레임 인증서 사용]

https://kkh0977.tistory.com/8886

https://blog.naver.com/kkh0977/224306059609


▶️ [Aws Iot Core] Aws 프로비저닝 수행에 필요한 클레임 인증서 (claim certificate) 설명 정리

https://kkh0977.tistory.com/7799

https://blog.naver.com/kkh0977/223784109192?trackingCode=blog_bloghome_searchlist
  
// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments