mysql로 ​​아파치 호환 비밀번호 생성

mysql로 ​​아파치 호환 비밀번호 생성

현재 오래된 웹서버를 마이그레이션하는 중입니다.

이전 서버는 mysql 테이블에 저장되고 mod_auth_mysql활성화된 사용자에게 기본 인증을 사용합니다.

비밀번호는 SELECT sha1('secret')다음에서 작동하는 sha1 기능의 apache 빌드에 저장되어 있지 않습니다.mod_auth_mysql

불행히도 mod_auth_mysql더 이상 지원되지 않습니다. 그래서 mod_authn_dbd대안으로 찾았습니다.

https://documentation.help/httpd-2.4-es/mod_authn_dbd.html

나는 이미 기본 인증과 고정 비밀번호로 로그인할 수 있는 지점까지 모든 것을 준비하고 실행했습니다.

<Location />
        AuthType Basic
        AuthName "Test"
        AuthBasicProvider dbd
        Require valid-user
        AuthDBDUserPWQuery "SELECT '{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=' FROM users WHERE user = %s"
</Location>

저는 sha1 해시만 사용자 테이블에 저장합니다. mod_auth_mysqlmysql() mod_authn_dbd에 의해 생성된 이전 허용 해시는 SELECT sha1('test')=a94a8fe5ccb19ba61c4c0873d391e987982fbbd3그렇지 않습니다.

에 따르면https://documentation.help/httpd-2.4-es/password_encryptions.html

SHA1 "{SHA}" + Base64로 인코딩된 SHA-1 비밀번호 다이제스트.

htpasswd에 의해 생성된 비밀번호가 허용됩니다.

htpasswd -bns user test
user:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

a94a8fe5ccb19ba61c4c0873d391e987982fbbd3이제 mysql 내부에서 이 값 (비밀번호 테스트를 위해 내 DB에 저장됨)을 qUqP5cyxm6YcTAhz05Hph5gvu9M=(비밀번호 테스트에 허용되는 값) 로 변환해야 합니다.

나는 이미 시도했다

SELECT to_base64(sha1('test')), to_base64(ucase(sha1('test'))), to_base64(lcase(sha1('test')));`

그러나 어느 것도 예상한 결과를 생성하지 않습니다.

기존 비밀번호 해시를 예상 형식으로 변환하거나 mod_authn_dbd기존 sha1 해시를 수락하도록 설득하는 방법이 필요합니다.

어떤 도움이라도 주시면 감사하겠습니다.

답변1

PHP 예제를 통해 자신의 질문에 답했습니다. PHP의 pack() 함수는 바이너리 데이터(SHA-1 해시가 일반적으로 사람이 읽을 수 있는 것으로 표시됨)의 16진수 표현을 원래의 바이너리(사람이 읽을 수 없는) 형식으로 변환합니다. 다음과 같이 생성한 SHA-1 해시의 이진 형식에 대해 to_base64()를 실행해야 합니다.

mysql> SELECT to_base64(unhex(sha1('test')));
+--------------------------------+
| to_base64(unhex(sha1('test'))) |
+--------------------------------+
| qUqP5cyxm6YcTAhz05Hph5gvu9M=   |
+--------------------------------+
1 row in set (0.00 sec)

이 경우 MySQL만으로 원하는 출력을 얻을 수 있습니다.

답변2

이것은 내 질문에 대한 직접적인 대답은 아니지만 해결 방법이 될 수 있습니다. 누군가가 동일한 문제에 직면한 블로그 게시물을 찾았습니다.

http://nileshbansal.blogspot.com/2008/06/password-encryption-mysql-apache-and.html

스크린샷

댓글에는 PHP로 htpasswd 호환 해시를 생성하는 방법에 대한 링크가 있습니다. htpasswd -bns명령 과 동일한 결과가 나오는 것을 확인했습니다.

function sha1_to_htpasswd ( $user, $sha )
{
return $user . ':{SHA}' . base64_encode( pack( "H" . strlen( $sha ), $sha ) );
}

아무도 더 나은 솔루션(php 없이 mysql만 사용)을 모른다면 비밀번호가 이런 방식으로 저장된 열을 사용하여 사용자 테이블을 확장할 것입니다. 약간 중복되지만 작동해야 합니다.

관련 정보