programing

SSL 연결은 mysql 클라이언트에서는 작동하지만 Perl DBI에서는 작동하지 않습니다.마리아DB

i4 2023. 9. 3. 12:10
반응형

SSL 연결은 mysql 클라이언트에서는 작동하지만 Perl DBI에서는 작동하지 않습니다.마리아DB

TLS를 사용하여 연결하기 위해 자체 서명 인증서가 설정된 MariaDB 서버가 있습니다.이는 해당 클라이언트와 연결할 때 작동합니다.

$ mysql -u xxxx -h xx.xx.xx.xx -p 
\s shows:
mysql  Ver 15.1 Distrib 10.1.37-MariaDB, for debian-linux-gnu (x86_64)     
SSL:   Cipher in use is DHE-RSA-AES256-SHA

.my.cnf에는 다음이 포함됩니다.

$ cat ~/.my.cnf 
[client]
ssl-cert=/---path-deleted---/client-cert.pem
ssl-key=/---path-deleted---/client-key.pem

문제:이러한 설정을 사용하여 Perl 스크립트에서 연결할 수 없습니다.SSL이 없으면 스크립트가 작동합니다.스크립트에서 SSL을 활성화하고 서버에서 SSL을 적용하면 다음과 같은 메시지가 나타납니다.

failed: SSL connection error: ASN: bad other signature confirmation

openssl로 인증서를 확인하면 다음과 같이 표시됩니다.

$ openssl verify ca-cert.pem client-cert.pem server-cert.pem 

error 18 at 0 depth lookup: self signed certificate

인증서는 실제로 자체 서명된 것이며, 저는 그렇게 유지하고 싶습니다.

"sladb_ssl_sl_sl_sl_sl_server_cert=0"을 사용하면 다음 메시지가 표시됩니다.

failed: SSL connection error: Enforcing SSL encryption is not supported without mariadb_ssl_verify_server_cert=1

Perl에서 TLS 연결이 작동하려면 무엇을 변경해야 합니까?

참조를 위해 커넥트 서브에 있는 코드 라인을 복사합니다.mysql_ssl=1 IIRC만을 사용하여 mysql(mariadb가 아님)이 있는 이전 시스템에서 작동하는 매우 유사한 코드:

$self->{dsn} = "DBI:MariaDB:database=$database;host=$db_host;mariadb_ssl=1;".
    "mariadb_ssl_verify_server_cert=1;".
    "mariadb_ssl_ca_file=/---path---/ca-key.pem;".
    "mariadb_ssl_client_key=/---path---/client-key.pem;".
    "mariadb_ssl_client_cert=/---path---/client-cert.pem";
$self->{dbh} = DBI->connect($self->{dsn}, $db_user, $db_passwd,
            {'RaiseError' => 1, 'PrintError' => 1, AutoCommit => 1});

DBI:mysql을 사용했지만 비슷한 문제가 있었습니다.SSL 인증서 CN에 지정된 대로 서버 이름이 아닌 연결 문자열에 IP 주소를 지정한 것이 문제였습니다.mysql 명령줄 클라이언트는 신경쓰지 않았지만 DBI:mysql은 신경씁니다.

인증서의 CN을 얻기 위해 https://serverfault.com/a/931652/243186 에 따라 openssl을 사용했습니다.

그런 다음 CN이 연결 중인 인터페이스의 IP와 일치하도록 /etc/hosts 파일에 항목을 추가해야 했습니다.

MySQL 서버 소유자가 연결할 수 있는 모든 가능한 서버 이름과 IP를 지정하는 SSL SAN 인증서를 생성하는 것이 대안이 될 수 있습니다.

언급URL : https://stackoverflow.com/questions/55189991/ssl-connection-works-with-mysql-client-but-not-perl-dbimariadb

반응형