Chapter. 3 Reference
이 장에서는 mod_ssl에서 사용되는 모든 설정 지시자(configuration directive)와 함께 mod_ssl이 제공하는 user visible feature들에 대하여 설명하며, 이를 통해 mod_ssl의 어떤 특정한 기능이 실제로 어떻게 설정되는가 혹은 활성화되는가를 설명한다. 각 directive는 Apache 문서에서 표준 Apache directive를 설명하는 방식과 유사한 방식으로 기술되어지는데, 여기에는 directive의 syntax, default, context 등의 요소들이 기술된다.
Mod_ssl에서 사용하는 directive는 크게 세가지 분류(class)로 나눠진다. 먼저 Global Directive(context가 “server config”인 
directive)는 
server config 파일에서 <VirtualHost>와 같은 sectioning command 밖에서만 사용될 수 있다. 두 번째는 Per-Server 
Directive(context가 “server config, virtualhost”인 
directive)로서 
server config 파일에서 <VirtualHost> 섹션의 밖이나 안에서 모두 사용될 수 있으며, <VirtualHost> 섹션의 밖에서 사용될 때는 메인(Default) 서버에 대한 설정이 된다. 세 번째는 Per-Directory 
Directive(context가 “server config, virtual host, directory, .htaccess”인 directive)로서 server config 파일과 per-directory .htaccess 파일의 어느 곳에서든 사용될 수 있다. 이 세가지 class들은 서로의 부분 집합이 되는데, 즉 per-directory의 directive가 per-server와 global context에서 사용될 수 있으며, 또한 per-server class의 directive가 global context에서 사용될 수도 있다.
다른 Apache SSL 숄류션들에 대한 backward 
compatibility를 위해 mod_ssl이 제공하는 부가적인 directive들과 환경 변수들은 Compatibility Chapter에 기술되어져 있다.
 
Configuration Directives
SSLPassPhraseDialog
| 
 Name 
 | 
 SSLPassPhraseDialog 
 | 
| 
 Description 
 | 
 Type of pass phrase dialog for encrypted private 
keys 
 | 
| 
 Syntax 
 | 
 SSLPassPhraseDialog type 
 | 
| 
 Default 
 | 
 SSLPassPhraseDialog builtin 
 | 
| 
 Context 
 | 
 server config 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.1 
 | 
Apache가 시동될 때 
SSL이 
적용된 
각 virtual 
host에 
대한 
Certificate와 
Private Key를 
읽어온다. 
보안을 
위해서 Private 
Key들은 
암호화되어 
있으며, 
따라서 
mod_ssld은 
관리자에게 
암호화된 Private 
Key를 
복호화하기 
위해서 Pass 
Phrase를 
요구한다. Pass 
Phare를 
요구하는 
방식은 
다음의 
두가지 
방식이 
될 
수 
있다.
Apache를 구동할 때 
관리자가 
직접 
각 
암호화된 Private 
Key에 
대한 Pass 
Phrase를 
입력할 
수 
있는 
interactive terminal dialog를 보여주며, default 설정이다. SSL을 적용할 virtual host가 하나 이상 지정될 수 
있기 
때문에 dialog 
수를 
줄이기 
위해서 
다음과 
같은 
reuse-scheme이 
사용된다: 
어떤 
한 Private 
Key를 
복호화할 
때 
그 
때까지 
입력되었던 
모든 Pass 
Phrase를 
시도해서 
맞는 Pass 
Phrase가 
있으면 
그 Private 
Key에 
대한 
dialog를 
실행하지 
않으며, 
그렇지 
않은 
경우에만 
새로운 Pass 
Phrase를 
요구하는 
dialog를 
실행하고 
입력받은 Pass 
Phrase는 
이후의 Private 
Key를 
위해서 
기억되게 
된다. 
N개의 
암호화된 Private 
Key 파일에 
대하여 
N개의 
서로 
다른 Pass 
Phrase를 
사용할 
경우 
모든 
N개의 Pass 
Phrase를 
입력하게 
되며, 
반면에 
모든 
N개의 Private 
Key 파일에 
대하여 
동일한 Pass 
Phrase를 
사용하였다면 
단지 
한번의 Pass 
Phrase 입력 
dialog만이 
실행되게 
된다.
Apache 시동 시에 호출할 각 
암호화된 Private 
Key에 
대한 external 
program을 
설정한다. 
이 
외부 
프로그램은 
“servername:portnumber”를 
인수로 
입력받아서 
해당되는 Pass 
Phrase를 
stdout으로 
출력하며, 
시스템이 
attacker에 
의하여 
침해(compromise)되지 않았음을 확인하기 위해 먼저 security check를 실행하게 되며, 이 check가 성공했을 때만 Pass Phrase를 제공하게 된다.
이 때 Security check를 하는 방식이나 Pass Phrase를 결정하는 방식은 mod_ssl이 결정하는 것이 아니며, mod_ssl은 단지 그 interface(Pass Phrase를 stdout으로 제공하는 실행가능한 프로그램)만을 정의한다.
이 방식에서도 Reuse 알고리즘이 사용되며, 따라서 동일한 Pass Phrase에 대해서는 external program이 한번만 호출된다.
Example: 
SSLPassPhraseDialog 
exec:/usr/local/apache/sbin/pp-filter
 
SSLMutex
| 
 Name 
 | 
 SSLMutex 
 | 
| 
 Description 
 | 
 Semaphore for internal mutual exclusion of 
operations 
 | 
| 
 Syntax 
 | 
 SSLMutex type 
 | 
| 
 Default 
 | 
 SSLMutex none 
 | 
| 
 Context 
 | 
 Server config 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 Mod_ssl 
 | 
| 
 Compatibility 
 | 
 Mod_ssl 2.1 
 | 
