
ORA-28040: No matching authentication protocol
Oracle 데이터베이스에 접속 시 ORA-28040 오류가 발생하면, 이는 단순한 사용자 정보 문제라기보다는 클라이언트와 서버 간의 인증 프로토콜 불일치</strong에서 기인한 것입니다. 특히, 보안 정책 강화로 인해 서버 측에서 오래된 인증 프로토콜(TLS 1.0/1.1 등)을 비활성화하면서 클라이언트가 호환되지 않는 버전을 사용 중일 때 자주 발생합니다. 본 글에서는 이 오류가 어떤 맥락에서 발생하는지, 실무에서 접한 사례는 어떠한지, 그리고 이에 대한 체계적 해결 방안을 제시합니다.
1. ORA-28040 오류의 원인 개요
이 오류는 다음과 같은 환경에서 흔히 나타납니다:
- Oracle 서버가 보안 프로토콜(TLS 1.2 이상)만 허용하도록 설정됨
- 구형 Oracle 클라이언트(예: 10g, 11g)가 신규 인증 프로토콜을 지원하지 않음
- JDBC 또는 ODBC 드라이버가 서버와의 연결 시 호환되지 않는 방식으로 인증 시도
즉, 클라이언트는 Oracle 서버가 허용하지 않는 인증 메커니즘을 사용하여 접속을 시도하고, 서버는 이를 차단하면서 ORA-28040 오류를 반환하는 것입니다.
2. 주요 원인별 정리 및 대책
| 오류 원인 | 설명 | 대응 방안 |
|---|---|---|
| Oracle 클라이언트 버전 낮음 | 10g 또는 11g 사용 시 최신 인증 프로토콜 미지원 | Oracle 12c 이상 클라이언트 또는 드라이버로 교체 |
| JDBC 드라이버 버전 낮음 | ojdbc6 이전 버전은 TLS 1.2 미지원 | ojdbc8 이상으로 업그레이드 |
| 서버 설정 변경됨 | SQLNET.ALLOWED_LOGON_VERSION 설정 강화 | 서버 또는 클라이언트 측 설정 조정 필요 |
| TLS1.2만 허용됨 | 서버 보안 정책에 따라 하위 프로토콜 비활성화 | 클라이언트 TLS 버전 확인 및 설정 조정 |
3. 실무 사례: 공공기관의 JDBC 접속 오류
배경: 한 공공기관의 업무 시스템이 Oracle 19c DB로 마이그레이션된 이후, Java 기반 웹 애플리케이션에서 ORA-28040 오류가 발생함.
원인 분석:
- 해당 애플리케이션은
ojdbc6드라이버 사용 - Oracle 19c는 기본적으로 TLS 1.2 이상만 허용
해결 방법:
ojdbc8.jar로 교체sqlnet.ora에서SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12설정 확인- Java 8 이상에서 TLS 1.2가 기본 활성화되어 있으므로 별도 설정 불필요
이 조치 후 접속이 정상화되었으며, 시스템 전반의 보안 수준도 강화된 상태로 유지할 수 있었습니다.
4. 주요 설정 파일 항목 점검
sqlnet.ora 예시
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12
SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 12
SQLNET.ENCRYPTION_SERVER = required
SQLNET.CRYPTO_CHECKSUM_SERVER = required
위 설정은 서버 측에서 최소 12버전의 인증 프로토콜만 허용</strong하도록 구성된 상태입니다. 클라이언트가 이를 만족하지 않으면 인증 자체가 거부되어 ORA-28040 오류가 발생합니다.
5. 각 클라이언트/드라이버별 지원 버전 요약
| 클라이언트/드라이버 | 지원 TLS 버전 | 추천 사용 여부 |
|---|---|---|
| Oracle 10g Client | TLS 1.0 | 불가 (교체 필요) |
| Oracle 11g Client | TLS 1.0 / 일부 1.1 | 권장하지 않음 |
| Oracle 12c 이상 Client | TLS 1.2 | 사용 권장 |
| ojdbc6.jar | TLS 1.0 | 교체 필수 |
| ojdbc8.jar | TLS 1.2 | 사용 권장 |
6. 실전 해결 절차 요약
- 사용 중인 클라이언트 또는 드라이버 버전 확인
- sqlnet.ora 또는 listener.ora의 보안 설정 확인
- 최신 JDBC 드라이버로 교체
- 클라이언트 TLS 설정 및 Java 버전 확인
- 서버 보안정책에 맞춰 클라이언트 재설정
이러한 절차를 통해 대부분의 ORA-28040 오류는 해결 가능합니다. 특히 배포 자동화 또는 클라우드 환경에서는 버전 관리를 철저히 하는 것이 중요합니다.
7. 고급 팁: Java TLS 버전 명시
Java 기반 애플리케이션에서 TLS 버전을 명시적으로 설정하고자 할 경우 다음과 같이 설정할 수 있습니다.
-Dhttps.protocols=TLSv1.2
이는 JVM 레벨에서 TLS 버전을 지정하여, 일부 보안 우회 오류 또는 핸드셰이크 문제를 방지할 수 있습니다.
8. 결론
ORA-28040 오류는 단순히 “접속이 안 되는” 문제가 아니라, 기업 시스템의 보안 정책과 기술적 호환성 사이의 충돌로 인해 발생합니다. 따라서 단기적인 해결을 넘어서 드라이버 일관성 확보, TLS 정책 숙지, 서버 클라이언트 간 보안 조율이 장기적으로 필요한 요소입니다. 특히 디지털 전환이 가속화되는 환경에서, 신뢰할 수 있는 암호화 통신 기반을 유지하면서도 안정적인 시스템 운용을 위해 ORA-28040 오류는 사전에 점검하고 대비해야 할 핵심 포인트라 할 수 있습니다.
출처
- Oracle® Database Net Services Reference 19c
- Oracle Metalink Doc ID 2384298.1
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] ORA-02292 오류 완전 정복 : 자식 테이블 참조로 인한 삭제 실패의 모든 것 (0) | 2025.07.28 |
|---|---|
| [ORACLE] ORA-00020 오류 해결 가이드 : 세션 수 초과의 원인과 진단 전략 (0) | 2025.07.28 |
| [ORACLE] ORA-02291 오류 해결 가이드: 무결성 제약 조건 위반의 진짜 원인과 실전 대응 (0) | 2025.07.28 |
| [ORACLE] ORA-12154 오류 해결 : TNS 설정부터 실전 점검까지 (0) | 2025.07.28 |
| [ORACLE] ORA-02019 : 오류 해결 가이드 - 실무에서 마주치는 복병 (0) | 2025.07.27 |