Node.js v12로 TLSv1.3 테스트 서버 쉽게 구축
오프닝
Node.js는 v12에서 TLSv1.3을 지원합니다.( 릴리즈 노트 )
클라이언트 응용 프로그램의 개발 테스트를 진행할 때 때때로 TLSv1.3의 서버가 필요하지만, 단순한 요청 응답만 확인하면 Node가 필요합니다.운영체제가 어떻든지 간에 js는 쉽게 준비할 수 있고 매우 편리하다.
이 글에는 Windows 및 Mac에서 Node가 나와 있습니다.js를 사용하여 TLSv1.3을 지원하는 HTTPS 서버를 구축하는 절차를 요약합니다.
환경
Windows
Windows
Mac
Node.설치 js
Windows
Node.웹 페이지 정보에서 최신 설치 프로그램을 다운로드합니다.
다운로드한 설치 프로그램을 시작하여 화면 설명에 따라 설치를 완료합니다.
Mac
버전 전환과 마운트 해제일를 편리하게 하기 위해 공식 패키지가 아닌 버전 관리 도구를 사용합니다.js를 설치합니다.
이번에는 nodebrew라는 도구를 사용합니다.
nodebrew의 자술 파일에 따라 터미널을 시작하고 설정합니다.
터미널은 응용 프로그램 폴더의 유틸리티 폴더에 있습니다.
단말# nodebrewのセットアップを行うコマンド
$ curl -L git.io/nodebrew | perl - setup
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile
$ nodebrew help
nodebrew 1.0.1
# 以下略
nodebrew 최신판 Node.js를 설치하고 사용하도록 지정합니다.
단말$ nodebrew install latest
$ nodebrew use latest
$ node -v
v12.2.0
OpenSSL 설치
Windows
OpenSSL Windows 바이너리 파일을 게시하는 웹 사이트 다운로드.
이번 사용ICS Download의OpenSSL Binaries Win-64 1.1.1b requires ICS V8.57 or later.
다운로드한 zip 파일은 압축을 풀려고 합니다.
OpenSSL 구성 파일 준비
사용된 바이너리 파일에 따라 OpenSSL 구성 파일을 따로 준비해야 합니다.
위의 ICS에서 바이너리 파일을 다운로드하려면 다음과 같이 구성 파일을 준비하십시오.
# nodebrewのセットアップを行うコマンド
$ curl -L git.io/nodebrew | perl - setup
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile
$ nodebrew help
nodebrew 1.0.1
# 以下略
$ nodebrew install latest
$ nodebrew use latest
$ node -v
v12.2.0
Windows
OpenSSL Windows 바이너리 파일을 게시하는 웹 사이트 다운로드.
이번 사용ICS Download의OpenSSL Binaries Win-64 1.1.1b requires ICS V8.57 or later.
다운로드한 zip 파일은 압축을 풀려고 합니다.
OpenSSL 구성 파일 준비
사용된 바이너리 파일에 따라 OpenSSL 구성 파일을 따로 준비해야 합니다.
위의 ICS에서 바이너리 파일을 다운로드하려면 다음과 같이 구성 파일을 준비하십시오.
Mac
OS에 미리 설치된 OpenSSL(LibresSL)을 사용하기 때문에 설치할 필요가 없습니다.
개인 키 및 서버 인증서 만들기
Windows
다운로드한 Windows 바이너리 폴더의 openssl입니다.exe를 시작하고 표시된 명령 프롬프트에서 다음 명령을 실행하여 개인 키와 서버 인증서를 만듭니다.
-subj 옵션의 CN=값은 서버의 IP 주소를 지정합니다.실제 테스트 환경에 따라 값을 다시 쓰십시오.
이번 설명에서는 127.0.1의 IP 주소로 서버 인증서를 작성합니다.
openssl.exe# 秘密鍵とサーバ証明書を作成するコマンド
OpenSSL> req -subj '/C=JP/ST=TestState/O=TestCompany/CN=127.0.0.1' \
-x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout server-key.pem \
-out server-cert.pem
명령을 실행하면 openssl.exe가 있는 폴더에 개인 키 (서버-key.pem) 와 서버 인증서 (서버-cert.pem) 파일을 만들었는지 확인하십시오.
Mac
터미널에서 다음 명령을 실행하여 개인 키 및 서버 인증서를 만듭니다.
-subj 옵션의 CN=값은 서버의 IP 주소를 지정합니다.실제 테스트 환경에 따라 값을 다시 쓰십시오.
이번 설명에서는 127.0.1의 IP 주소로 서버 인증서를 작성합니다.
단말$ openssl req -subj '/C=JP/ST=TestState/O=TestCompany/CN=127.0.0.1' \
-x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout ~/server-key.pem \
-out ~/server-cert.pem
명령을 실행한 후, 메인 폴더에 개인 키 (서버-key.pem) 와 서버 인증서 (서버-cert.pem) 파일을 만들었는지 확인하십시오.
서버 프로그램 만들기
Windows
# 秘密鍵とサーバ証明書を作成するコマンド
OpenSSL> req -subj '/C=JP/ST=TestState/O=TestCompany/CN=127.0.0.1' \
-x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout server-key.pem \
-out server-cert.pem
$ openssl req -subj '/C=JP/ST=TestState/O=TestCompany/CN=127.0.0.1' \
-x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout ~/server-key.pem \
-out ~/server-cert.pem
Windows
Mac
작업 폴더를 만듭니다.(폴더 이름은 임의)
단말
$ mkdir ~/test-server
방금 만든 개인 키 (서버-key.pem) 와 서버 인증서 (서버-cert.pem) 파일을 작업 폴더로 이동합니다.단말
$ mv ~/server-key.pem ~/test-server/
$ mv ~/server-cert.pem ~/test-server/
test-server.js 파일을 만들고 뒷부분서버 프로그램의 내용을 복사하고 붙여넣습니다.(파일 이름은 임의)단말
$ vi ~/test-server/test-server.js
vi 명령으로 파일 편집 화면을 표시한 후 서버 프로그램 내용의 복사와 붙여넣기 → esc 키 → :wq
를 입력하면 파일을 저장하고 끝냅니다.서버 프로그램
다음 프로그램에서 지정한 서버 포트 번호와 IP 주소 값을 실제 테스트 환경에 따라 다시 작성하십시오.
이번 설명에서는 포트 번호는 8443, IP 주소는 127.0.0.1을 사용합니다.
test-server.js
const https = require('https')
const fs = require('fs')
const port = 8443 // サーバのポート番号を指定
const host = '127.0.0.1' // サーバのIPアドレスを指定
const options = {
key: fs.readFileSync('server-key.pem'), // 秘密鍵のファイルを指定
cert: fs.readFileSync('server-cert.pem'), // サーバ証明書のファイルを指定
maxVersion: 'TLSv1.3',
minVersion: 'TLSv1.3',
}
// サーバインスタンス作成
const server = https.createServer(options)
// リクエストイベントリスナー
server.on('request', (req, res) => {
// テスト用のリクエストログを適宜出力
console.log('**********************')
console.log('* Client Request *')
console.log('**********************')
console.log('HTTP Method:', req.method)
console.log('Request URL:', req.url)
console.log('HTTP Version:', req.httpVersion)
console.log('HTTP Header:', req.headers)
req.on('data', (chunk) => {
console.log('HTTP Body:', chunk.toString('utf8'))
})
// レスポンス送信
res.setHeader('Content-Type', 'text/plain; charset=utf-8')
res.writeHead(200)
res.write('Hello World!\n')
res.end()
})
// サーバ起動
server.listen(port, host, () => {
console.log(`Starts the server at https://${host}:${port}/`)
})
서버 시작
Windows
Windows 메뉴 Node에서jscommandprompt를 시작하고 작업 폴더로 이동합니다.
(Windows PowerShell 및 명령 프롬프트도 동일하게 수행할 수 있음)
Node.js_command_prompt# 作業フォルダへ移動するコマンド
> cd 作業フォルダのパス
node 명령으로 서버 프로그램을 실행합니다.
Node.js_command_prompt# サーバプログラムを実行するコマンド
> node test-server.js
Starts the server at https://127.0.0.1:8443/
Mac
터미널에서 작업 폴더로 이동하여 node 명령으로 서버 프로그램을 실행합니다.
단말$ cd ~/test-server/
$ node test-server.js
Starts the server at https://127.0.0.1:8443/
연결 확인
TLSv1.3에서 사용할 수 있는 브라우저에서 https://서버의 IP 주소: 포트 번호/에 접근합니다.
인증서 서명으로 인한 오류를 무시하고 계속 접근하십시오.
액세스가 성공하면 브라우저에 "Hello World!"가 표시됩니다.서버를 시작하는 명령 프롬프트나 터미널 화면에서 요청 로그를 출력합니다.
Node.js_command_prompt# WindowsのFirefoxでアクセスした場合のログ出力例
**********************
* Client Request *
**********************
HTTP Method: GET
Request URL: /
HTTP Version: 1.1
HTTP Header: {
host: '127.0.0.1:8443',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'accept-language': 'ja,en-US;q=0.7,en;q=0.3',
'accept-encoding': 'gzip, deflate, br',
dnt: '1',
connection: 'keep-alive',
'upgrade-insecure-requests': '1'
}
브라우저 개발 도구를 연 상태에서 액세스하면 TLSv1.3의 프로토콜 버전으로 연결되어 있는지 확인할 수 있습니다.
서버를 중지하려면 시작 서버의 명령 프롬프트나 터미널 화면에서 Ctrl+C를 누릅니다.
서버 구축이 완료되었습니다.
후기
아파치나nginx에서 HTTPS 서버를 만들 때 익숙하지 않으면 설정 파일을 만드는 데 시간이 걸릴 수 있습니다.
상세한 로그와 사용자 정의가 필요 없고 테스트 서버를 먼저 준비하고 싶을 때, Node.js가 편리한 선택 중 하나가 되지 않을까요?
웹 페이지 정보
본 서버를 구축할 때 아래 사이트의 보도를 특별히 참고하였다.
감사합니다.
# 作業フォルダへ移動するコマンド
> cd 作業フォルダのパス
# サーバプログラムを実行するコマンド
> node test-server.js
Starts the server at https://127.0.0.1:8443/
$ cd ~/test-server/
$ node test-server.js
Starts the server at https://127.0.0.1:8443/
TLSv1.3에서 사용할 수 있는 브라우저에서 https://서버의 IP 주소: 포트 번호/에 접근합니다.
인증서 서명으로 인한 오류를 무시하고 계속 접근하십시오.
액세스가 성공하면 브라우저에 "Hello World!"가 표시됩니다.서버를 시작하는 명령 프롬프트나 터미널 화면에서 요청 로그를 출력합니다.
Node.js_command_prompt
# WindowsのFirefoxでアクセスした場合のログ出力例
**********************
* Client Request *
**********************
HTTP Method: GET
Request URL: /
HTTP Version: 1.1
HTTP Header: {
host: '127.0.0.1:8443',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'accept-language': 'ja,en-US;q=0.7,en;q=0.3',
'accept-encoding': 'gzip, deflate, br',
dnt: '1',
connection: 'keep-alive',
'upgrade-insecure-requests': '1'
}
브라우저 개발 도구를 연 상태에서 액세스하면 TLSv1.3의 프로토콜 버전으로 연결되어 있는지 확인할 수 있습니다.서버를 중지하려면 시작 서버의 명령 프롬프트나 터미널 화면에서 Ctrl+C를 누릅니다.
서버 구축이 완료되었습니다.
후기
아파치나nginx에서 HTTPS 서버를 만들 때 익숙하지 않으면 설정 파일을 만드는 데 시간이 걸릴 수 있습니다.
상세한 로그와 사용자 정의가 필요 없고 테스트 서버를 먼저 준비하고 싶을 때, Node.js가 편리한 선택 중 하나가 되지 않을까요?
웹 페이지 정보
본 서버를 구축할 때 아래 사이트의 보도를 특별히 참고하였다.
감사합니다.
본 서버를 구축할 때 아래 사이트의 보도를 특별히 참고하였다.
감사합니다.
Reference
이 문제에 관하여(Node.js v12로 TLSv1.3 테스트 서버 쉽게 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/marumaru/items/0c73eee045183a440152텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)