6 var forge requirenodeforge var fs requirefs var

  • Slides: 35
Download presentation

서버의 자체서명인증서 생성 6 var forge = require('node-forge'); var fs = require('fs'); var pki

서버의 자체서명인증서 생성 6 var forge = require('node-forge'); var fs = require('fs'); var pki = forge. pki; ca. Cert. js // 1. CA 인증서 생성 // generate a keypair and create an X. 509 v 3 certificate var ca. Keys = pki. rsa. generate. Key. Pair(2048); var ca. Cert = pki. create. Certificate(); // CA 개인키 파일 저장 console. log(pki. private. Key. To. Pem(ca. Keys. private. Key)); fs. write. File. Sync("ca. Private. Key. pem", pki. private. Key. To. Pem(ca. Keys. private. Key)); console. log('CA개인키 저장 - ca. Private. Key. pem n'); ca. Cert. public. Key = ca. Keys. public. Key; ca. Cert. serial. Number = '01'; ca. Cert. validity. not. Before = new Date(); ca. Cert. validity. not. After. set. Full. Year(ca. Cert. validity. not. Before. get. Full. Year() + 1); var ca. Attrs = [{ //name: 'common. Name', // CN short. Name: 'CN', value: 'Byoungcheon Lee' }, { //name: 'country. Name', // C short. Name: 'C', value: 'KR' }, { //name: 'state. Or. Province. Name', // ST short. Name: 'ST', value: 'Gyeonggi-do' }, { //name: 'locality. Name', // L short. Name: 'L', value: 'Goyang-si' }, { //name: 'organization. Name', // O short. Name: 'O', value: 'Joongbu Univ. ' }, { //name: 'organizational. Unit. Name', short. Name: 'OU', value: 'Dept. of Information Security' }]; ca. Cert. set. Subject(ca. Attrs); ca. Cert. set. Issuer(ca. Attrs); ca. Cert. set. Extensions([{ name: 'basic. Constraints', c. A: true }, { name: 'key. Usage', key. Cert. Sign: true, digital. Signature: true, non. Repudiation: true, key. Encipherment: true, data. Encipherment: true }, { name: 'ext. Key. Usage', server. Auth: true, client. Auth: true, code. Signing: true, email. Protection: true, time. Stamping: true }, { name: 'ns. Cert. Type', client: true, server: true, email: true, objsign: true, ssl. CA: true, email. CA: true, obj. CA: true }, { name: 'subject. Alt. Name', alt. Names: [{ type: 6, // URI value: 'http: //example. org/' }, { type: 7, // IP ip: '127. 0. 0. 1' }] }, { name: 'subject. Key. Identifier' }]); // self-sign certificate ca. Cert. sign(ca. Keys. private. Key); console. log('CA 자체서명인증서 생성'); console. log(pki. certificate. To. Pem(ca. Cert)); var verified = ca. Cert. verify(ca. Cert); console. log('CA인증서 생성 후 검증: '+verified); console. log(); // CA 인증서 저장 fs. write. File. Sync("ca. Cert. pem", pki. certificate. To. Pem(ca. Cert)); console. log('CA인증서 저장 - ca. Cert. pem'); 1. 프로젝트 루트폴더에 ca. Cert. js 생성 2. ca. Cert. js 실행 > node ca. Cert. js 3. 개인키와 인증서가 다음 파일로 저장됨 - 개인키: ca. Private. Key. pem - 인증서: ca. Cert. pem 위 두개의 파일이 프로젝트 루트폴더에 저장됨을 확인

서버측 App. js 수정 7 const https = require('https'); const fs = require('fs'); 중략

서버측 App. js 수정 7 const https = require('https'); const fs = require('fs'); 중략 /* http. create. Server(app). listen(port, function(){ console. log('Http server started on port '+port); }); */ https. create. Server({ key: fs. read. File. Sync('ca. Private. Key. pem'), cert: fs. read. File. Sync('ca. Cert. pem') }, app). listen(port, function(){ console. log('Https server started on port '+port); }); Http 서버 삭제 Https 서버 생성 - 개인키 파일 읽기 - 인증서 파일 읽기

클라이언트측 auth. service. ts 수정 8 보안웹서버 접속을 위해 Http를 https로 수정 prep. Endpoint(ep){

클라이언트측 auth. service. ts 수정 8 보안웹서버 접속을 위해 Http를 https로 수정 prep. Endpoint(ep){ //return 'https: //isweb. joongbu. ac. kr: 3000/'+ep; // Server return 'https: //localhost: 3000/'+ep; // local } 서비스 빌드 � > ng build

ng serve 상태에서의 접속 10 http: //localhost: 4200 으로 접속

ng serve 상태에서의 접속 10 http: //localhost: 4200 으로 접속

Cert 컴포넌트 생성 12 인증서 발급 페이지를 위한 cert 컴포넌트 생성 Components 폴더로 이동

Cert 컴포넌트 생성 12 인증서 발급 페이지를 위한 cert 컴포넌트 생성 Components 폴더로 이동 > cd angular-src/app/components > ng g component cert App. module. ts에 등록 확인 import { Cert. Component } from '. /components/cert. component'; 중략 const app. Routes: Routes = [ {path: 'cert', component: Cert. Component, can. Activate: [Auth. Guard]} 중략 @Ng. Module({ declarations: [ Cert. Component

서버측 routes/users. js 수정 20 cert. set. Extensions([{ name: 'basic. Constraints', c. A: true

서버측 routes/users. js 수정 20 cert. set. Extensions([{ name: 'basic. Constraints', c. A: true }, { name: 'key. Usage', key. Cert. Sign: true, digital. Signature: true, non. Repudiation: true, key. Encipherment: true, data. Encipherment: true }, { name: 'ext. Key. Usage', server. Auth: true, client. Auth: true, code. Signing: true, email. Protection: true, time. Stamping: true }, { name: 'ns. Cert. Type', client: true, server: true, email: true, objsign: true, ssl. CA: true, email. CA: true, obj. CA: true }, { name: 'subject. Alt. Name', alt. Names: [{ type: 6, // URI value: 'http: //example. org/' }, { type: 7, // IP 확장정보 ip: '127. 0. 0. 1' }] }, { name: 'subject. Key. Identifier' }]); 서버 개인키로 서명하여 인증서 생성 사용자 인증서, 서버인증서를 JSON 형식으로 리턴 설정

클라이언트에서 인증서 저장 21 cert. component. ts routes/users. js 인증서를 저장하고 dashboard로 리다이렉트 auth.

클라이언트에서 인증서 저장 21 cert. component. ts routes/users. js 인증서를 저장하고 dashboard로 리다이렉트 auth. service. ts

로그인 폼 작성 26 Login. component. html on. Login. Submit() 함수 실행 username, password

로그인 폼 작성 26 Login. component. html on. Login. Submit() 함수 실행 username, password 변수 이용 왼쪽 ID/Pass 로그인 오른쪽 전자서명 간편 로그인 on. Sig. Login. Submit() 함수 실행 username 1 변수 이용

로그인 논리 수정 27 Login. component. ts username 1 변수 추가 authenticate. Sig. User

로그인 논리 수정 27 Login. component. ts username 1 변수 추가 authenticate. Sig. User 함수 추가