mTLS with Axum in Rust – Secure APIs Both Ways | mTLS
- MTLS는 TLS 프로토콜의 보안을 강화하여 양방향 인증 및 암호화를 구현합니다. 🤝
- 클라이언트와 서버는 핸드셰이크 과정에서 인증서를 공유하고, 서버는 클라이언트 인증서를 신뢰 기관에 대해 검증합니다. 🛡️
- 인증서가 유효한 경우에만 연결이 설정되고 데이터가 암호화되어 전송되며, 유효하지 않은 경우 연결이 종료됩니다. 🚫
- OpenSSL을 사용하여 클라이언트 및 서버 측 인증서를 생성하고 서명하는 스크립트를 활용할 수 있습니다. ✍️
- Rust에서 MTLS를 구현하기 위해 axum, tokio, rustls, rustls-pemfile 등의 의존성을 추가합니다. ⚙️
- CA 인증서, 서버 인증서, 서버 키를 읽어 MTLS를 설정하고 클라이언트 인증서를 검증합니다. 🔑
- 루트 인증서 저장소를 생성하여 CA의 모든 인증서를 추가하고, 클라이언트 인증서 검증기를 빌드합니다. 🗄️
- 클라이언트 인증서 인증을 요구하고 서버 인증서와 키를 설정하여 서버 구성을 빌드합니다. ⚙️
- axum 서버를 설정하고, 헬스 체크 엔드포인트를 추가하여 MTLS 클라이언트로부터의 요청을 처리합니다. 🩺
- RustlsConfig를 사용하여 서버를 바인딩하고, HTTPS에서 서버를 실행하여 클라이언트 인증서를 검증합니다. 🔗
- 클라이언트 인증서와 키를 사용하여 서버에 요청을 보내 MTLS 연결을 테스트합니다. 🧪
- 유효한 인증서가 없으면 연결이 거부되고, 유효한 인증서를 사용하면 성공적으로 연결됩니다. ✅