투케이2K

546. (javaScript) 자바스크립트 AWS Iot registerCertificateWithoutCA 사용해 클레임 인증서 등록 요청 수행 - 공통 클레임 인증서 사용 본문

JavaScript

546. (javaScript) 자바스크립트 AWS Iot registerCertificateWithoutCA 사용해 클레임 인증서 등록 요청 수행 - 공통 클레임 인증서 사용

투케이2K 2026. 6. 4. 19:34
728x90
반응형

[개발 환경 설정]

개발 툴 : Edit++ / Vscode

개발 언어 : JavaScript

 

[소스 코드]

 

-----------------------------------------------------------------------------------------
[사전 설명 및 설정 사항]
-----------------------------------------------------------------------------------------

- 개발 환경 : Web


- 개발 기술 : 자바스크립트 / AWS / IoT / registerCertificateWithoutCA


- 사전) 👉 Aws Iot Core 간단 설명 : 

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

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

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


- 사전) 👉 클레임 인증서 간단 설명 : 

  >> Aws 프로비저닝 수행에 필요한 클레임 인증서는 주로 IAM (Identity and Access Management) 과 관련된 인증을 수행하는 데 사용됩니다

  >> 클레임 인증서는 AWS 에서 인증과 권한 부여를 통해 자원에 대한 접근을 관리하는데 사용됩니다.

    - 클레임은 사용자가 AWS 리소스에 접근할 수 있는 권한을 나타내는 정보입니다.

    - 클레임 인증서는 사용자가 특정 역할을 수행할 수 있도록 허용하는 정보가 포함되어 있습니다.

  >> Aws Iot Core 프로비저닝 수행 인증서 파일 설명 : 

    - certificate.pem.crt: 디바이스 인증서

    - private.pem.key: 디바이스 개인 키

    - public.pem.key: 디바이스 공개 키

    - ca1.pem: AWS IoT Core에서 사용하는 CA 인증서

-----------------------------------------------------------------------------------------





-----------------------------------------------------------------------------------------
[소스 코드]
-----------------------------------------------------------------------------------------

<!DOCTYPE HTML>
<html lang="ko" translate="no">
<head>
    <title>javaScriptTest</title>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <!-- 반응형 구조 만들기 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">

    <!-- Chrome / Edge (Chromium)에서 자동 번역 기능을 완전히 비활성화 -->
    <meta name="google" content="notranslate">

    <!-- 내부 CSS 스타일 지정 -->
    <style>

      html, body {
        width: 100%;
        height: 100%;
        margin : 0 auto;
        padding : 0;
        border : none;
        background-color: #666;
      } 

    </style>





    <!-- [CDN 주소 설정] --> 
    <script src="https://code.jquery.com/jquery-latest.min.js"></script>

    <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>






    <!-- [자바스크립트 코드 지정] -->
    <script>


      // -----------------------------------------------------------------
      // 🟦 [전역 변수 선언]
      // -----------------------------------------------------------------      
      const accessKey = 'AK..A6';
      const secretKey = 'mP..5J';
      const region = 'ap-northeast-2';




      // -----------------------------------------------------------------
      // 🟦 [Window.onload : 웹 브라우저 로드 완료]
      // -----------------------------------------------------------------
      window.onload = async function() {
        console.log("[window onload] : [html 최초 로드 및 이벤트 상시 대기 실시] : [start]");
      };




      // -----------------------------------------------------------------
      // 🟦 [readAndRegister : 인증서 파일 읽기 및 인증서 등록 요청]
      // -----------------------------------------------------------------
      function readAndRegister(){
        console.log("[readAndRegister] : [인증서 파일 읽기 및 인증서 등록 요청] : [start]");

        try {

          
          // -----------------------------------------
          // [선택 된 파일이 있는지 확인]
          // -----------------------------------------
          const fileInput = document.getElementById("certFile");
          const file = fileInput.files[0];

          if (!file) {
            alert("파일을 선택하세요.");
            return;
          }

          console.log("📄 readAndRegister : 선택된 파일 : " + file.name);


          // -----------------------------------------
          // [선택 된 파일 내용 읽기]
          // -----------------------------------------
          const reader = new FileReader();

          reader.onload = function(event) {

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

            console.log("✅ readAndRegister : 인증서 파일 읽기 완료 : ", certPem);

            /*
            -----BEGIN CERTIFICATE-----
            MI....NA
            -----END CERTIFICATE-----
            */


            // -----------------------------------------
            // [AWS.config 지정]
            // -----------------------------------------
            //*
            AWS.config.update({
              region: region,
              accessKeyId: accessKey,
              secretAccessKey: secretKey
            });


            // -----------------------------------------
            // [AWS.Iot 객체 생성]
            // -----------------------------------------
            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);
                
              }
            });
            // */


          };

          
          // ✅ 반드시 TEXT 로 읽기
          reader.readAsText(file);

        }
        catch (exception) {
          console.error("[readAndRegister] : [Exception] : ❌ 예외 상황 발생 : ", exception);

        }

      };
      

    </script>


</head>


<body>

  
  <h2>📄 인증서 업로드</h2>

  <!-- ✅ 파일 선택 -->
  <input type="file" id="certFile" accept=".pem,.crt,.txt" />

  <br><br>

  <!-- ✅ 업로드 버튼 -->
  <button onclick="readAndRegister()">인증서 등록</button>

</body>

</html>

-----------------------------------------------------------------------------------------





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

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

https://kkh0977.tistory.com/7799

https://blog.naver.com/kkh0977/223784109192?trackingCode=blog_bloghome_searchlist


▶️ [Aws Iot Core] Aws Iot Core 프로비저닝에 사용 되는 클레임 인증서 종류 설명 및 생성 방법 정리

https://kkh0977.tistory.com/8100

https://blog.naver.com/kkh0977/223918338710?trackingCode=blog_bloghome_searchlist


▶️ [Aws] IoT 디바이스 기기 프로비저닝 수행에 필요한 개발, 운영 인증서 동적 교체 및 다운로드 로직 정리 - 클레임 인증서 다운로드

https://kkh0977.tistory.com/8837

https://blog.naver.com/kkh0977/224290535389?trackingCode=blog_bloghome_searchlist


▶️ [MQTT (Message Queueing Telemetry Transport) 통신 설명]

https://kkh0977.tistory.com/3631

https://blog.naver.com/kkh0977/222971771381?trackingCode=blog_bloghome_searchlist


▶️ [Aws Iot Core] Fleet provisioning 플릿 프로비저닝 수행 방법 정리 - 클레임 인증서 , 신뢰할 수 있는 사용자

https://kkh0977.tistory.com/7761

https://blog.naver.com/kkh0977/223779257161?trackingCode=blog_bloghome_searchlist

-----------------------------------------------------------------------------------------
 
728x90
반응형
Comments