이 directive는 fork되어진 Apache 서버 프로세스 간의 동기화되어 실행되어야 할 오퍼레이션들의 상호배제(mutual exclusion)에 사용되는 SSL 엔진의 세마포어(semaphore)를 설정한다. 단지 하나의 global mutex만이 유효하기 때문에 이 
directive는 
global server context에서만 사용할 수 
있다.
가능한 Mutext type은 다음과 같다: 
Mutext를 사용하지 않으며, 기본 설정(default)이다. 그러나 현재 Mutex는 SSL Session Cache에 대한 write access를 동기화(Synchronizing)하는데 주로 사용되기 때문에 Session Cache의 변경이 드물게 일어나는 경우에만 이 
설정을 
사용한다. 
따라서 
이 
directive를 
default로 
설정하는 
것은 
바람직하지 
않으며, real 
Mutex를 
설정하는 
것이 
좋다.
이 설정은 portable and always provided Mutex 
variant를 
지정하며, 
물리적인 
파일이 
Mutext로 
사용된다. 
/path/to/mutex는 로컬 디스크 파일시스템을 사용해야 하며, NFS나 AFS 파일시스템에 위치하는 파일을 사용해서는 않된다. 
Notice: 내부적으로, Apache 부모 프로세스(parent process)의 Process ID(PID)는 그 PID를 유일하게 만들기 위해 자동으로 /path/to/mutext에 덧붙여(appended)짐으로써 PID의 충돌을 막아준다.
이 설정은 가장 훌륭한(elegant) 방법이지만 가장 non-portable한 Mutex variant이며, SysV IPC Semaphore 
(under Unix)와 
Windows Mutex (under Win32)가 사용된다. 이 경우 해당 platform(OS)가 이 
설정을 
지원하여야만 
한다. 
Example: 
SSLMutex file:/usr/local/apache/logs/ssl_mutex
SSLRandomSeed
| 
 Name 
 | 
 SSLRandomSeed 
 | 
| 
 Description 
 | 
 Pseudo Random Number Generator (PRNG) seeding 
source 
 | 
| 
 Syntax 
 | 
 SSLRandomSeed context source [bytes] 
 | 
| 
 Default 
 | 
 None 
 | 
| 
 Context 
 | 
 Server config 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 Mod_ssl 
 | 
| 
 Compatibility 
 | 
 Mod_ssl 2.2 
 | 
이 directive는 시동할 때(context가 startup인 경우) 혹은 새로운 SSL 연결(connection)이 이루어질 때(context가 connect인 경우) SSLeay의 Pseudo Random Number Generator 
(PRNG)의 
seeding을 
위한 
하나 
혹은 
그 
이상의 seed 
source를 
설정한다. 
PRNG가 global 
facility이므로 
이 
directive는 
global server context에서만 사용될 수 
있다.
가능한 source variant는 다음과 같다: 
언제든지 사용 가능한 builtin seeding source로서 이 경우 실행 시(runtime)에 최소한의 CPU cycle을 소비하며, 아무런 결점(drawback)없이 사용될 수 있다. PRNG의 seeding을 위해 사용될 수 있는 source로는 현재 시간, 현재의 process ID, Apache의 inter-process scoreboard 
struture로부터 
임의로 
선택된 
1KB의 extract 
등이 
될 
수 
있다. 
이 
방법의 
단점은 
실질적으로 
그다지 
강력하지 
못한 
소스이며, 
시동시(scoreboard가 아직 사용가능하지 않은)에는 이 
소스의 
유동성(entropy)이 몇 
바이트 
밖에 
되지 
않는다는 
것이다. 
따라서 
항상(최소한 startup 시에는) 부가적인 seeding source를 지정하는 것이 좋다. 
PRNG의 seeding을 위해 /path/to/source로 지정한 외부 파일을 사용한다. Bytes가 명시된 경우에는 지정된 byte 수만큼의 파일의 첫번째부터의 바이트가 entropy를 생성하는데 사용되며, Bytes가 명시되지 않은 경우에는 파일 전체가 entropy를 형성한다. 이 설정은 특히 startup time의 seeding에 사용되며, /dev/random 이나 /dev/urandom device를 사용한다(FreeBSD 계열이나 Linux와 같은 최근의 대부분의 Unix 시스템에 는 이 device들이 들어있다).
PRNG의 seeding을 위한 소스로서 /path/to/program에 지정된 실행가능한 외부 프로그램을 사용한다. Bytes를 명시하는 경우에는 프로그램의 stdout contents에서 bytes에 지정한 수만큼의 byte를 entropy를 형성하는데 사용하며, bytes가 명시되지 않은 경우에는 프로그램의 stdout으로 생성된 전체 데이터가 entropy를 이루게 된다. 이 설정은 단지 startup time에만 사용하며, 매우 강력한 seeding을 필요로 하는 경우에 사용된다. 이 설정을 connection context에 사용하는 것은 서버의 속도를 매우 저하시키기 때문에 보통 connection context에 외부 프로그램을 사용하는 것은 피해야 한다. 
Example:
SSLRandomSeed startup builtin
SSLRandomSeed startup file:/dev/random
SSLRandomSeed startup file:/dev/urandom 1024
SSLRandomSeed startup exec:/usr/local/bin/truerand 16
SSLRandomSeed connect builtin
SSLRandomSeed connect file:/dev/random
SSLRandomSeed connect file:/dev/urandom 1024
 
SSLSessionCache
| 
 Name 
 | 
 SSLSessionCache 
 | 
| 
 Description 
 | 
 Type of the global/inter-process SSL Session 
Cache 
 | 
| 
 Syntax 
 | 
 SSLSessionCache type 
 | 
| 
 Default 
 | 
 SSLSessionCache none 
 | 
| 
 Context 
 | 
 server config 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.1 
 | 
이 directive는 global/inter-process SSL Session 
Cache의 
storage type을 
지정하며, 
이 
cache는 
병렬적인 
요청 
프로세스(parallel 
request processing)의 속도를 개선해주는 역할을 한다. 동일한 서버 프로세스(HTTP keep-alive를 통한)에 
대한 
요청에 
대해서 
SSLeay는 SSL 
session information을 로컬에 저장을 한다. 그러나 modern client는 이미지나 다른 데이터들을 parallel request를 통하여 요청하기 때문에(보통 4개까지의 parallel request), 이러한 요청들은 서로 다른 pre-forked process에 의해 처리된다. Inter-process cache는 필요없는 session handshake를 피할 수 있게 해준다.
다음과 같은 2가지의 storage type이 지원된다: 
Global/inter-process Session Cache를 사용하지 않으며, 기본 설정(default)이다. 기능 상의 문제는 없으나, 현저한 속도 저하가 생긴다. 
서버 프로세스들에 대한 local SSLeay memory cache를 동기화(synchronizing)하기 위해 로컬 디스크에 있는 DBM hashfile을 사용한다. 클라이언트의 요청에 대한 현저한 속도 향상이 생기며, 따라서 이 설정을 사용하는 것이 권장된다.
Example: 
SSLSessionCache 
dbm:/usr/local/apache/logs/ssl_gcache_data
 
