MariaDB 5.5에서 와일드카드 서버 인증서의 유효성을 검사할 때 "SSL 인증서 확인에 실패했습니다"

MariaDB 5.5에서 와일드카드 서버 인증서의 유효성을 검사할 때 "SSL 인증서 확인에 실패했습니다"

유지 관리 오버헤드를 줄이고 보안을 향상시키기 위해 자체 서명된 인증서 사용에서 잘 알려진 CA의 와일드카드 인증서 사용으로 전환하려고 노력해 왔습니다. 이 인증서는 몇 달 동안 테스트 서버에서 사용되었습니다. 설정은 잘 작동하며 다음을 수행할 수 있습니다(도메인 이름 익명화).

mysql --host=host.example-dot-com-equivalent-for.co.uk --user=query_user --password --ssl

비밀번호를 입력하면 연결이 성공합니다. 그런데 실제로 하려고 보니까확인하다인증서 일반 이름다음과 같이 실패합니다.

$ mysql --host=host.example-dot-com-equivalent-for.co.uk --user=query_user --password --ssl --ssl-verify-server-cert
ERROR 2026 (HY000): SSL connection error: SSL certificate validation failure

cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_SSL=yes클라이언트를 사용하여 MariaDB 5.5를 컴파일하고 실행한 후 --debug다음과 같은 추적 로그가 표시됩니다(삭제됨).

mysql_real_connect: info: Connecting
mysql_real_connect: info: net->vio: 0x0  protocol: 0
mysql_real_connect: info: Server name: 'host.example-dot-com-equivalent-for.co.uk'.  TCP sock: 3306
mysql_real_connect: info: IP 'client'
mysql_real_connect: info: IPV6 getaddrinfo host.example-dot-com-equivalent-for.co.uk
mysql_real_connect: info: Try connect on all addresses for host.
mysql_real_connect: info: Create socket, family: 2  type: 1  proto: 6
mysql_real_connect: info: Connect socket
mysql_real_connect: info: End of connect attempts, sock: 4  status: 0  error: 0
mysql_real_connect: info: net->vio: 0x263c540
mysql_real_connect: info: Read first packet.
mysql_real_connect: info: mysql protocol version 10, server=10
get_charsets_dir: info: charsets dir: '/usr/local/mysql/share/charsets/'
my_stat: error: Got errno: 2 from stat
run_plugin_auth: info: using plugin mysql_native_password
native_password_auth_client: info: no password
native_password_auth_client: info: IO layer change in progress...
ssl_do: info: ssl: 0x2823e50 timeout: 0
ssl_do: info: SSL connection succeeded
ssl_do: info: Using cipher: 'AES256-GCM-SHA384'
ssl_do: info: Peer certificate:
ssl_do: info:    subject: '/OU=Domain Control Validated/OU=Gandi Standard Wildcard SSL/CN=*.example-dot-com-equivalent-for.co.uk'
ssl_do: info:    issuer: '/C=FR/ST=Paris/L=Paris/O=Gandi/CN=Gandi Standard SSL CA 2'
ssl_do: info: no shared ciphers!
native_password_auth_client: info: IO layer change done!
ssl_verify_server_cert: info: Server hostname in cert: *.example-dot-com-equivalent-for.co.uk
run_plugin_auth: info: authenticate_user returned CR_ERROR
run_plugin_auth: info: res=0
mysql_real_connect: error: message: 2026/HY000 (SSL connection error: SSL certificate validation failure)
end_server: info: Net:
main: info: Shutting down: infoflag: 3  print_info: 1

Server name값과 일치하는 값 에 특히 주의하세요 CN.

인증서가 지정된 호스트 이름에 대해 유효하고 만료되지 않았는지 확인했습니다 openssl s_client -connect host.example-dot-com-equivalent-for.co.uk:443 -verify_return_error < /dev/null. "X509v3 주체 대체 이름" 필드에는 "DNS:*.example-dot-com-equivalent-for.co.uk, DNS:example-dot-com-equivalent-for.co.uk"가 포함되어 있습니다.

전체 인증서 체인은 ssl-cert아래와 같이 서버 구성이 가리키는 파일 에 있습니다.다른 곳에서도 추천. "USERTrust RSA 인증 기관"은 클라이언트의 /etc/pki/tls/certs/ca-bundle.crt 및 /etc/pki/tls/certs/ca-bundle.trust.crt에 있습니다. --ssl-ca=/etc/pki/tls/certs/ca-bundle.crt명령에 추가를 시도했지만 아무 것도 변경되지 않았습니다.

질문은 다음과 같이 끝납니다.MySQL/MariaDB 클라이언트는 와일드카드 인증서를 지원합니까? 그렇다면 연결에 문제가 있는 걸까요?

원래 고객:

$ mysql --version
mysql  Ver 15.1 Distrib 10.1.21-MariaDB, for Linux (x86_64) using readline 5.1

디버그 클라이언트:

$ ./client/mysql --version
./client/mysql  Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1

섬기는 사람:

# rpm -q mariadb
mariadb-5.5.52-1.el7.x86_64

클라이언트가 아닌 SSL 라이브러리에 문제가 있을 가능성이 높으므로 dba.SE가 아닌 unix.SE에 게시하세요.

답변1

MariaDB 클라이언트 라이브러리는 와일드카드 인증서를 지원하지 않습니다.마리아DB 10.1.23.

Percona-Server의 클라이언트 라이브러리는 이제 와일드카드를 지원합니다.페르코나 서버 5.7.18-16그리고페르코나 서버 5.6.36-82.1

이 기능을 지원하는 MariaDB 및 Percona-Server 클라이언트 라이브러리의 경우 기본 x509_check_host기능을 지원하려면 OpenSSL 1.0.2+도 필요합니다.

5.7.22 및 8.0.11부터 업스트림 MySQL 클라이언트는 와일드카드 인증서를 지원하지 않습니다.

이는 libmysqlclient.so(libperconaserverclient.so) 기반 클라이언트에만 적용됩니다. mysql C API(예: JDBC, Go 등)를 래핑하지 않는 다른 커넥터에 대한 SSL 와일드카드 지원은 구현에 따라 다릅니다.

관련 정보