Apache SSL 인증서 설치/적용 가이드
출처: https://www.sslcert.co.kr/guides/Apache-SSL-Certificate-Install
고객사의 특정 구성 환경에서는 오작동이 발생할수 있으며, SSL 인증서의 "설치/설정/적용/작동/오류" 등에 대해서 보증 및 관여하지 않습니다. SecureSign 에서는 별도의 기술지원을 제공하고 있지 않으므로, 고객사 자체 해결이 어렵다면 'Apache 공식 기술지원' 이용을 권장합니다.
사전 구성 환경
- OpenSSL 라이브러리 http://www.openssl.org/ (TLS 1.2 지원 필수)
- Apache w/mod_ssl http://www.modssl.org/ (http.conf - mod_ssl.so 모듈 활성화)
- TLS 1.2 / SHA-2(sha256RSA) 암호화 지원 모듈 구성/활성 확인 필수
- SNI(Server Name Indication, 서버 이름 표시) 기능 지원하는 웹서버 버전 권장 (443공용)
- MD5, RC4 등 국제 보안 기구에서 해제를 권장하는 취약한 암호화 모듈 비활성화
- SSL 2.0, 3.0 및 TLS 1.0 1.1 프로토콜 접속 허용 해제. 최신 TLS 1.2 1.3 설정 권장
진행 과정
- 개인키(Private Key) 생성
- CSR(Certificate Signing Request) 생성
- 인증서 발급 신청 제출
- 인증서 발급 완료 (발급내역서/파일설명서 PDF 참조)
- 인증서 설치 적용 - 신규,갱신,재발급,도메인추가
- 서버 정상 적용 완료 테스트
- 웹페이지에 https:// 링크 적용
개인키(Private Key) 생성
- CSR 자동생성 발급 완료시, "개인키, 서버인증서, 체인인증서, 루트인증서" 의 pem, pfx, jks, p7b 파일이 포함되어 있습니다.
- FAQ : 개인키(private key) 생성/보관 관련 참고 사항
- -des3 : 개인키 암호화 수준 DES3 (Windows Apache 환경은 해당 옵션 제외)
- -out private.key : 개인키를 저장할 파일명 지정. 개인키 파일은 분실하지 않도록 잘 보관해야 합니다.
- 2048 : bit
Result
Loading 'screen' into random state - done
Generating RSA private key, 2048 bit long modulus
..........................+++
.....................................................
.....................+++
e is 65537 (0x10001)
Enter pass phrase for pri.kery: (개인키 파일 암호 입력)
Verifying - Enter pass phrase for pri.kery: (개인키 파일 암호 입력)
CSR(Certificate Signing Request) 생성 예
- FAQ : SSL 발급 신청시 CSR 생성 관련 참고 사항
- FAQ : SSL 발급 신청시 도메인 형식 예제 및 참고 사항
또는
openssl req -new -key private.key -out out.csr -subj "/C=KR/ST=Seoul/L=Gang-nam/O=SecureSignKR/OU=Dev Team/CN=example.com"
- -key private.key : 앞서 생성한 개인키 파일 지정
- -outout.csr : 생성될 CSR 파일명 지정
- -config "../share/openssl.cnf" : cnf 위치를 확인하지 못하는 경우 cnf 파일 경로 지정
- -subj : CSR 생성시 입력이 필요한 정보 지정
-
- C : ISO 국가 코드 KR, US, CN, JP (대문자)
- ST : 시,도
- L : 구,군
- O : 기관명, 회사명
- OU : 조직명
- CN : 도메인명, 일반이름. IP 주소는 CN 으로 사용할수 없습니다.
- 위 항목은 모두 영문입력을 해야 합니다. 특수문자를 사용하면 안됩니다.
- (예제에 사용된 옵션 값 등은 예제용이므로, 실제 해당 도메인 정보로 지정하시기 바랍니다)
(openssl 에 대한 상세 사용법 설명은 자체 매뉴얼을 참조 바랍니다 - SecureSign 에서 설명불가)
Single
CN : sub.example.com 처럼 FQDN 도메인 형식 이어야 합니다.
Wildcard
CN : *.example.com 과 같은 패턴 이어야 합니다.
MultiDomain
CN : example.com 대표성을 가진 FQDN 도메인 1개만 입력 합니다.
SAN : 인증서에 포함될 나머지 FQDN 도메인은, 신청서 작성중 DCV 설정 단계에서 추가 입력합니다.
Multi-Wildcard
CN : example.com 대표 루트 도메인 1개을 CN으로 입력 합니다.
SAN : *.example.com 형식의 와일드카드 도메인은, 신청서 작성중 DCV 설정 단계에서 추가 입력합니다.
Result
Enter pass phrase for pri.kery: (개인키 패스워드 입력)
Loading 'screen' into random state - done
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) [AU]:KR (국가코드 C)
State or Province Name (full name) [Some-State]:Seoul (시,도 ST)
Locality Name (eg, city) []:Gang-nam (구,군 L)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:SecureSignKR (기관명 O)
Organizational Unit Name (eg, section) []:Dev Team (조직명 OU)
Common Name (eg, YOUR name) []:example.com (도메인명 CN)
Email Address []:webmaster@example.com (이메일)
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: enter (설정 X)
An optional company name []: enter (설정 X)
생성된 CSR 예제
-----BEGIN CERTIFICATE REQUEST-----
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAktSMQ4wDAYDVQQIEwVTZW91bDERMA8G
A1UEBxMIR2FuZy1uYW0xGDAWBgNVBAoTD1NlY3VyZUxheWVyIEluYzERMA8GA1UE
-- 중략 --
wxd+87gwsvAC2dyK8I4N1ttXDRJcDPCDe1BGqWvYYAZN7FbvnbHCM7y/SN++pxbS
jbnkoe8uStQvfCo6DW5MZHUli5+lRU/UpA==
-----END CERTIFICATE REQUEST-----
앞서 생성한 CSR 파일은 Base64 포맷의 PEM Text 이며, 텍스트 편집기를 이용하여 파일을 오픈합니다. -----BEGIN ~ REQUEST----- 까지 포함하여 내용 전체를 복사하여 신청서에 입력합니다. (----- 를 누락하거나, 새로운 빈출이 추가되지 않도록 주의하세요)
SSL 발급 신청
- GoGetSSL Domain (Sectigo) (₩ 7,000)
- Sectigo PositiveSSL (₩ 9,000) ▶ ₩ 7,000. 22% 할인 프로모션 진행중. 자세히보기
- Sectigo PositiveSSL Wildcard (₩ 120,000) ▶ 타사이전 50% 포인트 특별 적립 진행중. 자세히보기
- Sectigo PositiveSSL Multi-Domain (₩ 49,000)
- RapidSSL Standard (DigiCert) (₩ 24,000)
- 최저가 SSL 인증서 타입 분류별 전체 보기
인증서 발급 완료 및 참고 사항
- 발급 완료 후에는, 메일첨부 또는 주문상세의 압축파일(zip)에 인증서 파일이 포함되어 있습니다.
- 서버 적용에 필요한 파일 정보는, zip 파일내 '발급내역서 및 루트/체인' PDF 에서 확인해야 합니다. (필수)
- 이후 과정 부터는, 서버에 SSL 인증서 설치/적용/확인 절차 입니다. (인터넷에 공개된 설정법과 차이 없음)
- 직접 설치/적용에 어려움이 있다면, 서버운영 전문업체 기술지원도 검토해 보시기 바랍니다 유료기술지원 확인하기
- 서버이름표시(SNI) 지원되는 서버의 경우, SSL 인증서 마다 각 포트 구분없이 모두 443 포트 적용가능합니다.
- SNI 설정으로 하는 경우, 사이트에 접속하는 클라이언트의 호환성을 미리 검토해야 합니다.
SSL 설정할 conf 위치 확인
- 기본 httpd.conf 에 설정할지 또는 /conf/extra/httpd-ssl.conf 와 같은 별도의 위치에 적용할지 확인해야 합니다.
- 별도 분할된 conf 에 적용한다면, httpd.conf 에서 참조(Include) 설정이 되어 있는지 꼭 확인해야 합니다.
VirtualHost 적용 예제 (서버 인증서 발급 받은 후)
SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 (서버 환경에 따라서 선택적 적용)
SSLCertificateKeyFile /인증서파일경로/개인키 ex. sslcert.co.kr_xxxxx.key.pem
SSLCertificateFile /인증서파일경로/서버인증서 ex. sslcert.co.kr_xxxxx.crt.pem
SSLCertificateChainFile /인증서파일경로/체인인증서ex. chain-bundle.pem
SSLCACertificateFile /인증서파일경로/루트인증서 ex. AAACertificateServices.Root.crt.pem
* 루트/체인 인증서는 상품별로 차이가 있으므로, 발급 완료시 첨부된 파일 내역에서 확인 가능합니다.
* chain-bundle.pem 은 체인인증서가 여러개인 경우 1개 파일로 통합한 PEM Text 파일입니다.
* CSR 자동 생성 이용시, 개인키에는 패스워드가 지정되지 않습니다. (별도 지정 필요시 변환 매뉴얼 참조)
* 예제에 포함되어 있지 않은 나머지 Property 는 공식 매뉴얼 또는 현재 서버 설정값을 사용하시기 바랍니다. (/conf/extra/httpd-ssl.conf 참조)
VirtualHost 적용 예제 - Apache 2.4.8 + (서버 인증서 발급 받은 후)
SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 (서버 환경에 따라서 선택적 적용)
SSLCertificateKeyFile /인증서파일경로/개인키 ex. sslcert.co.kr_xxxxx.key.pem
SSLCertificateFile /인증서파일경로/서버인증서 ex. sslcert.co.kr_xxxxx.crt.pem
SSLCACertificateFile /인증서파일경로/루트,체인 통합 파일 ex. ca-chain-bundle.pem
* 루트/체인 인증서는 상품별로 차이가 있으므로, 발급 완료시 첨부된 파일 내역에서 확인 가능합니다.
* ca-chain-bundle.pem 은 루트인증서+체인인증서가 1개 파일로 통합한 PEM Text 파일입니다.
* CSR 자동 생성 이용시, 개인키에는 패스워드가 지정되지 않습니다. (별도 지정 필요시 변환 매뉴얼 참조)
* 예제에 포함되어 있지 않은 나머지 Property 는 공식 매뉴얼 또는 현재 서버 설정값을 사용하시기 바랍니다. (/conf/extra/httpd-ssl.conf 참조)
설치 적용 확인
- SSL 설정 적용 후, Apache 서버를 재시작하여 정상 구동이 되는지 확인이 필요합니다.
- 서버 데몬 시작시 SSL 설정 관련 오류,경고가 있는지 콘솔/데몬/이벤트 로그 확인이 필요합니다.
- 서버 로컬에서 설정한 HTTPS 포트가 활성화 되어 있는지 netstat 등으로 확인해야 합니다.
- 외부에서 HTTPS 포트 접속이 되지 않는 다면 보안설정(방화벽등) 허용을 확인해야 합니다.
- L4 분산 환경은, HTTPS 패킷을 수신하는 모든 노드 웹서버에 SSL 적용이 필요합니다.
- L7 라우팅 환경은, L7 에도 HTTPS 활성 및 SSL 인증서 설정이 필요합니다. (장비별 자체 매뉴얼 참조)
- SSL 발급 도메인 웹페이지에 https:// 링크 적용을 별도 진행해야 최종적으로 SSL 암호화가 적용됩니다. (개발자,웹디자이너)
- PC 및 스마트폰의 "Chrome / Firefox / IE / Edge" 각 웹브라우져에서 "루트,체인,SSL,TLS" 경고가 발생 하는지 확인해야 합니다.
관련 주요 이슈 사항
- SSL 인증서 적용시, 서버 이름 표시 (SNI) 지원 서버 및 클라이언트
- 서버에 보안이 약한 임시 Diffie-Hellman 공개 키가 있습니다
- 연결이 비공개로 설정되어 있지않습니다
- ERR_SSL_VERSION_OR_CIPHER_MISMATCH
- 페이지에 안전하지 않은 다른 리소스, 혼합된 콘텐츠 차단, 자물쇠 표시 없음
- Apache, NginX 등 웹서버 SSL/TLS Cipher Suite 권장 값
- SSLCertificateChainFile deprecated 오류
- apachectl 실행시 "The startssl option is no longer supported"
- X509_check_private_key:key values mismatch 오류
- CommonName (CN) xxxxx does NOT match server name 오류
- 주요 웹브라우져 SSL v2 v3 및 TLS 1.0, 1.1 지원 삭제
참고 추가 자료
설치 적용 관련 FAQ
'컴퓨터 활용(한글, 오피스 등) > 50_2.운영체제_리눅스' 카테고리의 다른 글
리눅스_명령어 모음 (0) | 2022.11.26 |
---|---|
리눅스_웹/리눅스 서버에서의 TLS / SSL 버전 확인 및 설정 (0) | 2022.11.26 |
리눅스_AWK 명령어 (0) | 2022.11.25 |
리눅스_vi 한글 폰트 설정 (0) | 2022.11.25 |
리눅스_awk 설치 및 삭제 (0) | 2022.11.23 |