SSLSessionCacheTimeout
| 
 Name 
 | 
 SSLSessionCacheTimeout 
 | 
| 
 Description 
 | 
 Number of seconds before an SSL session expires in the Session 
Cache 
 | 
| 
 Syntax 
 | 
 SSLSessionCacheTimeout seconds 
 | 
| 
 Default 
 | 
 SSLSessionCacheTimeout 300 
 | 
| 
 Context 
 | 
 server config, virtual host 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.0 
 | 
이 directive는 global/inter-process SSL Session 
Cache와 SSLeay 
internal memory cache에 저장된 정보들에 대한 timeout을 초단위로 지정한다. 설정 값은 최저 15초이며 실제로 실행될 서버에서는 보통 300초 이상을 지정한다.
Example: 
SSLSessionCacheTimeout 600
 
SSLEngine
| 
 Name 
 | 
 SSLEngine 
 | 
| 
 Description 
 | 
 SSL Engine Operation Switch 
 | 
| 
 Syntax 
 | 
 SSLEngine on|off 
 | 
| 
 Default 
 | 
 SSLEngine off 
 | 
| 
 Context 
 | 
 Server config, virtual host 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 Mod_ssl 
 | 
| 
 Compatibility 
 | 
 Mod_ssl 2.1 
 | 
이 directive는 SSL/TLS 프로토콜 엔진의 사용여부를 지정하며, 보통 <VirtualHost> 섹션 안에 사용되어 해당 virutal host가 SSL/TLS를 사용할 것인가를 지정한다. 기본 설정은 주서버와 모든 virtual host에 대하여 SSL/TLS 프로토콜을 사용하지 않는 것이다.
Example: 
<VirtualHost _default_:443>
SSLEngine on
...
</VirtualHost>
 
SSLCipherSuite
| 
 Name 
 | 
 SSLCipherSuite 
 | 
| 
 Description 
 | 
 Cipher Suite available for negotiation in SSL 
handshake 
 | 
| 
 Syntax 
 | 
 SSLCipherSuite cipher-spec 
 | 
| 
 Default 
 | 
 SSLCipherSuite 
ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP 
 | 
| 
 Context 
 | 
 server config, virtual host, directory, 
.htaccess 
 | 
| 
 Override 
 | 
 AuthConfig 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.1 
 | 
이 directive는 SSL handshake phrase 
단계에서 
클라이언트와 
협상(negotiation)할 수 
있는 Cipher 
Suite를 
설정하며, 
이를 
위해 
콜론(: 
)으로 
구분되는 SSLeay 
cipher specification들로 이루어진 스트링을 directive의 값으로 지정한다. 이 directive는 per-server와 per-directory context 모두에서 사용될 수 있다. Per-server context의 경우 이 directive는 connection이 이루어질 때 표준 SSL handshake에 적용되며, per-directory context의 경우에는 HTTP request는 read 되었지만 HTTP response는 보내지기 전에 재설정된 Cipher Suite를 가지고 SSL renegotiation하게 된다. 
Cipher-spec에 지정되는 SSL cipher specification은 4개의 주속성(major attribute)과 몇 가지의 부가적인 작은 속성(extra minor ones)들로 이루어진다:
- Key Exchange Algorithm : RSA or Diffie-Hellman variants.
 
- Authentication Algorithm : RSA, Diffie-Hellman, DSS or none. 
 
- Cipher/Encryption Algorithm : DES, Triple-DES, RC4, RC2, IDEA or none. 
 
- MAC Digest Algorithm : MD5, SHA or SHA1. 
 
SSL cipher는 또한 export cipher가 되거나 혹은 SSLv2와 SSLv3/TLSv1 cipher(여기서 TLSv1은 SSLv3와 동일하다) 둘 중에 하나가 될 수 있다. 사용할 cipher를 명시하는 방법으로는 모든 cipher를 사용하거나, 한번에 한가지 cipher를 사용하거나, 혹은 alias를 지정하여 cipher의 선호도와 사용 순서를 지정할 수 있다(Table 1 참조). 
 
| 
 Tag 
 | 
 Description 
 | 
| 
 Key Exchange Algorithm: 
 | 
| 
 KRSA 
 | 
 RSA key exchange 
 | 
| 
 KDHr 
 | 
 Diffie-Hellman key exchange with RSA key 
 | 
| 
 KDHd 
 | 
 Diffie-Hellman key exchange with DSA key 
 | 
| 
 KEDH 
 | 
 Ephemeral (temp.key) Diffie-Hellman key exchange (no 
cert) 
 | 
| 
 Authentication Algorithm: 
 | 
| 
 ANULL 
 | 
 No authentication 
 | 
| 
 ARSA 
 | 
 RSA authentication 
 | 
| 
 ADSS 
 | 
 DSS authentication 
 | 
| 
 ADH 
 | 
 Diffie-Hellman authentication 
 | 
| 
 Cipher Encoding Algorithm: 
 | 
| 
 ENULL 
 | 
 No encoding 
 | 
| 
 DES 
 | 
 DES encoding 
 | 
| 
 3DES 
 | 
 Triple-DES encoding 
 | 
| 
 RC4 
 | 
 RC4 encoding 
 | 
| 
 RC2 
 | 
 RC2 encoding 
 | 
| 
 IDEA 
 | 
 IDEA encoding 
 | 
| 
 MAC Digest Algorithm: 
 | 
| 
 MD5 
 | 
 MD5 hash function 
 | 
| 
 SHA1 
 | 
 SHA1 hash function 
 | 
| 
 SHA 
 | 
 SHA hash function 
 | 
| 
 Aliases: 
 | 
| 
 SSLv2 
 | 
 all SSL version 2.0 ciphers 
 | 
| 
 SSLv3 
 | 
 all SSL version 3.0 ciphers 
 | 
| 
 EXP 
 | 
 all export ciphers 
 | 
