MySQL에서 SSL 활성화


24

Ubuntu Server 12.04를 실행 중이며 MySQL에 대한 SSL 연결을 활성화하려고합니다.

OpenSSL을 사용하여 다음 키 / 인증서 파일을 생성했습니다.

  • ca-cert.pem
  • server-cert.pem
  • server-key.pem

에 저장 /etc/mysql한 다음 다음 줄을 추가했습니다 /etc/mysql/my.cnf.

ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

다음으로로 서버를 다시 시작했습니다 sudo service restart mysql.

그러나 이것은 SSL을 활성화하지 않는 것 같습니다. mysql 세션 내에서 :

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

내가 잃어버린 아이디어가 있습니까? 감사


2
멋진 스레드를 확인하십시오 . 아마도 도움이 될 것입니다.
SirCharlo

링크 SirCharlo에 감사하지만 해당 스레드에서 해결 된 문제는 내 상황에 적용되지 않는 것 같습니다.
방문자 93746

1
@SirCharlo가 언급 한 것은보고 싶은 곳입니다. 특히 의류 부분과 게시물 # 10 . Debian Squeeze 또는 이전 Ubuntu에서 생성 한 키는 정상적으로 작동합니다. 12.04에서 다시 생성하면 다시 실패합니다. MySQL 오류 로그도 참조하십시오.
gertvdijk

2
나는이 같은 질문을하고 그것에 몇 시간을 보냈지 만 @ user262116의 답변으로 해결되었습니다. 도움이된다면 그 대답을 받아들이시기 바랍니다.
elixenide

답변:


33

Ubuntu 12.04에는 이전 OpenSSL 0.9.8 버전과 약간 다른 기본값을 가진 OpenSSL 1.0.1이 제공됩니다.

무엇보다도 openssl req -newkey rsa:2048RSA 키를 생성하는 데 사용 하는 경우 PKCS # 8 형식의 키로 끝납니다 . PEM 형식으로 표현 된이 키들은보다 일반적인 -----BEGIN PRIVATE KEY-----헤더를 가지고 있으며 어떤 키 (RSA, DSA, EC) 키인지는 알려주지 않습니다.

이전에는 OpenSSL 0.9.8에서 키는 항상 PKCS # 1 형식 으로 PEM으로 표시되었으며 헤더는 -----BEGIN RSA PRIVATE KEY-----이었습니다.

이로 인해 다음과 같이 간단하게 머리글과 바닥 글을 변경할 수 없습니다.

-----BEGIN PRIVATE KEY-----

