기본 콘텐츠로 건너뛰기

Node.js에 교육부 SSL 인증서 적용하기

 개인정보보호법의 안전성 확보 조치에 따라 국.공립 사립대학은 웹서비스에 SSL 인증서 도입이 의무화되어 있다. 우리학교에서도 이에 따라 행정전자서명인증센터로부터 발급받은 SSL 인증서를 웹서버에 적용하고 있는데, 최근 Node.js 기반으로 개발된 웹서비스에 적용이 필요해졌다. 일명 G-SSL이라고도 하는 행정안전부 보안서버인증서(GPKI)는 싱글 도메인, 와일드카드(*) 도메인, 멀티 도메인을 지원하며 Apache HTTPd용과 IIS용, Tomcat용 포맷을 별도로 지원하고 있다.

 여담으로 G-SSL 인증서는 최신 웹브라우저와 모바일용 브라우저를 지원하지 못하는 등 문제가 많아서 행정망 업무시스템으로 발급을 제한하였다. 2019년 6뤌 이후부터 대학은 발급대상에서 제외되었으며 기존 발급된 인증서의 유효기간 만료일까지만 사용이 가능하도록 해서 민간 SSL 인증서로 전환을 강제하고 있다.

 G-SSL 인증서는 2015년에 웹트러스트 국제인증을 획득하여, 최상위(Root) CA 역할을 하는 행정안전부 보안서버인증(GPKI)과 하위(sub) CA 기관인 교육부 보안서버인증(EPKI)을 통해 대학기관의 인증을 처리하는 구조이다. 그렇기 때문에 G-SSL 인증서의 경우 인증서 소유자(대학)로부터 트러스트의 체인이 시작되는 Root CA까지 인증 경로라고도 하는 인증서 체인을 위해 Root CA 행정안전부(GPKI) 인증서 및 교육부 CA (EPKI) 인증서를 모두 등록해야 한다.

 위의 2가지 인증서는 대학의 경우 교육부 행정전자서명인증센터 자료실을 통해 내려받으면 된다.

 Node.js는 http 대신 https 클래스를 이용하며, 실제 서비스에서는 비동기 구현이 필요하겠으나, 인증서 체인의 동작만 확인할 목적이므로 간단히 동기방식으로 코드를 작성했다.

댓글

이 블로그의 인기 게시물

아두이노 미세먼지 센서 PM2008

온습도계를 달아봤으니 이참에 미세먼지까지 한꺼번에 표시되도록 기능을 추가해보기로 했다. 마침 아두이노 전용 쉴드까지 제공하는 미세먼지 센서가 눈에 띄길래 일단 구매를 해봤다. 배송받은 센서는 거의 완제품에 가깝게 제작되었다. 다만 아쉬운 점은 아두이노 전용 쉴드의 마감이 좀 지분하다는 느낌을 받았는데, 후처리에 신경을 더 써주는 센스가 부족한 듯. PC2008 미세먼지 센서 아두이노 우노 전용 PM2008 쉴드  부착한 상태는 핀 위치도 잘 맞고 비교적 깔끔한 느낌이다. 쉴드 덕분에 지저분한 배선이 줄어들어 다른 센서들을 붙이기에도 좋을 것 같다. 쉴드와 일체형으로 제작하지 않은 건 라즈베리 파이와 같은 다른 마이크로칩 보드용의 쉴드 제작을 염두에 둔 듯하다. Arduino UNO에 장착한 모습 센서의 작동 테스트를 위해 PM2008 I2C 라이브러리를 추가하여 샘플코드를 실행시켜봤다. 성공적을 테스트를 완료. 이제 공부가 남았을 뿐. Arduino library PM2008 I2C 설치

모니터링 :: Grafana와 Prometheus 설치하기