| 
 LOW 
 | 
 all low strength ciphers (no export, single 
DES) 
 | 
| 
 MEDIUM 
 | 
 all ciphers with 128 bit encryption 
 | 
| 
 HIGH 
 | 
 all ciphers using Triple-DES 
 | 
| 
 RSA 
 | 
 all ciphers using RSA key exchange 
 | 
| 
 DH 
 | 
 all ciphers using Diffie-Hellman key 
exchange 
 | 
| 
 EDH 
 | 
 all ciphers using Ephemeral Diffie-Hellman key 
exchange 
 | 
| 
 ADH 
 | 
 all ciphers using Anonymous Diffie-Hellman key 
exchange 
 | 
| 
 DSS 
 | 
 all ciphers using DSS authentication 
 | 
| 
 NULL 
 | 
 all ciphers using no 
encryption 
 | 
Table 1: SSLeay Cipher Specification Tags
사용하고자 하는 cipher와 그 순서를 지정하기 위해서 여러 개의 tag들을 함께 지정할 수 있으며, 이를 위해 어떤 특정한 cipher들의 그룹을 의미하는 alias(SSLv2, SSLv3, EXP, LOW, 
MEDIUM, HIGH)들을 사용할 수 
있다. 
이 
tag들을 
몇 
가지 
접두사(prefix)로 연결하여 cipher-spec을 이룰 수도 있으며, 가능한 접두사(prefix)는 다음과 같다: 
- none: 리스트에 cipher를 포함시킨다
 
- + : cipher를 리스트에 포함시키며 또한 리스트의 현재 위치로 가져다 놓는다
 
- - : 리스트로부터 cipher를 제거한다(이후에 다시 포함시킬 수 
있다)
 
- ! : 리스트로부터 cipher를 완전히 제거한다(이후에 다시 포함시킬 수 
없다)
 
“ssleay ciphers ?v” 명령어로 모든 cipher-spec string을 볼 수 있다. 기본(default) cipher-spec 
string은 
“ALL:!ADH:RC4+RSA:+HIGN:+MEDIUM:+LOW:+SSLv2:+EXP”이며 의미는 그 
다음과 
같다.
- Authenticate하지 않는 모든 cipher들을 고려(consideration)에서 제거한다. SSL의 경우 단지 Anonymous Diffie-Hellman cipher만이 제거된다
 
- RC4와 
RSA를 
사용하는 
cipher를 
포함시킨다.
 
- High security cipher, medium security cipher, 그리고 low security cipher를 각각 포함시킨다.
 
- 마지막으로 모든 SSLv2 cipher와 export cipher들을 리스트의 마지막에 포함시키다.
 
$ ssleay ciphers -v 
'ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP'
NULL-SHA SSLv3 Kx=RSA Au=RSA Enc=None Mac=SHA1
NULL-MD5 SSLv3 Kx=RSA Au=RSA Enc=None Mac=MD5
EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) 
Mac=SHA1
... ... ... ... ...
EXP-RC4-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 
export
EXP-RC2-CBC-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 
export
EXP-RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 
export
Table 2는 SSL에서 사용되는 RSA와 DH cipher에 대한 전체 리스트이다.
Example: 
SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
| 
 Cipher-Tag 
 | 
 Protocol 
 | 
 Key Ex. 
 | 
 Auth. 
 | 
 Enc. 
 | 
 MAC 
 | 
 Type 
 | 
| 
 RSA Ciphers:  
 | 
| 
 DES-CBC3-SHA 
 | 
 SSLv3 
 | 
 RSA 
 | 
 RSA 
 | 
 3DES(168) 
 | 
 SHA1 
 | 
 | 
| 
 DES-CBC3-MD5 
 | 
 SSLv2 
 | 
 RSA 
 | 
 RSA 
 | 
 3DES(168) 
 | 
 MD5 
 | 
 | 
| 
 IDEA-CBC-SHA 
 | 
 SSLv3 
 | 
 RSA 
 | 
 RSA 
 | 
 IDEA(128) 
 | 
 SHA1 
 | 
 | 
| 
 RC4-SHA 
 | 
 SSLv3 
 | 
 RSA 
 | 
 RSA 
 | 
 RC4(128) 
 | 
 SHA1 
 | 
 | 
| 
 RC4-MD5 
 | 
 SSLv3 
 | 
 RSA 
 | 
 RSA 
 | 
 RC4(128) 
 | 
 MD5 
 | 
 | 
| 
 IDEA-CBC-MD5 
 | 
 SSLv2 
 | 
 RSA 
 | 
 RSA 
 | 
 IDEA(128) 
 | 
 MD5 
 | 
 | 
| 
 RC2-CBC-MD5 
 | 
 SSLv2 
 | 
 RSA 
 | 
 RSA 
 | 
 RC2(128) 
 | 
 MD5 
 | 
 | 
| 
 RC4-MD5 
 | 
 SSLv2 
 | 
 RSA 
 | 
 RSA 
 | 
 RC4(128) 
 | 
 MD5 
 | 
 | 
| 
 DES-CBC-SHA 
 | 
 SSLv3 
 | 
 RSA 
 | 
 RSA 
 | 
 DES(56) 
 | 
 SHA1 
 | 
 | 
| 
 RC4-64-MD5 
 | 
 SSLv2 
 | 
 RSA 
 | 
 RSA 
 | 
 RC4(64) 
 | 
 MD5 
 | 
 | 
| 
 DES-CBC-MD5 
 | 
 SSLv2 
 | 
 RSA 
 | 
 RSA 
 | 
 DES(56) 
 | 
 MD5 
 | 
 | 
| 
 EXP-DES-CBC-SHA 
 | 
 SSLv3 
 | 
 RSA(512) 
 | 
 RSA 
 | 
 DES(40) 
 | 
 SHA1 
 | 
 export 
 | 
| 
 EXP-RC2-CBC-MD5 
 | 
 SSLv3 
 | 
 RSA(512) 
 | 
 RSA 
 | 
 RC2(40) 
 | 
 MD5 
 | 
 export 
 | 
| 
 EXP-RC4-MD5 
 | 
 SSLv3 
 | 
 RSA(512) 
 | 
 RSA 
 | 
 RC4(40) 
 | 
 MD5 
 | 
 export 
 | 
