6.3.8.4 SHA-256 인증 플러그인
MySQL 5.6.6의 시점에서, MySQL에서 사용자 계정의 암호로 SHA-256 해시가 구현 된 인증 플러그인이 제공되고 있습니다.
sha256_password
플러그인에서 인증하는 계정을 사용하여 서버에 연결하려면이 섹션의 뒷부분에서 설명하도록 SSL 연결 또는 RSA를 사용하여 암호를 암호화하는 간단한 연결을 사용할 필요가 있습니다. 두 방법 모두 sha256_password
플러그인을 사용하려면 SSL 기능을 사용하여 MySQL을 구축해야합니다. 섹션 6.3.10 "안전한 연결을위한 SSL 사용" 을 참조하십시오.
다음 표에는 서버 측과 클라이언트 측의 플러그인 이름을 나타냅니다.
표 6.10 MySQL SHA-256 인증 플러그인
서버 측의 플러그인 이름 | sha256_password |
클라이언트 플러그인 이름 | sha256_password |
라이브러리 오브젝트 파일 이름 | 없음 (플러그인은 내장 된) |
서버 측의 sha256_password
플러그인은 서버에 내장되어 있기 때문에 명시 적으로로드 할 필요는없고, 언로드하고 비활성화 할 수 없습니다. 마찬가지로 클라이언트는 클라이언트 플러그인의 위치를 지정해야합니다.
SHA-256 암호 해시를 사용하는 계정을 설정하려면 다음 단계를 사용합니다.
계정을 만들고
sha256_password
플러그인을 사용하여 인증하도록 지정합니다.CREATE USER 'sha256user'@ 'localhost'IDENTIFIED WITH sha256_password;
PASSWORD ()
함수에서 암호 문자열의 SHA-256 해시를 사용되도록old_passwords
시스템 변수를 2로 설정하고 계정 암호를 설정합니다.SET old_passwords = 2; SET PASSWORD FOR 'sha256user'@ 'localhost'= PASSWORD ( 'Sh @ 256Pa33');
또는 sha256_password
에 설정된 기본 인증 플러그인을 사용하여 서버를 시작합니다. 예를 들어, 서버 옵션 파일에 다음 행을 삽입합니다.
[mysqld] default-authentication-plugin = sha256_password
그러면 새 계정에 sha256_password
플러그인이 기본적으로 사용되며 old_passwords
가 2로 설정됩니다. 그 결과, 계정 생성시 CREATE USER
문 IDENTIFIED BY
절을 사용하여 암호를 설정할 수 있습니다.
mysql> CREATE USER 'sha256user2'@'localhost' IDENTIFIED BY 'Sh@256Pa33';
Query OK, 0 rows affected (0.06 sec)
이 경우 서버는 sha256_password
플러그인을 계정에 할당 SHA-256을 사용하여 암호를 암호화합니다. (또 하나의 결과로 sha256_password
과는 다른 인증 플러그인을 사용하는 계정을 생성하려면 CREATE USER
문 IDENTIFIED BY
절을 사용하여 플러그인을 지정 플러그인에 old_passwords
을 적절하게 설정 후 SET PASSWORD
를 사용하여 계정에 대한 암호를 설정해야합니다.)
old_passwords
및 PASSWORD()
에 대한 자세한 내용은 섹션 5.1.4 "서버 시스템 변수" 및 섹션 12.13 "암호화 함수와 압축 함수" 를 참조하십시오.
sha256_password
플러그인을 사용하여 인증하는 모든 계정의 암호를 변경하려면 SET PASSWORD
를 사용하기 전에 old_passwords
값이 2로 설정되어 있는지 확인합니다. old_passwords
의 값이 2 이외되어 있으면 암호를 설정하려고하면 오류가 발생합니다.
mysql>SET old_passwords = 0;
mysql>SET PASSWORD FOR 'sha256user'@'localhost' = PASSWORD('NewSh@256Pa33');
ERROR 1827 (HY000) : The password hash does not have the expected format. Check if the correct password algorithm is being used with the PASSWORD () function.
SHA-256 암호를 사용하는 mysql.user
테이블의 계정은 plugin
열에서 'sha256_password'
및 authentication_string
컬럼의 SHA-256 암호 해시를 포함한 행으로 확인할 수 있습니다.
MySQL은 yaSSL과 OpenSSL 중 하나를 사용하여 구축 할 수 sha256_password
플러그인은 패키지 중 하나를 사용하여 구축 된 메일에서 작동합니다. 기본값은 yaSSL를 사용하는 방법입니다. 대신에 OpenSSL을 사용하여 MySQL이 구축되어있는 경우 RSA 암호화가 사용 가능하며, 다음 목록과 같은 추가 기능이 sha256_password
에 구현됩니다. (이 기능을 사용하려면이 섹션의 뒷부분에 나와있는 RSA 구성 단계를 수행해야합니다.)
나중에 설명하도록 클라이언트 연결 과정에서 RSA 암호화를 사용하면 클라이언트가 서버에 암호를 보낼 수 있습니다.
서버는
sha256_password_private_key_path
과sha256_password_public_key_path
의 2 개의 추가 시스템 변수를 공개합니다. 이것은 서버 시작시 데이터베이스 관리자가이를 RSA 비밀 키와 공개 키 파일의 이름으로 설정하는 데 사용됩니다.서버는 RSA 공개 키의 값을 나타내는 상태 변수
Rsa_public_key
을 공개합니다.mysql 및 mysqltest 클라이언트 프로그램은 RSA 공개 키 파일을 명시 적으로 지정하기위한
--server-public-key-path
옵션을 지원합니다. (이 옵션은--server-public-key
라는 이름으로 MySQL 5.6.6에 추가되었습니다하지만 5.6.7에서--server-public-key-path
로 이름이 변경되었습니다.)
sha256_password
플러그인을 사용하는 클라이언트는 서버에 연결할 때 암호가 일반 텍스트로 공개되지 않습니다. 암호 전송이 어떻게 발생하는지는 SSL 연결이 사용되는지 여부와 RSA 암호화가 사용 가능한지 여부에 따라 다릅니다.
SSL 연결을 사용하는 경우에는 암호가 일반 텍스트로 전송되지만 연결은 SSL을 사용하여 암호화되므로 들여다 볼 수는 없습니다.
SSL 연결은 사용되지 않지만, RSA 암호화가 사용 가능한 경우, 암호는 암호화되지 않은 연결에 전송됩니다. 그러나 암호는 들여다 볼 수 없도록 RSA 암호화됩니다. 서버가 암호를 수신하면 그것을 해독합니다. 반복 공격을 방지하기 위해 스크램블 암호화에 사용됩니다.
SSL 연결이 사용되지 않고 RSA 암호화를 사용할 수없는 경우에는 암호가 일반 텍스트로 공개되지 않고 보낼 수 없기 때문에
sha256_password
플러그인에 의한 연결 시도가 실패합니다.
이미 설명했듯이, RSA 암호 암호화는 OpenSSL을 사용하여 MySQL이 구축 된 경우에만 사용할 수 있습니다. yaSSL를 사용하여 MySQL 배포를 구축했다는 것은 클라이언트가 SSL 연결을 사용하여 서버에 액세스하는 데에만 SHA-256 암호를 사용할 수 있음을 의미합니다. SSL을 사용하여 서버에 연결하는 방법은 섹션 6.3.10 "안전한 연결을위한 SSL 사용" 을 참조하십시오.
다음 단계에서는 MySQL이 OpenSSL을 사용하여 구축 된 가정하여 클라이언트 연결 과정에서 암호 RSA 암호화를 활성화하는 방법을 설명합니다.
RSA 비밀 키 및 공개 키 파일을 만듭니다. MySQL 서버를 실행하는 데 사용되는 시스템 계정에 로그인하고있는 동안 다음 명령을 실행합니다. 그러면 파일은 그 계정이 소유됩니다.
openssl genrsa -out mykey.pem 1024 openssl rsa -in mykey.pem -pubout -out mykey.pub
이 명령은 1024 비트 키가 생성됩니다. 더 강력한 키를 만들려면 2048 같은 큰 값을 사용합니다.
키 파일의 액세스 모드를 설정합니다. 비밀 키는 서버에서만 읽을 수해야합니다. 한편, 공개 키는 클라이언트 사용자에게 무료로 배포 할 수 있습니다.
chmod 400 mykey.pem chmod 444 mykey.pub
서버 옵션 파일에서 키 파일의 이름을 사용하여 적절한 시스템 변수를 구성합니다. 서버의 데이터 디렉토리에 파일을 배치하려면 전체 경로 이름을 지정할 필요가 없습니다.
[mysqld] sha256_password_private_key_path = mykey.pem sha256_password_public_key_path = mykey.pub
파일이 데이터 디렉토리에 없거나 시스템 변수의 값으로 그 위치를 명시 적으로 지정하는 경우 전체 경로 이름을 사용합니다.
[mysqld] sha256_password_private_key_path = / usr / local / mysql / mykey.pem sha256_password_public_key_path = / usr / local / mysql / mykey.pub
서버를 다시 시작하고, 거기에 연결하고
Rsa_public_key
상태 변수의 값을 확인합니다. 값은 여기에 설명 된 것과 다르지만 하늘 이외를 지정하도록하십시오.mysql>
SHOW STATUS LIKE 'Rsa_public_key'\G
*************************** 1. row ******************** ******* Variable_name : Rsa_public_key Value : ----- BEGIN PUBLIC KEY ----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDO9nRUDd + KvSZgY7cNBZMNpwX6 MvE1PbJFXO7u18nJ9lwc99Du / E7lw6CVXw7VKrXPeHbVQUzGyUNkf45Nz / ckaaJa aLgJOBCIDmNVnyU54OT / 1lcs2xiyfaDMe8fCJ64ZwTnKbY2gkt1IMjUAB5Ogd5kJ g8aV7EtKwyhHb0c30QIDAQAB ----- END PUBLIC KEY -----값이 비어 있으면 키 파일에 대한 몇 가지 문제가 서버에서 발견되고 있습니다. 오류 로그를 확인하고 진단 정보를 확인하십시오.
서버에 RSA 키 파일이 구성되면 클라이언트는 그 파일을 사용하여 sha256_password
플러그인에서 인증하는 계정을 사용하여 서버에 연결할 수 있습니다. 이미 설명했듯이 이러한 계정은 SSL 연결 (이 경우 RSA가 사용되지 않습니다) 또는 RSA를 사용하여 암호를 암호화하는 간단한 연결을 사용할 수 있습니다. 다음의 설명은 SSL이 사용되지 않는 것이 전제가되고 있습니다. 서버에 연결하기 위해 클라이언트에서 특별한 준비를 할 필요가 없습니다. 예 :
shell>mysql -u sha256user -p
Enter password :Sh@256Pa33
sha256user
로 연결을 시도하는 경우, 서버는 sha256_password
적절한 인증 플러그인하다고 판단하고 그것을 호출합니다. 연결에 SSL을 사용하지 않기 때문에 RSA 암호화를 사용하여 암호를 전송해야 할 플러그인에 의해 감지됩니다. RSA 공개 키를 클라이언트로 전송되고,이 키를 사용하여 암호를 암호화 된 결과를 서버에 반환됩니다. 이 플러그인은 서버 측의 RSA 키를 사용하여 암호를 해독하고 암호가 올바른지 여부에 따라 연결을 승인 또는 거부합니다.
서버는 필요에 따라 공개 키를 클라이언트로 전송되지만 클라이언트 호스트에서 RSA 공개 키의 복사본이 사용 가능한 경우, 클라이언트는 그 키를 사용하여 클라이언트 / 서버 프로토콜에 왕복 저장할 수 있습니다.
shell> mysql -u sha256user -p --server-public-key-path= file_name
--server-public-key-path
옵션으로 지정된 파일의 공개 키 값은 sha256_password_public_key_path
시스템 변수에서 지정된 서버 측 파일의 키 값과 동일하게하십시오. 키 파일에 유효한 공개 키 값이 포함되어 있지만, 그 값이 잘못된 경우 액세스 거부 오류가 발생합니다. 키 파일에 유효한 공개 키가 포함되지 않은 경우 해당 키를 클라이언트 프로그램에서 사용할 수 없습니다. 이 경우 서버는 --server-public-key-path
옵션이 지정된 경우와 마찬가지로 클라이언트에 공개 키를 전송합니다.
클라이언트 사용자는 다음의 두 가지 방법에서 RSA 공개 키를 얻을 수 있습니다.
데이터베이스 관리자는 공개 키 파일의 사본을 제공 할 수 있습니다.
기타 방법으로 서버에 연결된 클라이언트 사용자는
SHOW STATUS LIKE 'Rsa_public_key'
문을 사용하여 반환 된 키 값을 파일에 저장할 수 있습니다.