Lighttpd - WildCard & Multi

1. 인증서 만들기
* 설명 : 발급 받은 인증서/개인키 파일을 한 파일로 저장 합니다.
(저장 방법 : cat [개인키파일] [인증서파일] > [개인키+인증서 파일])


[root@localhost conf]# cat /usr/local/lighttpd/conf/ssl/www.ucert.co.kr.key \
/usr/local/lighttpd/conf/ssl/www.ucert.co.kr.crt > \
/usr/local/lighttpd/conf/ssl/www.ucert.co.kr.pem

[root@localhost conf]# cat /usr/local/lighttpd/conf/ssl/www.korsec.co.kr.key \
/usr/local/lighttpd/conf/ssl/www.korsec.co.kr.crt > \
/usr/local/lighttpd/conf/ssl/www.korsec.co.kr.pem
2. SSL 환경설정
* 설명 : lighttpd 환경 파일 수정
[root@localhost conf]# vi lighttpd.conf

#### CGI module
#cgi.assign = ( ".pl" => "/usr/bin/perl",
# ".cgi" => "/usr/bin/perl" )
#

#### VHOST engine
$HTTP["host"] =~ "www.ucert.co.kr" {
server.document-root = "/usr/local/lighttpd/ucert/"
accesslog.filename = "/usr/local/lighttpd/logs/access.log"
}

$HTTP["host"] =~ "www.korsec.co.kr" {
server.document-root = "/usr/local/lighttpd/korsec/"
accesslog.filename = "/usr/local/lighttpd/logs/access.log"
}

#### SSL engine
* 설명 : SSL 서비스 포트 설정
$SERVER["socket"] == ":443" {
* 설명 : SSL 서비스 활성화 설정
ssl.engine = "enable"
* 설명 : 인증서+개인키 경로 설정
ssl.pemfile = "/usr/local/lighttpd/conf/ssl/www.ucert.co.kr.pem"
* 설명 : CA 인증서 경로 설정
ssl.ca-file = "/usr/local/lighttpd/conf/ssl/www.ucert.co.kr.ca-bundle"
* 설명 : 홈디렉토리 설정
server.document-root = "/usr/local/lighttpd/ucert/"
}

#### SSL engine
* 설명 : SSL 서비스 포트 설정
$SERVER["socket"] == ":444" {
* 설명 : SSL 서비스 활성화 설정
ssl.engine = "enable"
* 설명 : 인증서 + 개인키 경로 설정
ssl.pemfile = "/usr/local/lighttpd/conf/ssl/www.korsec.co.kr.pem"
* 설명 : CA 인증서 경로 설정
ssl.ca-file = "/usr/local/lighttpd/conf/ssl/www.korsec.co.kr.ca-bundle"
* 설명 : 홈디렉토리 설정
server.document-root = "/usr/local/lighttpd/korsec/"
}

#### status module
#status.status-url = "/server-status"
#status.config-url = "/server-config"

#### auth module
## read authentication.txt for more info
#auth.backend = "plain"
3. lighttpd 재기동
[root@localhost conf]# /etc/rc.d/init.d/lighttpd restart
lighttpd 를 정지 중:                                                 [ OK ]
lighttpd (을)를 시작 중: Enter PEM pass phrase: [개인키 패스워드 입력]
Enter PEM pass phrase:[개인키 패스워드 입력]
                                                                           [ OK ]
[root@localhost conf]#
4. 인증서 확인
[root@localhost ~]# netstat -nap | grep httpd
tcp 0 0 :::80 :::* LISTEN 19301/lighttpd
tcp 0 0 :::443 :::* LISTEN 19301/lighttpd
tcp 0 0 :::444 :::* LISTEN 19301/lighttpd

443포트 Listen 된 상태에서 아래의 명령어를 사용하여 로컬에서 인증서를 확인 합니다.
[root@localhost ~]# openssl s_client -connect 127.0.0.1:SSL포트번호 | openssl x509