| 
 EXP-RC2-CBC-MD5 
 | 
 SSLv2 
 | 
 RSA(512) 
 | 
 RSA 
 | 
 RC2(40) 
 | 
 MD5 
 | 
 export 
 | 
| 
 EXP-RC4-MD5 
 | 
 SSLv2 
 | 
 RSA(512) 
 | 
 RSA 
 | 
 RC4(40) 
 | 
 MD5 
 | 
 export 
 | 
| 
 NULL-SHA 
 | 
 SSLv3 
 | 
 RSA 
 | 
 RSA 
 | 
 None 
 | 
 SHA1 
 | 
 | 
| 
 NULL-MD5 
 | 
 SSLv3 
 | 
 RSA 
 | 
 RSA 
 | 
 None 
 | 
 MD5 
 | 
 | 
| 
 Diffie-Hellman Ciphers: 
 | 
| 
 ADH-DES-CBC3-SHA 
 | 
 SSLv3 
 | 
 DH 
 | 
 None 
 | 
 3DES(168) 
 | 
 SHA1 
 | 
 | 
| 
 ADH-DES-CBC-SHA 
 | 
 SSLv3 
 | 
 DH 
 | 
 None 
 | 
 DES(56) 
 | 
 SHA1 
 | 
 | 
| 
 ADH-RC4-MD5 
 | 
 SSLv3 
 | 
 DH 
 | 
 None 
 | 
 RC4(128) 
 | 
 MD5 
 | 
 | 
| 
 EDH-RSA-DES-CBC3-SHA 
 | 
 SSLv3 
 | 
 DH 
 | 
 RSA 
 | 
 3DES(168) 
 | 
 SHA1 
 | 
 | 
| 
 EDH-DSS-DES-CBC3-SHA 
 | 
 SSLv3 
 | 
 DH 
 | 
 DSS 
 | 
 3DES(168) 
 | 
 SHA1 
 | 
 | 
| 
 EDH-RSA-DES-CBC-SHA 
 | 
 SSLv3 
 | 
 DH 
 | 
 RSA 
 | 
 DES(56) 
 | 
 SHA1 
 | 
 | 
| 
 EDH-DSS-DES-CBC-SHA 
 | 
 SSLv3 
 | 
 DH 
 | 
 DSS 
 | 
 DES(56) 
 | 
 SHA1 
 | 
 | 
| 
 EXP-EDH-RSA-DES-CBC-SHA 
 | 
 SSLv3 
 | 
 DH(512) 
 | 
 RSA 
 | 
 DES(40) 
 | 
 SHA1 
 | 
 Export 
 | 
| 
 EXP-EDH-DSS-DES-CBC-SHA 
 | 
 SSLv3 
 | 
 DH(512) 
 | 
 DSS 
 | 
 DES(40) 
 | 
 SHA1 
 | 
 Export 
 | 
| 
 EXP-ADH-DES-CBC-SHA 
 | 
 SSLv3 
 | 
 DH(512) 
 | 
 None 
 | 
 DES(40) 
 | 
 SHA1 
 | 
 Export 
 | 
| 
 EXP-ADH-RC4-MD5 
 | 
 SSLv3 
 | 
 DH(512) 
 | 
 None 
 | 
 RC4(40) 
 | 
 MD5 
 | 
 export 
 | 
Table 2: Particular SSL Ciphers
 
SSLCertificateFile
| 
 Name 
 | 
 SSLCertificateFile 
 | 
| 
 Description 
 | 
 Server PEM-encoded X.509 Certificate file 
 | 
| 
 Syntax 
 | 
 SSLCertificateFile filename 
 | 
| 
 Default 
 | 
 None 
 | 
| 
 Context 
 | 
 server config, virtual host 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.0 
 | 
서버에 대한 PEM-encoding되어진 증명서(Certificate) 파일을 지정하며, 부가적으로(optionally) 그 증명서에 대응하는 RSA 개인키를 지정한다(같은 파일에 개인키가 포함되어 있는 경우). 만약 증명서에 포함되어 있는 개인키가 암호화되어져 있는 경우 startup 시에 Pass Phrase를 입력받는 dialog가 실행된다.
Example: 
SSLCertificateFile 
/usr/local/apache/conf/ssl.crt/server.crt
 
SSLCertificateKeyFile
| 
 Name 
 | 
 SSLCertificateKeyFile 
 | 
| 
 Description 
 | 
 Server PEM-encoded RSA Private Key file 
 | 
| 
 Syntax 
 | 
 SSLCertificateKeyFile filename 
 | 
| 
 Default 
 | 
 None 
 | 
| 
 Context 
 | 
 server config, virtual host 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.0 
 | 
서버에 대한 PEM-encoding되어진 개인키를 지정한다. 개인키가 SSLCertificateFile 
directive에서 
지정한 
증명서에 
포함되어져 
있지 
않은 
경우 
따로 
개인키를 
저장하고 
있는 
파일을 
지정하기 
위해 
이 
부가적인 
directive를 
사용하게 
된다. 
만약 
SSLCertificateFile directive가 사용되고 증명서 파일에 개인키도 포함되어 있는 경우에는 이 
directive를 
사용할 
필요가 
없다. 
그러나 
증명서에 
개인키를 
포함하는 
것은 
실질적인 
면에서 
권장되지 
않으며, 
증명서와 
개인키를 
따로 
분리해서 
저장하는 
것이 
좋다. 
만약 
지정된 
개인키가 
암호화되어져 
있다면 startup 
시에 
역시 Pass 
Phrase를 
물어보는 
dialog가 
실행되게 
된다.
Example: 
SSLCertificateKeyFile 
/usr/local/apache/conf/ssl.key/server.key
 
SSLCACertificatePath
| 
 Name 
 | 
 SSLCACertificatePath 
 | 
| 
 Description 
 | 
 Directory of PEM-encoded CA Certificates for Client 
Auth. 
 | 
| 
 Syntax 
 | 
 SSLCACertificatePath directory 
 | 
| 
 Default 
 | 
 None 
 | 
| 
 Context 
 | 
 server config, virtual host 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.0 
 | 