Raspberry Pi 3 B+에서 Grafana와 Prometheus 설치하기 Grafana는 오픈소스 기반의 강력한 대시보드 플랫폼이다. 서버나 임베디드 장비의 운영상태 등을 Prometheus, ElasticSearch와 같은 data source를 플러그인 방식으로 연결해서 다양한 그래픽 요소로 나타낸다. 여기서는 대표적인 오픈소스 모니터링 솔루션인 Prometheus를 이용하여 요즘 메이커들 사이에 사물인터넷의 주요 디바이스로 자리매김하고 있는 라즈베리 파이의 운영상태를 모니터링 해보기로 하겠다. [그림.1] 라즈베리 파이 3 B+ [그림.2] 운영 중인 라즈베리 파이 3 B+ 라즈베리 파이는 영국의 라즈베리 파이 재단에서 학교와 개발도상국에서의 기초 컴퓨터 과학 교육 증진을 목표로 제작한 초소형 PC이다. 메인보드에 내장된 GPIO핀을 이용하여 다양한 센서모듈을 조합하여 메이커들에게는 사물인터넷의 핵심 기기로 각광받고 있다. 서버나 사물인터넷 허브와 같이 중단없이 장시간 운영되는 장비의 경우 안정적인 운영을 위해 실시간 서비스 모니터링이 필수적인데, Prometheus를 이용하면 다양한 정보를 수집하여 로그를 저장하고 이를 Grafana와 연동하여 세련된 그래픽 환경으로 운영이 가능하다. 게다가 오픈소스로 제공되기 때문에 설치와 운영 등 기술 비용(!)을 제외하면 소프트웨어 라이선스 비용은 무료이다. (제발, 소프트웨어 라이선스가 무료라고 모든게 공짜라는 생각은 버리자!) [그림.3] Prometheus Architecture Prometheus는 그림과 같이 Prometheus 서버가 외부의 export node들로부터 metric을 pulling 방식으로 수집하고, 이를 Grafaana 등을 이용해 시각화한다. 구조는 좀 복잡해 보이지만 이 글에서 구현해 볼 모니터링 툴을 간단히 설명하면, 1. node exporter - 모니터링할 기기의 메트릭(정보)을 제공 2. prometheus - 노드들로부...

NodeMCU에서 I2C 통신을 이용하여 OLED 디스플레이에 표시하기

준비물: NodeMCU 개발보드 1개, OLED SSD1306 디스플레이 1개, micro-USB 케이블 1개, 브레스보드 그림 1. 준비물 개발환경 아두이노 스케치 1.8.9 Wire 라이브러리 https://www.arduino.cc/en/reference/wire ESP8266 OLED SSD1306 라이브러리    https://github.com/ThingPulse/esp8266-oled-ssd1306 I2C란 I2C 버스는 80년대 초반에 저속의 부품들을 연결하기 위한 목적으로 필립스에서 개발한 직렬버스이다. "Inter IC"라고도 하며, IIC, I2C 버스라고도 한다. I2C 통신은 다음과 같은 특징들을 갖는다. SDA, SCL 등 2개의 통신선만 사용하므로 구성이 간단하다. 마스터-슬레이브 관계로 연결하여 1:n 연결이 가능하다. 슬레이브는 고유의 주소로 구분한다. 통신 최대속도는 100Kbit/s이며, Fast mode(400Kbit/s), High speed mode(3.4Mbit/s)도 지원한다. 실습내용 아두이노의 경우 디폴트로 SDA와 SCL을 위해 GPIO4 핀과 GPIO5 핀이 지정되어 있지만, ESP8266의 경우 소프트웨어적인 방식으로 구현되어 있기 때문에 임의의 핀을 이용할 수 있다. 여기서는 D1(GPIO5), D2(GPIO4)핀을 SCL과 SDA로 지정했다. ESP8266은 마스터로 동작하며 OLED 디스플레이는 슬레이브로 동작한다. Wire 라이브러리 ESP8266(마스터)에서 OLED 디스플레이(슬레이브)로의 데이터 전송은 먼저 버퍼를 준비하고, 버퍼에 데이터를 기록한 후 버퍼의 내용을 전달하는 3단계로 진행된다. 멤버 함수들을 사용하기 위해 우선 헤더 파일을 추가한다. #include <Wire.h> 초기화 void begin(int sda, int scl) sda: SDA(Serial data) 핀 번호 scl: SCL(Serial clock) 핀 번호 데이터...