본문 바로가기
Middleware/WebtoB

WebtoB SSL/TLS 인증서 적용 방법 (+사설인증서 생성 방법)

by nxCore 2023. 3. 15.

 

WebtoB 에 SSL/TLS 인증서를 적용하여 HTTPS 통신을 할 수 있도록 설정하는 방법입니다.

 

SSL/TLS 인증서는 공인된 인증기관에서 구매할 수 있는 공인 인증서와 자체 생성하여 사용하는 사설 인증서가 있습니다.

브라우저에서 신뢰할 수 없는 인증서 오류를 출력하지 않게 하려면 공인인증기관에서 인증서를 구매하여 적용을 해야 합니다. (또는 Let's Encrypt 등 무료 공인인증서를 사용해도 됩니다.)

본 포스트에서는 사설 인증서를 생성하는 방법 및 적용 방법에 대해 설명 드리고, 공인 인증서도 동일한 방법으로 적용을 할 수 있으니 공인 인증서를 설정하는 경우에는 사설 인증서 생성 방법은 건너뛰고 적용 방법만 따라해주시면 됩니다.

 

 

WebtoB 에서 사설 인증서를 생성하는 방법입니다.

인증서는 일반적으로 $WEBTOBDIR/ssl 경로 하위에 두고 사용하나, 원하는 경로에서 작업해도 무방합니다.

저는 $WEBTOBDIR/ssl/2023 디렉토리에서 작업하도록 하겠습니다.

 

1. CA 인증서 생성

CA 인증서 생성을 위해 개인키를 먼저 생성합니다.

WebtoB 실행 계정으로 다음 명령을 실행합니다.

[webtob5@CentOS7-WAS1 2023]$ wbssl genrsa -out privkey.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
....................................................+++++
....................................................................................+++++
e is 65537 (0x010001)
[webtob5@CentOS7-WAS1 2023]$

 

그 다음 CSR 을 생성합니다.

CSR 생성 과정에 인증서에 포함될 정보를 입력하게 되어 있습니다.

CN (Common Name) 설정만 입력해주면 되며, 입력 내용은 Web 서버에 접속 시 사용할 도메인 또는 IP 주소를 입력하고 나머지는 넘어가도 무방합니다.

[webtob5@CentOS7-WAS1 2023]$ wbssl req -new -key privkey.key -out rootca.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KR]:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) [Tmax Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:ca.nxcore.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[webtob5@CentOS7-WAS1 2023]$

 

이제 마지막으로 CA 인증서를 생성하도록 하겠습니다.

[webtob5@CentOS7-WAS1 2023]$ wbssl x509 -req -in rootca.csr -signkey privkey.key -out rootca.crt -days 3650
Signature ok
subject=C = KR, O = Tmax Ltd, CN = ca.nxcore.com
Getting Private key
[webtob5@CentOS7-WAS1 2023]$

 

rootca.crt 이름을 가진 CA 인증서 파일을 생성 완료했습니다.

 

 

2. 서버 개인키 생성

서버 개인키는 CA 인증서를 생성하면서 처음 생성한 privkey.key 파일을 그대로 사용해주면 됩니다.

 

 

3. 서버 인증서 생성

CA 인증서 생성과 동일하게 CSR 를 먼저 생성해야 합니다.

마찬가지로 CN (Common Name) 설정만 추가해주시고 나머지는 넘어가도 무방합니다.

[webtob5@CentOS7-WAS1 2023]$ wbssl req -new -key privkey.key -out cert.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KR]:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) [Tmax Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:www.nxcore.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[webtob5@CentOS7-WAS1 2023]$

 

마지막으로 서버 인증서를 생성합니다.

[webtob5@CentOS7-WAS1 2023]$ wbssl x509 -req -in cert.csr -CA rootca.crt -CAkey privkey.key -CAcreateserial -out cert.crt -days 3650
Signature ok
subject=C = KR, O = Tmax Ltd, CN = www.nxcore.com
Getting CA Private Key
[webtob5@CentOS7-WAS1 2023]$

 

최종적으로 다음과 같은 파일들이 생성되었습니다.

서버 인증서 : cert.crt

서버 개인키 : privkey.key

CA 인증서 : rootca.crt

 

 

이제 생성된 인증서 파일들을 가지고 WebtoB 에 SSL/TLS 사용 설정을 해보도록 하겠습니다.

공인인증서도 동일한 방법으로 설정할 수 있으니 그대로 따라해주시면 됩니다.

(공인인증서를 받을 때에는 Apache/WebtoB 지원 형식 (.crt / .pem) 으로 받으시면 됩니다.)

 

 

WebtoB 에 SSL/TLS 인증서 설정 방법 입니다.

 

$WEBTOBDIR/config/http.m 파일을 수정합니다.

*SSL 절에 인증서를 추가 설정합니다.

*SSL
ssl_nxcore      CertificateFile         = "/sw/webtob5/ssl/2023/cert.crt",
                CertificateKeyFile      = "/sw/webtob5/ssl/2023/privkey.key",
                CertificateChainFile    = "/sw/webtob5/ssl/2023/chain.crt",
                CACertificateFile       = "/sw/webtob5/ssl/2023/rootca.crt",
                PassPhraseDialog        = "file:/sw/webtob5/ssl/passwd",
                Protocols       	= "-SSLv2, -SSLv3, -TLSv1, -TLSv1.1, TLSv1.2, TLSv1.3",
                RequiredCiphers 	= "HIGH:!RSA:!SHA1"

 

각 설정들의 의미는 다음과 같습니다.

CertificateFile : 서버 인증서 파일 경로

CertificateKeyFile : 서버 개인키 파일 경로

CertificateChainFile : 체인 인증서 파일 경로 (필요 시 설정, 단일 파일만 설정 가능)

CACertificateFile : 루트CA 인증서 파일 경로

PassPhraseDialog : 서버 개인키에 패스워드가 설정되어 있는 경우 WebtoB 기동 시 패스워드 입력을 요구하나, 해당 옵션 설정으로 패스워드를 암호화 하여 저장해두고 기동 시 패스워드를 묻지 않도록 설정 가능

Protocols : SSL/TLS 프로토콜 버전 별 사용/미사용 설정 (앞에 ' - ' 를 붙이면 미사용)

RequiredCiphers : SSL/TLS 통신에 사용 할 Cipher Suite 를 설정

 

서버 개인키에 패스워드 설정이 되어 있는 경우, 패스워드를 암호화 하여 미리 저장해두고 WebtoB 기동 시에 개인키 패스워드를 묻지 않도록 구성할 수 있습니다.

다음과 같은 명령어로 패스워드를 암호화 하여 저장을 합니다.

wsmkppd [암호화저장할파일경로(명)] [*SSL절에 선언한 SSL 이름]

[webtob5@CentOS7-WAS1 2023]$ pwd
/sw/webtob5/ssl/2023
[webtob5@CentOS7-WAS1 2023]$ wsmkppd passwd ssl_nxcore
New password:
Confirm:
Adding Password for ssl_nxcore
[webtob5@CentOS7-WAS1 2023]$

SSL/TLS 인증서 갱신 때에도 개인키 패스워드가 변경되었다면 이 작업을 꼭 수행해주어야 합니다.

 

SSL/TLS 통신이 가능한 VHOST 추가 작업을 진행합니다.

$WEBTOBDIR/config/http.m 파일을 수정합니다.

기존에 v_http 만 존재했다면, v_https 를 추가 설정해주고 포트는 443 (또는 원하는 포트) 로 설정을 해줍니다.

SSL/TLS 사용 선언을 위해 SSLFlag = Y 로 설정, SSLName 은 *SSL 절에 선언했던 ssl 설정 이름을 지정해줍니다.

또한, 추가한 Vhost 설정에 맞게 로그를 별도 분리 설정한 경우, *LOGGING 설정도 추가해줍니다.

*VHOST
v_http          DOCROOT         = "/sw/webtob5/docs",
                HOSTNAME        = "www.nxcore.com",
                HOSTALIAS       = "192.168.1.11",
                PORT            = "80",
                ServiceOrder    = "uri,ext",
                ERRORDOCUMENT   = "400,401,403,404,405,406,503",
                URLRewrite      = Y,
                URLRewriteConfig = "config/rewrite.conf",
                LOGGING         = "acc_http",
                ERRORLOG        = "err_http"

v_https         DOCROOT         = "/sw/webtob5/docs",
                HOSTNAME        = "www.nxcore.com",
                PORT            = "443",
                ServiceOrder    = "uri,ext",
                ERRORDOCUMENT   = "400,401,403,404,405,406,503",
                SSLFLAG         = Y,
                SSLNAME         = "ssl_nxcore",
                LOGGING         = "acc_https",
                ERRORLOG        = "err_https"
                
*LOGGING
syslog          Format = "SYSLOG",   FileName = "/sw/webtob5/log/system/system_%Y%%M%%D%.log", Option = "sync"
acc_node        Format = "COMBINED", FileName = "/sw/webtob5/log/node/access_%Y%%M%%D%.log", Option = "sync"
err_node        Format = "ERROR",    FileName = "/sw/webtob5/log/node/error_%Y%%M%%D%.log", Option = "sync"

acc_http        Format = "COMBINED", FileName = "/sw/webtob5/log/http/access_%Y%%M%%D%.log", Option = "sync"
err_http        Format = "ERROR",    FileName = "/sw/webtob5/log/http/error_%Y%%M%%D%.log", Option = "sync"
acc_https       Format = "COMBINED", FileName = "/sw/webtob5/log/https/access_%Y%%M%%D%.log", Option = "sync"
err_https       Format = "ERROR",    FileName = "/sw/webtob5/log/https/error_%Y%%M%%D%.log", Option = "sync"

 

 

*SVRGROUP, *SERVER, *URI 절 설정 등에 VhostName 옵션이 추가되어 있었다면, 새로 생성한 Vhost 를 추가 지정해줍니다.

*SVRGROUP
g_svrg          SVRTYPE = JSV, VhostName = "v_http, v_https"

*SERVER
svr1            SVGNAME = g_svrg, MinProc = 50, MaxProc = 50
svr2            SVGNAME = g_svrg, MinProc = 50, MaxProc = 50

*URI
u_svr2          Uri = "/hello", Svrtype = JSV, VhostName = "v_http, v_https"
u_svr1          Uri = "/",      Svrtype = JSV, VhostName = "v_http, v_https", GotoEXT = Y

 

모두 완료되었습니다.

http.m 설정파일을 컴파일 후 WebtoB 를 재기동 해주면 HTTPS 접속이 가능해집니다.

 

정상적으로 설정이 되었는지 확인하려면 다음과 같은 명령어로 확인할 수 있습니다.

[webtob5@CentOS7-WAS1 config]$ wbssl s_client -connect localhost:443 -servername www.nxcore.com
CONNECTED(00000003)
depth=1 C = KR, O = Tmax Ltd, CN = ca.nxcore.com
verify error:num=19:self signed certificate in certificate chain
verify return:1
depth=1 C = KR, O = Tmax Ltd, CN = ca.nxcore.com
verify return:1
depth=0 C = KR, O = Tmax Ltd, CN = www.nxcore.com
verify return:1
---
Certificate chain
 0 s:C = KR, O = Tmax Ltd, CN = www.nxcore.com
   i:C = KR, O = Tmax Ltd, CN = ca.nxcore.com
 1 s:C = KR, O = Tmax Ltd, CN = ca.nxcore.com
   i:C = KR, O = Tmax Ltd, CN = ca.nxcore.com
---

(...)

Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384

(...)

read R BLOCK
^C
[webtob5@CentOS7-WAS1 config]$

 

위와 같이 TLSv1.3 프로토콜로 접속되었고, TLS_AES_256_GCM_SHA384 Cipher Suite 로 연결이 된 것을 확인할 수 있습니다.

 

주의할 점은 Certificate chain 부분에 0 i: (issuer) 부분에 있는 기관 이름 (CN) 과 1 s: (subject) 부분에 있는 기관 이름이 일치해야 체인 인증서와 루트 CA 인증서가 정상 설정되어 있음을 의미하는 것이므로 반드시 테스트를 시도해서 확인해야 합니다. (체인 인증서 기관이 2개 이상인 경우, 다음 인증서도 정상 연결되어 있는지 확인)

---
Certificate chain
 0 s:C = KR, O = Tmax Ltd, CN = www.nxcore.com
   i:C = KR, O = Tmax Ltd, CN = ca.nxcore.com    ## 이 부분과
 1 s:C = KR, O = Tmax Ltd, CN = ca.nxcore.com    ## 이 부분이 일치해야 함
   i:C = KR, O = Tmax Ltd, CN = ca.nxcore.com
---

 

 

댓글