Certificate Authority(CA)의 증명서가 위치한 디렉토리를 지정하며, 이 CA 증명서는 Client Authentication을 할 때 클라이언트의 증명서를 확인(verify)하기 위해 사용된다. 
이 디렉토리에 있는 파일들은 PEM-encoding되어져야 하며, hash filename을 통하여 접근되어진다. 따라서 증명서 파일을 이 위치에 꼭 두어야 하는 것은 아니다. 이 경우 hash-value.N이라는 이름을 가지는 심볼릭 링크를 생성해야 하며, 항상 이 디렉토리가 적절한 심볼릭 링크를 가지고 있는가를 확인해야 한다. 이를 위해서는 mod_ssl에 포함되어 있는 Makefile을 사용한다.
Example: 
SSLCACertificatePath 
/usr/local/apache/conf/ssl.crt/
 
SSLCACertificateFile
| 
 Name 
 | 
 SSLCACertificateFile 
 | 
| 
 Description 
 | 
 File of concatenated PEM-encoded CA Certificates for Client 
Auth. 
 | 
| 
 Syntax 
 | 
 SSLCACertificateFile filename 
 | 
| 
 Default 
 | 
 None 
 | 
| 
 Context 
 | 
 server config, virtual host 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.0 
 | 
이 directive는 설정하고자 하는 모든 CA들의 증명서들을 모아둘 수 있는 all-in-one 파일을 지정하며, 그 증명서들은 Client Authentication에 사용된다. 실제로 이 파일은 PEM-encoding되어 있는 여러 개의 증명서 파일들을 선호도(preference)에 따라 연달아 덧붙여둔 것이다. 
Example: 
SSLCACertificateFile 
/usr/local/apache/conf/ssl.crt/ca-bundle-client.crt
 
SSLVerifyClient
| 
 Name 
 | 
 SSLVerifyClient 
 | 
| 
 Description 
 | 
 Type of Client Certificate verification 
 | 
| 
 Syntax 
 | 
 SSLVerifyClient level 
 | 
| 
 Default 
 | 
 SSLVerifyClient none 
 | 
| 
 Context 
 | 
 server config, virtual host, directory, 
.htaccess 
 | 
| 
 Override 
 | 
 AuthConfig 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.0 
 | 
Client Authentication 과정에서 수행할 증명서확인수준(Certificate Verification 
Level)을 
지정한다. 
이 
directive는 
per-server와 
per-directory context 모두에서 사용되어질 수 
있다. 
per-server context에 사용되는 경우 connection이 이루어질 때 
표준 SSL 
handshake에서 
사용되는 client 
authentication에 적용되며, per-directory context에서 사용되는 경우 HTTP request가 read되어졌지만 HTTP response가 보내지기 전에 재설정된(reconfigured) client verification 
level을 
가지고 
재협상(renegotiation)하게 된다.
지정할 수 있는 level은 다음과 같다:
- none : no client Certificate is required at all 
 
- optional : the client may present a valid Certificate 
 
- require : the client has to present a valid Certificate 
 
- optional_no_ca : the client may present a valid Certificate but has not to 
be (successfully) verifyable. 
 
4가지 level 모두가 모든 브라우져에서 잘 
동작하지는 
않으며, 
optional_no_ca level의 경우 실질적으로 인증의 개념과는 맞지 않기 때문에(SSL 테스트를 위한 목적으로나 사용될 수 
있다) 
실제로는 
none과 require 
level만이 
의미가 
있다.
Example: 
SSLVerifyClient require
 
SSLVerifyDepth
| 
 Name 
 | 
 SSLVerifyDepth 
 | 
| 
 Description 
 | 
 Maximum depth of CA Certificates in Client Certificate 
verification 
 | 
| 
 Syntax 
 | 
 SSLVerifyDepth number 
 | 
| 
 Default 
 | 
 SSLVerifyDepth 1 
 | 
| 
 Context 
 | 
 server config, virtual host, directory, 
.htaccess 
 | 
| 
 Override 
 | 
 AuthConfig 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.0 
 | 
이 directive는 클라이언트가 유효한 증명서를 가지고 있지 않다고 결정하기 전에 얼마나 깊게 클라이언트를 verify할 것인가를 지정한다. 이 directive는 per-server와 per-directory context 모두에서 사용되어질 수 있다. per-server context에 사용되는 경우 connection이 이루어질 때 표준 SSL handshake에서 사용되는 client authentication 프로세스에 적용되며, per-directory 
context에서 
사용되는 
경우 HTTP 
request가 
read되어졌지만 
HTTP response가 보내지기 전에 재설정된(reconfigured) client verification level을 가지고 SSL 재협상(renegotiation)을 하게 된다.
실질적으로 Depth는 증명서에 서명한 바로 상위의 발행자(intermediate certificate 
issuer)의 
최대 
개수, 
즉 
클라이언트의 
증명서에 
서명한 
CA의 
상위 
CA들을 
찾아갈 
때 
최대한 
몇 
개의 
CA를 
찾아갈 
것인가를 
의미한다. 
Depth를 
0으로 
설정하는 
것은 
self-signed client certificate만을 허용한다는 의미이며, default depth인 1은 self-signed client certificate이거나 서버가 직접 알고 있는 CA(SSLCACertificatePaht에 있는 CA certificate)가 서명한 client certificate만을 허용한다는 의미이다. 
Example: 
SSLVerifyDepth 10
 
SSLLog
| 
 Name 
 | 
 SSLLog 
 | 
| 
 Description 
 | 
 Where to write the dedicated SSL engine 
logfile 
 | 
| 
 Syntax 
 | 
 SSLLog filename 
 | 
| 
 Default 
 | 
 None 
 | 
| 
 Context 
 | 
 Server config, virtual host 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.1 
 | 
SSL 프로토콜 엔진의 로그만을 기록할(dedicated) 로그 파일의 이름을 지정한다. 에러에 대한 메시지는 일반적인 Apache 에러로그 파일(ErrorLog directive에 지정된 파일)에도 기록된다. 이 로그파일은 symlink attack에 사용될 수 
없는 
곳(root만이 write할 수 
있는 
곳)에 
두어야 
한다. 
파일 
이름이 
슬래쉬(‘/’)로 
시작하지 
않으면 Server 
Root에 
대한 
상대 
경로로 
인식되며, 
파일 
이름이 
bar(‘|’)로 
시작하는 
경우에는 
로그를 
받아들이는 
실행가능한 
프로그램에 
대한 
경로로 
인식된다. 
이 
directive는 
하나의 virtual 
host config에서 
단 
한번만이 
사용될 
수 
있다.
Example: 
SSLLog /usr/local/apache/logs/ssl_engine_log
 