depth=1 /C=BE/O=GlobalSign nv-sa/CN=GlobalSign Extended Validation CA - SHA256 - G2
verify error:num=20:unable to get local issuer certificate
verify return:0
-----BEGIN CERTIFICATE-----
MIIE2jCCA8KgAwIBAgICD/cwDQYJKoZIhvcNAQEFBQAwPDELMAkGA1UEBhMCVVMx
FzAVBgNVBAoTDkdlb1RydXN0LCBJbmMuMRQwEgYDVQQDEwtSYXBpZFNTTCBDQTAe
Fw0xMDEyMTQxMDQ4NTlaFw0xMjAyMTUyMTM4MjBaMIHlMSkwJwYDVQQFEyBrdW9u
SXgyYmI0a0lxZGpvWWE1bklYQWRxNVl6dG9RUDELMAkGA1UEBhMCS1IxGDAWBgNV
BAoTD3d3dy51Y2VydC5jby5rcjETMBEGA1UECxMKR1Q1NDc2OTQxMDExMC8GA1UE
CxMoU2VlIHd3dy5yYXBpZHNzbC5jb20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0G
A1UECxMmRG9tYWluIENvbnRyb2wgVmFsaWRhdGVkIC0gUmFwaWRTU0woUikxGDAW
BgNVBAMTD3d3dy51Y2VydC5jby5rcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAMl6qA1dEc/FKw2qSjlh0iZDVGp+zqjBXW/iwkcnEZCzy/wxauh85OwM
G4TZ2FhJQabssuyVocWJGE/Fq3sO6U6lYZwycUKWN45sZTLGhdCbC0ZSb0OUq7tx
A8pDSqH/2/kG8a/Yfn8zGmXgsWi5swgfPKIa7dcmnmglA1x4YDquo0npWMizgt2z
mqQcuY5S/QKCDZo5Ee1BXaS4D7ZHiXzw5W9sDtsqo1nO37gLHTpNhIQrYnzN4ay7
l0FHLxiwEi2O/gndd4Z4/Rr0loFTdemStSPQlIRTag/+8/tMo+BoxHmPFTuWyNAb
MShN1eti+c0qWGsHigjvXMWtyg0NT4UCAwEAAaOCATowggE2MB8GA1UdIwQYMBaA
FGtpPWoYQkrdjwJlOf01JIZ4kRYwMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU
BggrBgEFBQcDAQYIKwYBBQUHAwIwJwYDVR0RBCAwHoIPd3d3LnVjZXJ0LmNvLmty
ggt1Y2VydC5jby5rcjBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vcmFwaWRzc2wt
Y3JsLmdlb3RydXN0LmNvbS9jcmxzL3JhcGlkc3NsLmNybDAdBgNVHQ4EFgQUkHru
EM3YsHLS8SjMWr7kBkyKu/YwDAYDVR0TAQH/BAIwADBJBggrBgEFBQcBAQQ9MDsw
OQYIKwYBBQUHMAKGLWh0dHA6Ly9yYXBpZHNzbC1haWEuZ2VvdHJ1c3QuY29tL3Jh
cGlkc3NsLmNydDANBgkqhkiG9w0BAQUFAAOCAQEAcjR0KR5MnA8gJFhZ4GRHSfvD
N2WX88pZPtE0BlEOU18HLLg8xL5Bb8exvX5+sExHS9zasRHUIPAYpwALSf4/WP7M
96ZMAEAggR9Dt8pCyFO7QXgkB3QQ7EsEK+s01wSWxMN5/ZcSV7O0k/DF83DH118x
/DFVeGNJsbwC0BEzVe/HnmBo77dxCdG+M16R59s2BjEr9Lq9sNnnE3drqs51qrs+
T0CyUWSpZ9KhlwjcLCMKe/SY8WIXIYaAx+IqJ7XJQU+GV1AJP3zHldhngL7eMMFo
ROpAHbjfkI0XboRtTAVs0K46omCAA4JViVF1DDKaXPZ+swif4GlzY/ijwPLDkA==
-----END CERTIFICATE-----

인증서 만료일 확인 방법
[root@mail ~]# openssl s_client -connect localhost:SSL포트번호 < /dev/null 2>&1 | openssl x509 -noout -enddate
notAfter=Sep 12 10:58:54 2017 GMT

설명 : 로컬에서 인증서 출력이 정상적이고 외부에서 https://[도메인]으로 브라우저 접속 시 통신이 되지 않을 경우
내부 방화벽(예. iptables), 외부 방화벽 등에 SSL포트가 Allow (또는 웹방화벽에 인증서가 설치가) 되어있는지
확인 합니다.