> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/deployment/ko/self-hosted/inference-server/configuration/https.md).

# HTTPS를 통한 Inference 제공

자체 호스팅 Roboflow Inference 서버를 자체 TLS 인증서, 사용자 지정 인증서 경로, 암호화된 키, 상호 TLS로 HTTPS를 통해 제공합니다.

자체 TLS 인증서와 개인 키를 제공하면 Inference 서버는 HTTPS를 직접 제공할 수 있습니다. 이는 컨테이너 앞에 TLS 종료 리버스 프록시를 둘 수 없는 자체 호스팅 배포에 유용합니다.

HTTPS는 모두 환경 변수로 구성됩니다.

## 환경 변수

<table data-search="false"><thead><tr><th>변수</th><th>설명</th><th>기본값</th></tr></thead><tbody><tr><td>ENABLE_HTTPS</td><td>마스터 스위치입니다. HTTPS를 활성화하려면 True, 1 또는 yes로 설정하세요.</td><td>False</td></tr><tr><td>SSL_CERTFILE</td><td>컨테이너 내부의 PEM 인코딩된 인증서 경로입니다.</td><td>/etc/inference/certs/server.crt</td></tr><tr><td>SSL_KEYFILE</td><td>컨테이너 내부의 PEM 인코딩된 개인 키 경로입니다.</td><td>/etc/inference/certs/server.key</td></tr><tr><td>SSL_KEYFILE_PASSWORD</td><td>암호화된 개인 키의 암호입니다.</td><td>설정되지 않음</td></tr><tr><td>SSL_CA_CERTS</td><td>클라이언트 인증서(mTLS)를 검증하는 데 사용되는 CA 번들입니다.</td><td>설정되지 않음</td></tr></tbody></table>

인증서 및 키 경로의 기본값은 `/etc/inference/certs/...`이므로, 가장 간단한 배포에서는 해당 경로에 인증서와 키를 마운트하고 `ENABLE_HTTPS=true`.

만약 `ENABLE_HTTPS` 가 설정되어 있지만 인증서나 키가 없으면, 서버는 읽으려고 시도한 경로를 나열한 오류와 함께 시작을 거부합니다.

## 자체 서명 인증서로 빠르게 시작하기

아래 예시는 CPU 이미지를 `https://localhost:9001` 에서 자체 서명 인증서를 사용해 실행합니다. 운영 환경에서는 인증서 생성 단계를 직접 발급받은 CA 인증서로 바꾸세요.

```bash
# 1. localhost에 대해 유효한 자체 서명 인증서/키 쌍 생성
mkdir -p /tmp/inference-certs
openssl req -x509 -newkey rsa:2048 -nodes \
  -keyout /tmp/inference-certs/server.key \
  -out /tmp/inference-certs/server.crt \
  -days 365 \
  -subj "/CN=localhost" \
  -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"

# 2. HTTPS를 활성화한 상태로 inference 서버 실행
docker run --rm -p 127.0.0.1:9001:9001 \
  -e ENABLE_HTTPS=true \
  -v /tmp/inference-certs:/etc/inference/certs:ro \
  roboflow/roboflow-inference-server-cpu:latest

# 3. 다른 셸에서 검증
curl --cacert /tmp/inference-certs/server.crt https://localhost:9001/info
```

`--cacert` 이 요청에 대해 생성된 인증서를 신뢰하면서도 인증서 및 호스트명 검증은 유지합니다.

## 사용자 지정 인증서 경로

인증서가 기본값이 아닌 다른 위치에 있다면 경로를 명시적으로 설정하세요:

```bash
docker run --rm -p 127.0.0.1:9001:9001 \
  -e ENABLE_HTTPS=true \
  -e SSL_CERTFILE=/run/secrets/tls/fullchain.pem \
  -e SSL_KEYFILE=/run/secrets/tls/privkey.pem \
  -v /etc/letsencrypt/live/inference.example.com:/run/secrets/tls:ro \
  roboflow/roboflow-inference-server-cpu:latest
```

## 암호화된 개인 키

Python 및 셸 Uvicorn 런처에서는 개인 키가 암호화되어 있을 때 `SSL_KEYFILE_PASSWORD` 를 통해 암호를 제공하세요. 병렬 Gunicorn 런처는 해당 옵션을 지원하지 않으며, 진행 중인 런타임 강화 빌드는 시작 시 이를 거부합니다. 암호화된 키에는 Uvicorn을 사용하세요. 암호는 이미지에 포함하지 말고 비밀 저장소에 보관하세요.

## 상호 TLS

에 설명된 진행 중인 런타임 강화 빌드에서는 [보안 구성 마이그레이션](/deployment/ko/self-hosted/inference-server/configuration/security-migration.md#tls-client-certificates), `ENABLE_HTTPS=True` 와 `SSL_CA_CERTS` 를 마운트된 클라이언트 CA 번들로 설정하여 클라이언트 인증서를 요구하세요. 그러면 Python 및 셸 Uvicorn 런처와 병렬 Gunicorn 런처는 해당 CA가 서명한 유효한 인증서가 없는 클라이언트를 거부합니다.

이전 런처는 클라이언트 인증서를 요구하지 않고도 CA 번들을 로드할 수 있었습니다. 시행 강제 수정이 없는 빌드에서 접근 제어를 위해 이 설정만을 의존하지 마세요.

### 클라이언트 인증서로 연결

클라이언트의 인증서와 개인 키를 둘 다 제공하고, 서버를 해당 CA로 검증하세요:

```bash
curl --cacert server-ca.pem \
  --cert client.crt --key client.key \
  https://localhost:9001/healthz
```

mTLS가 활성화되면 API 키 인증에서 제외된 엔드포인트라도 애플리케이션, 상태 확인 프로브, 메트릭 스크래퍼 모두 클라이언트 인증서가 필요합니다. 이 경계를 신뢰하기 전에 클라이언트 인증서가 없는 요청이 실패하는지 확인하세요.

없이 HTTPS `SSL_CA_CERTS` 는 서버 전용 TLS를 유지합니다. 검토하세요 [서버 보안](/deployment/ko/self-hosted/inference-server/configuration/security.md) 네트워크 액세스 및 Workspace 인증에 대해