-----BEGIN RSA PRIVATE KEY-----`

그것은 같은 것이 아니며 작동하지 않습니다. 대신을 사용하여 키를 이전 형식으로 변환해야합니다 openssl rsa. 이처럼 :

openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem

Ubuntu 12.04의 MySQL (v5.5.35)은 yaSSL (v2.2.2)이라는 SSL 구현을 사용하고 있습니다. 키가 PKCS # 1 형식이어야하고 OpenSSL 1.0 이상에서 사용되는 PKCS # 8 형식을 지원하지 않습니다. 이 스레드의 다른 게시물에서 제안한 것처럼 단순히 헤더와 바닥 글을 변경하면 MySQL / yaSSL은 불평하지 않지만 연결할 수 없으며 대신 다음과 같은 오류가 발생합니다.

ERROR 2026 (HY000): SSL connection error: protocol version mismatch

Ubuntu 14.04 에는 OpenSSL 1.0.1f 및 새로운 설정이 포함되어 있습니다. 무엇보다도 이전 버전에서 사용되었던 SHA1 대신 SHA256 다이제스트를 사용하여 인증서를 생성합니다. 기본적으로 MySQL과 함께 번들로 제공된 yaSSL 버전은이를 지원하지 않습니다.

MySQL과 함께 사용할 인증서를 생성하는 경우 RSA 키가 기존 PKCS # 1 PEM 형식으로 변환되고 인증서가 SHA1 다이제스트를 사용하고 있는지 확인하십시오.

다음은 고유 한 CA, 서버 인증서 및 클라이언트 인증서를 생성하는 방법에 대한 예입니다.

# Generate a CA key and certificate with SHA1 digest
openssl genrsa 2048 > ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem

# Create server key and certficate with SHA1 digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -sha1 -req -in server-req.pem -days 730  -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
openssl rsa -in server-key.pem -out server-key.pem

# Create client key and certificate with SHA digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
openssl rsa -in client-key.pem -out client-key.pem

1
이 포스트는 나를 위해 날을 구했다! 환상적인 설명과 해결책.
generalopinion

'오류 2026 (HY000) : SSL 연결 오류 : ASN : 미래 날짜 이전'
Nitsan Baleli

불행히도, 여전히 ERROR 2026 (HY000): SSL connection error: protocol version mismatch오류가 발생했습니다 (OpenSSL 1.0.1f 사용). OpenSSL 1.0.1e로 전환했으며 위의 지침으로 작동했습니다.
Jarrett

2
이 답변은 놀랍습니다. 가능하다면 거대한 현상금을 수여 할 것입니다. 문제에 대한 훌륭한 설명.
elixenide

호드에 추가 할 또 다른 목소리. 인터넷이 문서화 된 MySQL 설정이 작동하지 않는 이유에 대한 해결책을 찾으려고 노력하고 있습니다.이 게시물의 하단 부분은 하루를 완전히 절약했습니다.
Steve Chambers

4

이것은 나를 도왔다 :

server-key.pem 파일의 머리글과 바닥 글은 다음과 같습니다.

-----BEGIN PRIVATE KEY-----
...
...
-----END PRIVATE KEY-----

그러나 다음과 같은 것이 필요합니다.

-----BEGIN RSA PRIVATE KEY-----
...
...
-----END RSA PRIVATE KEY-----

BSAIN RSA 개인 키 시작

로그를 보려면

sudo vim /var/log/mysql/error.log

이것이 도움이되기를 바랍니다.


나는 mysql 5.5.34와 함께 Ubunbtu 12.04에서 비슷한 문제를 겪었습니다. 여기서 pem 파일은 모두 읽을 수 있었고 여전히 같은 문제를 겪었습니다. 그러나이 답변은 소유자를 변경하는 것과 결합하여 트릭을 수행했습니다.
토미 안데르센

"RSA"를 수동으로 추가하지 마십시오. 이 오류는 표시되지 않지만 SSL은 작동하지 않습니다 ( " SSL 연결 오류 : 프로토콜 버전 불일치 " 라는 다른 오류가 발생 함 ). PKCS # 8에서 PKCS로 변환은 # 1 형식 대신 사용openssl rsa
rustyx을

3

나는 12.04에서 같은 문제를 겪었지만 실제로 문제를 일으키는 것은 어림없는 일이었습니다.

내가 발견 우분투 포럼에서 해결책을 이동, .pem파일을 /etc/mysql그것을 해결.

에서 의복 구성을 변경할 수도 있습니다 /etc/apparmor.d/usr.sbin.mysqld.


이것은 내가 가진 문제이기도했다
Jonathan

오타입니까? "pem files in in"대신 "pem files to"을 의미합니까? 너무
멍청

1

mysqld 프로세스를 실행하는 사용자에게 키 및 인증서 파일에 대한 읽기 권한이 있는지 확인하십시오. "mysql"계정을 사용하여 MySQL을 시작하면 다음을 수행 할 수 있습니다.

/etc/mysql$ chown mysql:mysql *.pem
/etc/mysql$ ls -l *.pem
-rwxrwx--- 1 mysql mysql 1631 2013-09-16 14:27 ca-cert.pem
-rwxrwx--- 1 mysql mysql 1281 2013-09-16 14:27 server-cert.pem
-rwxrwx--- 1 mysql mysql 1679 2013-09-16 14:27 server-key.pem

그렇지 않으면 오류 로그에 다음이 표시 될 수 있습니다.

SSL error: Unable to get certificate from '/etc/mysql/server-cert.pem'
130916 13:32:25 [Warning] Failed to setup SSL
130916 13:32:25 [Warning] SSL error: Unable to get certificate

큰. 그러나 어떻게 이것을 할 수 있습니까? 더 많은 정보를 제공하면서 시간을내어 자세히 설명해보십시오.
Lucio

이것은 server-key.pem 파일에 RSA를 추가하는 것과 결합되었습니다.
토미 앤더슨

1

우분투 16.04에서 나는 실행 mysql_ssl_rsa_setup했고 질문에서 have_ssl와 같이 show 변수의 파일을 볼 수 있었지만 have_openssl계속되었습니다 DISABLED.

해결책은 chown mysql.mysql /var/lib/mysql/*.pem입니다. 또는 mysql 사용자로 mysql_ssl_rsa_setup을 실행하면 올바른 권한으로 파일을 생성한다고 가정합니다.


질문은 4 년 2 개월입니다. OP가 답변에 응답하지 않을 것입니다.
WinEunuuchs2Unix 1

1
나는이 문제에 대한 최고의 Google 검색 결과 중 하나이며 읽은 것이 내 문제를 해결하는 데 도움이되지 않았기 때문에 미래 독자를위한 서비스로 이것을 간단하게 게시했습니다. Ubuntu 12.04 및 14.04의 세계 상태를 나타내는이 답변의 가치는 관련성을 잃고 있습니다.
Craig Wright

@ WinEunuuchs2Unix 아마도 OP는 아니지만 거의 2 년 후이 답변을 찾고 있습니다. 감사합니다, 크레이그!
Oldskool

0

개인 키 파일은 다음과 같아야합니다 (PKCS # 1 형식).

-----BEGIN RSA PRIVATE KEY-----
. . .
-----END RSA PRIVATE KEY-----

개인 키가 대신 다음과 같이 시작되는 경우 :

-----BEGIN PRIVATE KEY-----

(PKCS # 8 형식), 다음 과 같이 변환 해야 합니다.

openssl rsa -in server-key.pem -out server-key.pem

RSA형식이 다르기 때문에 "missing" " "태그를 수동으로 추가 하지 마십시오 .


-1

SSL 시작 옵션은 my.cnf 파일의 맨 위에 있어야합니다. 그렇지 않으면 무시 될 수 있습니다. SSL 변수가 무시되는 RHEL 6.4에서 mysql 5.6을 실행하는 데 문제가 있었고 my.cnf 파일의 끝에 변수가있었습니다. 파일 상단 ([mysqld] 바로 아래)으로 이동 한 다음 서버를 다시 시작했는데 모든 것이 정상이었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.