SSLLogLevel
| 
 Name 
 | 
 SSLLogLevel 
 | 
| 
 Description 
 | 
 Logging level for the dedicated SSL engine 
logfile 
 | 
| 
 Syntax 
 | 
 SSLLogLevel level 
 | 
| 
 Default 
 | 
 SSLLogLevel none 
 | 
| 
 Context 
 | 
 server config, virtual host 
 | 
| 
 Override 
 | 
 Not applicable 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.1 
 | 
이 directive는 SSL 프로토콜 엔진의 로그파일에 기록할 때 얼마나 자세하게 기록할 것인가를 지정한다. 지정할 수 있는 level은 다음과 같다(아래로 갈수록 고수준의 level이며, 고수준의 level은 저수준의 level을 포함한다):
SSL 전용 로그파일에는 아무것도 남기지 않으며, 단지 에러에 관련된 메시지만이 Apache의 에러 로그파일에 기록된다.
processing이 멈추는 것과 같은 치명적인 상황에 대한 에러 메시지만을 기록하며, 이 메시지들은 Apache 에러 로그파일에도 기록된다.
치명적이지 않은 문제에 대한 warning message까지 기록한다. 
중요한 processing step에 대한 informational 
message까지 
기록한다.
Minor processing step에 대한 informational message까지 기록한다.
Development와 low-level I/O information를 위한 debugging message까지 기록한다.
Example: 
SSLLogLevel warn
 
SSLOptions
| 
 Name 
 | 
 SSLOptions 
 | 
| 
 Description 
 | 
 Configure various SSL engine run-time 
options 
 | 
| 
 Syntax 
 | 
 SSLOptions [+-]option ... 
 | 
| 
 Default 
 | 
 None 
 | 
| 
 Context 
 | 
 server config, virtual host, directory, 
.htaccess 
 | 
| 
 Override 
 | 
 Options 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.1 
 | 
 
이 directive는 per-directory 수준에서의 다양한 run-time 옵션들을 조정한다. 여러 개의 SSLOption들이 하나의 directory에 적용되는 경우 가장 specific한 하나가 선택되어지며, 옵션들은 merge되지 않는다. 그러나 만약 SSLOptions directive의 모든 옵션들이 plus(+)나 minus(-) 기호로 연결되어 있는 경우에는 모든 옵션들이 merge되어진다. ‘+’기호로 
연결된 
옵션들은 
현재의 
옵션에 
포함되어지며, 
‘-’ 
기호로 
연결된 
옵션들은 
현재의 
옵션으로부터 
제외되어진다. 
The available options are: 
다른 Apache SSL 
solution과의 
backwardcompatibility를 위한 부가적인 CGI/SSI 환경 변수들이 생성된다. 실제로 생성되어질 변수들에 대한 자세한 설명은 Compatibility 부분을 참조한다.
두개의 부가적인 CGI/SSI 환경 변수, SSL_CLIENT_CERT와 SSL_SERVER_CERT를 생성한다. 이 두개의 변수는 각각 현재의 HTTPS 연결(connection)에 대한 클라이언트와 서버의 PEM-encoded X.509 
Certificate를 
포함하게 
되며, 
좀 
더 
고수준의 
Certificate checking을 위하여 CGI 스크립트에 의해 사용되어질 수 
있다. 
이 옵션이 사용되면 클라이언트 X.509 Certificate의 Subject DN(Distinguished 
Name)이 HPPT 
Basic Authentication username으로 변환되어지며, 이것은 표준 Apache 인증(authentication)이 접근 제어(access control)에 사용될 수 
있음을 
의미한다. user 
name은 
Client의 X.509 
Certificate의 
Subject(이것은 
SSLeay의 
ssleay x509 ?noout ?subject ?in certificate.crt 명령을 실행할 때 얻어진다)가 되며, 패스워드는 사용자로부터 얻어지는 것이 아니며 모든 user name에 대한 패스워드는 “password”란 
단어를 
암호화한 
결과인 
“xxj31ZMTZzkVA”가 된다.
Example: 
SSLOptions +FakeBasicAuth -CompatEnvVars
 
SSLRequireSSL
| 
 Name 
 | 
 SSLRequireSSL 
 | 
| 
 Description 
 | 
 Deny access when SSL is not used for the HTTP 
request 
 | 
| 
 Syntax 
 | 
 SSLRequireSSL 
 | 
| 
 Default 
 | 
 None 
 | 
| 
 Context 
 | 
 directory, .htaccess 
 | 
| 
 Override 
 | 
 AuthConfig 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.0 
 | 
이 directive가 명시되면 현재의 연결이 SSL 위에서 이루어진 HTTP(즉, HTTPS)가 아닌 경우 접근을 허용하지 않는다. 이 directive는 SSL을 적용할 virtual host나 보호되어야 할 필요가 있는 디렉토리에 대한 설정 등에 매우 유용하며, 이 directive가 있으면 SSL을 사용하지 않은 모든 요청(request)들은 거부되어진다.
Example: 
SSLRequireSSL
 
SSLRequire
| 
 Name 
 | 
 SSLRequire 
 | 
| 
 Description 
 | 
 Allow access only when an arbitrarily complex boolean 
expression is true 
 | 
| 
 Syntax 
 | 
 SSLRequire expression 
 | 
| 
 Default 
 | 
 None 
 | 
| 
 Context 
 | 
 directory, .htaccess 
 | 
| 
 Override 
 | 
 AuthConfig 
 | 
| 
 Status 
 | 
 Extension 
 | 
| 
 Module 
 | 
 mod_ssl 
 | 
| 
 Compatibility 
 | 
 mod_ssl 2.1 
 | 
