우분투 22.04는 openssl library 를 기본 3.0.2를 사용하는데
우분투 22.04에서 apt로 mariadb를 자동설치하면 openssl 디펜던시가 3.0.2에 걸려있는 mariadb binary 패키지가 설치되고
openssl 3.0을 사용하면 우분투 20.04에서 해결을 위해 security level을 강제로 낮추는 방식 으로 설정해도
윈도우에서 접속시 SEC_E_ALGORITHM_MISMATCH 오류를 피할수 없게된다.
mariadb말고 다른 어플에서는 openssl 3.0.9 이상에서는 알고리즘 미스매치 오류가 잡혔다는 글이 있어서
3.0.12 최신 라이브러리로 업데이트해주고 혹시나 싶어 mariadb를 소스 설치까지 해봤지만 안되는것 똑같다.
결론은 openssl 3.0과 윈도우 사이의 문제다.
해결을 위해서는 openssl 1.1.1f 를 사용하는 우분투 20.04용으로 build된 mariadb 최신서버 패키지를 설치하는수 밖에 없다
빌드만 openssl 1.1.1f용으로 된거고 최신 release된 mariadb를 사용하는건 똑같다.
1. 설치된 버전 확인
우선 현재 설치된 mariadb 서버의 binaray version과 version_ssl_library 를 확인했을때
바이너리 버전이 'ubu2204' 이고 version_ssl_library 가 'OpenSSL 3.0.2 15 Mar 2022' 인지
바이너리 버전이 'ubu2004' 이고 version_ssl_library 가 'OpenSSL 1.1.1f 31 Mar 2020' 인지 확인부터 해본다.
아래 1)처럼 ubu2004 버전이면 간단한 설정 을 통해 SEC_E_ALGORITHM_MISMATCH는 해결이 끝난다.
아래 2)처럼 ubu2204 버전이면 20.04용 바이너리를 선택해 다시 설치해주고 설정 을 하면 된다.
1) 20.04 바이너리 버전
MariaDB [(none)]> select version(); +-----------------------------------------+ | version() | +-----------------------------------------+ | 10.11.6-MariaDB-1:10.11.6+maria~ubu2004 | +-----------------------------------------+ 1 row in set (0.000 sec) MariaDB [(none)]> show global variables like '%ssl%'; +---------------------+----------------------------------+ | Variable_name | Value | +---------------------+----------------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /etc/mysql/certs/ca-cert.pem | | ssl_capath | | | ssl_cert | /etc/mysql/certs/server-cert.pem | | ssl_cipher | DEFAULT:@SECLEVEL=1 | | ssl_crl | | | ssl_crlpath | | | ssl_key | /etc/mysql/certs/server-key.pem | | version_ssl_library | OpenSSL 1.1.1f 31 Mar 2020 | +---------------------+----------------------------------+
2) 22.04 바이너리 버전
MariaDB [(none)]> select version(); +---------------------------------------------+ | version() | +---------------------------------------------+ | 10.11.6-MariaDB-1:10.11.6+maria~ubu2204-log | +---------------------------------------------+ 1 row in set (0.000 sec) MariaDB [(none)]> show global variables like '%ssl%'; +---------------------+----------------------------------+ | Variable_name | Value | +---------------------+----------------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /etc/mysql/certs/ca-cert.pem | | ssl_capath | | | ssl_cert | /etc/mysql/certs/server-cert.pem | | ssl_cipher | DEFAULT:@SECLEVEL=1 | | ssl_crl | | | ssl_crlpath | | | ssl_key | /etc/mysql/certs/server-key.pem | | version_ssl_library | OpenSSL 3.0.2 15 Mar 2022 | +---------------------+----------------------------------+ 10 rows in set (0.001 sec)
2. focal (20.04) 용 mariadb server 설치
1) 22.04 삭제
# apt remove mariadb-server mariadb-client
2) focal 용 mariadb repository에 추가 (다른 버전을 선택하고 싶다면 mariadb-10.11 부분을 바꾸세요)
# apt update # apt upgrade # apt install software-properties-common gnupg2 # apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc' # add-apt-repository 'deb [arch=amd64] http://archive.mariadb.org/mariadb-10.11/repo/ubuntu/ focal main'
3) 설치될 후보버전 확인
# apt policy mariadb-server mariadb-server: Installed: (none) Candidate: 1:10.11.6+maria~ubu2004 Version table: 1:10.11.6+maria~ubu2004 500 500 http://archive.mariadb.org/mariadb-10.11/repo/ubuntu focal/main amd64 Packages 100 /var/lib/dpkg/status 1:10.11.5+maria~ubu2004 500 500 http://archive.mariadb.org/mariadb-10.11/repo/ubuntu focal/main amd64 Packages 1:10.11.4+maria~ubu2004 500 500 http://archive.mariadb.org/mariadb-10.11/repo/ubuntu focal/main amd64 Packages 1:10.6.12-0ubuntu0.22.04.1 500 500 http://kr.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages 500 http://kr.archive.ubuntu.com/ubuntu jammy-security/universe amd64 Packages 1:10.6.7-2ubuntu1 500 500 http://kr.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
설치후보로 ubu2004 버전이 아닌 ubu2204버전이 표시된다면
/etc/apt/sources.list.d/ 내에 해당 주소의 list를 삭제해주면 candidate가 바뀝니다.
4) focal 용 mariadb의 의존 라이브러리 먼저 설치
4-1)
# apt install libreadline5
4-2) /lib/x86_64-linux-gnu/libssl.so.1.1 가 없다면
# wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.20_amd64.deb # dpkg -i libssl1.1_1.1.1f-1ubuntu2.20_amd64.deb
4-3) /lib/x86_64-linux-gnu/libcrypto.so.1.1 가 없다면
# wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libcrypto1.1-udeb_1.1.1f-1ubuntu2.20_amd64.udeb # dpkg -i libcrypto1.1-udeb_1.1.1f-1ubuntu2.20_amd64.udeb
5) focal용 mariadb 설치
# apt install mariadb-server
6) tls version 및 cipher 설정
윈도우에서 우분투 20.04 MariaDB 서버 SSL접속시 SEC_E_ALGORITHM_MISMATCH 오류
7) mariadb 로 접속 후 최종 버전확인
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 144 Server version: 10.11.6-MariaDB-1:10.11.6+maria~ubu2004-log mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> select version() -> ; +---------------------------------------------+ | version() | +---------------------------------------------+ | 10.11.6-MariaDB-1:10.11.6+maria~ubu2004-log | +---------------------------------------------+ 1 row in set (0.000 sec) MariaDB [(none)]> show global variables like '%ssl%'; +---------------------+----------------------------------+ | Variable_name | Value | +---------------------+----------------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /etc/mysql/certs/ca-cert.pem | | ssl_capath | | | ssl_cert | /etc/mysql/certs/server-cert.pem | | ssl_cipher | DEFAULT:@SECLEVEL=1 | | ssl_crl | | | ssl_crlpath | | | ssl_key | /etc/mysql/certs/server-key.pem | | version_ssl_library | OpenSSL 1.1.1f 31 Mar 2020 | +---------------------+----------------------------------+ 10 rows in set (0.001 sec) MariaDB [(none)]>