Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP SSL 컨텍스트 옵션 완벽 정리

개요

PHP에서 ssl://tls:// 전송 프로토콜을 사용할 때 stream_context_create() 함수를 통해 설정할 수 있는 SSL 컨텍스트 옵션 목록입니다. 이 옵션들을 활용하면 인증서 검증, 암호화 설정, 보안 수준 조정 등 안전한 네트워크 통신 환경을 세밀하게 구성할 수 있습니다.

peer_name사용할 피어(peer) 이름입니다. 이 값을 설정하지 않으면 스트림을 열 때 사용된 호스트명을 기반으로 이름이 자동으로 추정됩니다.
verify_peerSSL 인증서 검증을 요구합니다. 기본값은 TRUE입니다.
verify_peer_name피어 이름 검증을 요구합니다. 기본값은 TRUE입니다.
allow_self_signed자체 서명(self-signed) 인증서를 허용합니다. verify_peer 옵션이 필요하며, 기본값은 FALSE입니다.
cafile원격 피어의 신원을 인증하는 데 사용되는, 로컬 파일 시스템상의 CA(Certificate Authority) 인증서 파일 경로입니다.
capath올바르게 해시 처리된 인증서 디렉터리 경로여야 합니다.
local_cert파일 시스템상의 로컬 인증서 파일 경로입니다.
local_pk인증서와 개인 키가 별도의 파일로 분리되어 있는 경우, 로컬 개인 키(private key) 파일의 경로입니다.
passphraselocal_cert 파일이 인코딩될 때 사용된 암호 문구(passphrase)입니다.
CN_match기대하는 Common Name(CN)입니다. Common Name이 일치하지 않으면 연결 시도가 실패합니다.
verify_depth인증서 체인이 너무 깊으면 연결을 중단합니다.
ciphers사용 가능한 암호화 알고리즘(cipher) 목록을 설정합니다. 문자열 형식은 ciphers(1) 매뉴얼에 설명되어 있습니다.
capture_peer_certTRUE로 설정하면 피어 인증서를 담고 있는 peer_certificate 컨텍스트 옵션이 생성됩니다.
capture_peer_cert_chainTRUE로 설정하면 인증서 체인을 담고 있는 peer_certificate_chain 컨텍스트 옵션이 생성됩니다.
SNI_enabledTRUE로 설정하면 SNI(Server Name Indication)가 활성화됩니다.
SNI_server_name설정하면 이 값이 SNI의 서버 이름으로 사용됩니다. 설정하지 않으면 스트림을 열 때 사용된 호스트명을 기반으로 서버 이름이 추정됩니다.
disable_compression설정하면 TLS 압축이 비활성화됩니다.
peer_fingerprint원격 인증서의 다이제스트(digest)가 지정된 해시값과 일치하지 않으면 연결을 중단합니다.
security_level보안 수준(security level)을 설정합니다. 지정하지 않으면 기본 보안 수준이 적용됩니다. PHP 7.2.0 이상 및 OpenSSL 1.1.0 이상부터 사용할 수 있습니다.

사용 예제

다음 예제는 SSL 컨텍스트 옵션을 실제로 설정하는 방법을 보여줍니다.

$stream_context = stream_context_create([ 'ssl' => [
    'local_cert' => '/path/to/key.pem',
    'peer_fingerprint' => openssl_x509_fingerprint(file_get_contents('/path/to/key.crt')),
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true,
    'verify_depth' => 0 ]]);

위 코드는 로컬 인증서를 지정하고, 피어 인증서의 지문(fingerprint)을 확인하며, 자체 서명 인증서를 허용하도록 SSL 컨텍스트를 구성하는 예입니다. 운영 환경에서는 보안을 위해 verify_peerverify_peer_name을 비활성화하는 것을 권장하지 않으므로, 테스트 환경에서만 사용하는 것이 좋습니다.