이 directive는 접근이 허용되기 위해 충족되어야 할 요구사항(access requirement)을 지정하며, 요구 사항은 임의의 boolean expression들의 조합이 될 수 있다. 
Boolean expression은 다음의 문법(BNF grammar notation에 따른 문법)을 따라야 한다:
expr ::= "true" | "false"
| "!" expr
| expr "&&" expr
| expr "||" expr
| "(" expr ")"
| comp
comp ::= word "==" word | word "eq" word
| word "!=" word | word "ne" word
| word "<" word | word "lt" word
| word "<=" word | word "le" word
| word ">" word | word "gt" word
| word ">=" word | word "ge" word
| word "in" "{" wordlist "}"
| word "=~" regex
| word "!~" regex
wordlist ::= word
| wordlist "," word
word ::= digit
| cstring
| variable
| function
digit ::= [0-9]+
cstring ::= "..."
variable ::= "%{" varname "}"
function ::= funcname "(" funcargs ")"
여기서 varname은 Table 3에 있는 어떠한 변수도 사용될 수 있으며, funcname에는 다음의 함수들이 가능하다:
이 함수는 filename을 가리키는 하나의 문자열 인수를 받아서 그 파일의 content로 확장된다. 이 함수는 그 파일의 content와 regular expression을 대치시키는데 사용된다. 
Expression은 먼저 내부적으로 machine representation으로 parsing되며, 두번째 단계로서 evaluate되어진다. Global과 Per-Server context에서는 expression이 startup time에 parsing된 후 runtime에서만 machine representation이 실행되어진다. Per-Directory 
context의 
경우에는 
이와 
다른데, 
이 
경우에는 
expression이 
모든 
request마다 
parsing되고 
곧바로 
실행되어진다.
Example: 
SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \
and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
Table 3: Available Variables for SSLRequire
 
Additional Features
Environment Variables
Mod_ssl은 다양한 SSL 정보를 부가적인 환경 변수들을 통해 제공하며, mod_ssl이 생성하는 변수들은 Table 4에 정리되어 있다. Backward compatibility를 위해서 이 정보들은 다른 이름으로 제공될 수도 있으며, compatibility 변수들에 대한 자세한 내용은 Compatibility 부분을 참조한다.
| 
 Variable 
Name: 
 | 
 Value Type 
 | 
 Description: 
 | 
| 
 HTTPS 
 | 
 flag 
 | 
 HTTPS is being used. 
 | 
| 
 SSL_PROTOCOL 
 | 
 string 
 | 
 The SSL protocol version (SSLv2, SSLv3, 
TLSv1) 
 | 
| 
 SSL_CIPHER 
 | 
 string 
 | 
 The cipher specification name 
 | 
| 
 SSL_CIPHER_USEKEYSIZE 
 | 
 number 
 | 
 Number of cipher bits (actually used) 
 | 
| 
 SSL_CIPHER_ALGKEYSIZE 
 | 
 number 
 | 
 Number of cipher bits (possible) 
 | 
| 
 SSL_VERSION_INTERFACE 
 | 
 string 
 | 
 The mod_ssl program version 
 | 
| 
 SSL_VERSION_LIBRARY 
 | 
 string 
 | 
 string The SSLeay program version 
 | 
| 
 SSL_CLIENT_M_VERSION 
 | 
 string 
 | 
 string The version of the client 
certificate 
 | 
| 
 SSL_CLIENT_M_SERIAL 
 | 
 string 
 | 
 The serial of the client certificate 
 | 
| 
 SSL_CLIENT_S_DN 
 | 
 string 
 | 
 Subject DN in client's certificate 
 | 
| 
 SSL_CLIENT_S_DN_x509 
 | 
 string 
 | 
 Component of client's Subject DN 
 | 
| 
 SSL_CLIENT_I_DN 
 | 
 string 
 | 
 Issuer DN of client's certificate 
 | 
| 
 SSL_CLIENT_I_DN_x509 
 | 
 string 
 | 
 Component of client's Issuer DN 
 | 
| 
 SSL_CLIENT_V_START 
 | 
 string 
 | 
 Validity of client's certificate (start 
time) 
 | 
| 
 SSL_CLIENT_V_END 
 | 
 string 
 | 
 Validity of client's certificate (end 
time) 
 | 
| 
 SSL_CLIENT_A_SIG 
 | 
 string 
 | 
 Algorithm used for the signature of client's 
certificate 
 | 
| 
 SSL_CLIENT_A_KEY 
 | 
 string 
 | 
 Algorithm used for the public key of client's 
certificate 
 | 
| 
 SSL_SERVER_M_VERSION 
 | 
 string 
 | 
 The version of the server certificate 
 | 
| 
 SSL_SERVER_M_SERIAL 
 | 
 string 
 | 
 The serial of the server certificate 
 | 
| 
 SSL_SERVER_S_DN 
 | 
 string 
 | 
 Subject DN in server's certificate 
 | 
| 
 SSL_SERVER_S_DN_x509 
 | 
 string 
 | 
 Component of server's Subject DN 
 | 
| 
 SSL_SERVER_I_DN 
 | 
 string 
 | 
 Issuer DN of server's certificate 
 | 
| 
 SSL_SERVER_I_DN_x509 
 | 
 string 
 | 
 Component of server's Issuer DN 
 | 
| 
 SSL_SERVER_V_START 
 | 
 string 
 | 
 Validity of server's certificate (start 
time) 
 | 
| 
 SSL_SERVER_V_END 
 | 
 string 
 | 
 Validity of server's certificate (end 
time) 
 | 
| 
 SSL_SERVER_A_SIG 
 | 
 string 
 | 
 Algorithm used for the signature of server's 
certificate 
 | 
| 
 SSL_SERVER_A_KEY 
 | 
 string 
 | 
 Algorithm used for the public key of server's 
certificate 
 | 
| 
 [ where x509 is a component of a X.509 DN: C, SP, L, O, OU, CN, 
Email ] 
 | 
Table 4: SSI/CGI Environment Variables
 
Custom Log Formats
Mod_ssl이 Apache에 적용되어지면 Custom Log Format을 위한 부가적인 함수들이 존재하게 된다. 예를 들면 “%{varname}x” 
eXtension format function은 어떤 모듈이 제공하는 변수(특히 Table 4에 나열된 mod_ssl이 제공하는 변수)를 
확장(extend)하는데 사용된다. 또한 Backward compatibility를 위해 “%{name}c” cryptography format 
function이 
제공되며, 
이 
함수에 
대한 
정보는 
Compatibility 부분을 참조한다.
Example: 
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"