SSL에 대해 MySQL을 구성했지만 SSL을 여전히 사용할 수 없습니다 ..!


9

다음 스크립트를 사용하여 MySQL 용 SSL을 구성했습니다.

#!/bin/bash
#
mkdir -p /root/abc/ssl_certs
cd /root/abc/ssl_certs
#
echo "--> 1. Create CA cert, private key"
openssl genrsa 2048 > ca-key.pem

echo "--> 2. Create CA cert, certificate"
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

echo "--> 3. Create Server certificate, key"
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

echo "--> 4. Create Server certificate, cert"
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
echo ""
echo 
echo ""

echo "--> 5. Create client certificate, key. Use DIFFERENT common name then server!!!!"
echo ""
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
echo "6. Create client certificate, cert"
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
exit 0

다음과 같은 파일이 생성되었습니다.

ca-key.pem             ca-cert.pem
server-req.pem         server-key.pem       server-cert.pem
client-req.pem         client-key.pem       client-cert.pem

그런 다음 server-cert.pem과 client-cert.pem을 ca.pem으로 결합했습니다 (포스트에서 읽었습니다.)

MySQL에서 SSL 사용자를 만들었습니다.

GRANT ALL ON  *.* to sslsuer@hostname IDENTIFIED BY 'pwd' REQUIRE SSL;

다음으로 my.cnf에 다음을 추가했습니다.

[mysqld]
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

서버를 다시 시작한 후 mysql에 연결했지만 여전히 SSL을 사용하지 않았습니다.

mysql -u ssluser -p

SSL:                    Not in use

have_ssl 매개 변수조차도 여전히 사용 불가능으로 표시되었습니다. : :(

mysql> show variables like '%ssl%';
+---------------+---------------------------------------------+
| Variable_name | Value                                       |
+---------------+---------------------------------------------+
| have_openssl  | DISABLED                                    |
| have_ssl      | DISABLED                                    |
| ssl_ca        | /root/abc/ssl_certs/ca.pem          |
| ssl_capath    |                                             |
| ssl_cert      | /root/abc/ssl_certs/server-cert.pem |
| ssl_cipher    |                                             |
| ssl_key       | /root/abc/ssl_certs/server-key.pem  |
+---------------+---------------------------------------------+

단계를 놓쳤거나 무엇이 잘못 되었습니까?

누락 된 단계가있는 답변은 높이 평가됩니다 ..


어떤 버전의 OpenSSL을 사용하고 있습니까? 그리고 MySQL에서 오류 + 경고 로깅을 활성화하십시오. "비공개 키를 읽을 수 없습니다"오류 메시지가 표시되면 이 버그 에 어떤 영향을 미쳤을 수 있습니다. 최신 MySQL에서 새로운 키 + 인증서를 생성하여 최신 MySQL에서 사용하면 문제가 해결되었습니다.
gertvdijk

@ gertvdijk openssl-1.0.1c를 사용했습니다. 언급 된 오류에 대한 로그를 확인하고 있습니다.
Sunrays

가장 먼저. mysql이 ssl을 지원하는지 확인하십시오. mysql --ssl --help또한 my.cnf 파일에 그 수정 한 후 다시 시작 mysql을하는 것을 잊지 마세요
발렌틴 Bajrami에게

1
@ val0x00ff yes have_ssl 값이 비활성화 된 경우 MySQL은 ssl을 지원합니다.
Sunrays

mysql --ssl -u ssluser -p클라이언트에서 SSL을 강제로 시도 하십시오. 그 후에는 REQuIRE SSL이 작동하지 않는 이유를 알 수 있습니다.
johannes

답변:



3

이것을 확인하십시오 :

  • MySQL의 경고 출력 로깅 을 활성화 하고 실제 로그 항목을 읽습니다.
  • MySQL을 실행하는 사용자 ( mysql?)가 파일을 읽을 수 있도록 파일 시스템 권한을 확인하십시오 . 에서 /root나는 기본적으로 가지고 있다고 생각하지 않습니다.
  • Apparmor 또는 SELinux가 MySQL이 인증서 및 키를 읽지 못하게합니까?
  • 최근 OpenSSL과 MySQL의 비 호환성에 대한 불쾌한 버그가 발생할 수 있습니다. 우분투 12.04에서 MySQL이 읽을 수있는 키를 생성 할 수 없었지만 데비안 스퀴즈에서 생성 한 키는 정상적으로 작동합니다.



0

다음 과 같이 파일 의 [mysqld]섹션에 "ssl"을 추가하십시오.my.cnf

ssl
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

그런 다음 mysql을 다시 시작하고 다시 확인하십시오. 작동합니다.


0

이 문제는 CA 인증서, 서버 키 및 서버 인증서의 파일 경로를 올바르게 지정하지 않았기 때문이라고 생각합니다. 다음 형식이어야합니다.

ssl-ca=path/to/repo/mysql-directory/path/to/pem/cacert.pem
ssl-cert=path/to/repo/mysql-directory/path/to/pem/server-cert.pem
ssl-key=path/to/repo/mysql-directory/path/to/pem/server-key.pem

즉, 상대 '/ root /'경로가 아닌 mysql 설치 폴더 내의 인증서 및 키의 전체 파일 경로가 필요합니다.

내 설치의 예는 다음과 같습니다.

mysql> show variables like '%ssl%';
+---------------+----------------------------------------------------------+
| Variable_name | Value                                                    |
+---------------+----------------------------------------------------------+
| have_openssl  | YES                                                      |
| have_ssl      | YES                                                      |
| ssl_ca        | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/ca.pem         |
| ssl_capath    |                                                          |
| ssl_cert      | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-cert.pem|
| ssl_cipher    |                                                          |
| ssl_key       | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-key.pem |
+---------------+----------------------------------------------------------+

추가 정보는 다음 링크를 참조하십시오. https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-ssl.html


그의 경로는로 시작합니다. 즉 /, 상대 경로가 아닌 전체 경로입니다. /root/유닉스 시스템에서 루트 사용자의 홈 폴더입니다.
bobpaul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.