Spec-Zone.ru › Apache HTTP Server

Форматы паролей

Сведения о форматах шифрования паролей, которые создаёт и распознаёт Apache.

Базовая аутентификация

Для паролей базовой аутентификации Apache распознаёт пять форматов. Обратите внимание, что не все форматы работают на каждой платформе:

bcrypt
"$2y$" + результат алгоритма crypt_blowfish. Подробное описание алгоритма см. в исходном файле APR crypt_blowfish.c.
MD5
"$apr1$" + результат специфичного для Apache алгоритма, использующего хеш MD5, вычисленный итеративно (1 000 раз) для различных комбинаций случайной 32-битной соли и пароля. Подробное описание алгоритма см. в исходном файле APR apr_md5.c.
SHA1
"{SHA}" + хеш SHA-1 пароля в кодировке Base64. Небезопасен.
CRYPT
Только Unix. Использует традиционную функцию Unix crypt(3) со случайно сгенерированной 32-битной солью (используются только 12 бит) и первыми 8 символами пароля. Небезопасен.
ОТКРЫТЫЙ ТЕКСТ (т. е. незашифрованный)
Только Windows и Netware. Небезопасен.

Создание значений с помощью htpasswd

bcrypt

$ htpasswd -nbB myName myPassword
myName:$2y$05$c4WoMPo3SXsafkva.HHa6uXQZWr7oboPiC2bT/r7q1BB8I2s0BRqC

MD5

$ htpasswd -nbm myName myPassword
myName:$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/

SHA1

$ htpasswd -nbs myName myPassword
myName:{SHA}VBPuJHI7uixaa6LQGWx4s+5GKNE=

CRYPT

$ htpasswd -nbd myName myPassword
myName:rqXexS6ZhobKA

Создание значений CRYPT и MD5 с помощью программы командной строки OpenSSL

OpenSSL поддерживает специфичный для Apache алгоритм MD5.

MD5

$ openssl passwd -apr1 myPassword
$apr1$qHDFfhPC$nITSVHgYbDAK1Y0acGRnY0

CRYPT

openssl passwd -crypt myPassword
qQ5vTYO3c8dsU

Проверка паролей CRYPT или MD5 с помощью программы командной строки OpenSSL

Соль пароля CRYPT — это первые два символа (преобразованные в двоичное значение). Чтобы проверить myPassword на соответствие rqXexS6ZhobKA

CRYPT

$ openssl passwd -crypt -salt rq myPassword
Warning: truncating password to 8 characters
rqXexS6ZhobKA

Обратите внимание: использование myPasswo вместо myPassword даст тот же результат, поскольку при обработке паролей CRYPT учитываются только первые 8 символов.

Соль пароля MD5 находится между $apr1$ и следующими $ (в виде двоичного значения в кодировке Base64 — не более 8 символов). Чтобы проверить myPassword на соответствие $apr1$r31.....$HqJZimcKQFAMYayBlzkrA/

MD5

$ openssl passwd -apr1 -salt r31..... myPassword
$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/

Поля паролей базы данных для mod_dbd

Вариант SHA1, вероятно, является наиболее полезным форматом для аутентификации DBD. Поскольку функции SHA1 и Base64 широко доступны, другое программное обеспечение может заполнять базу данных зашифрованными паролями, которые можно использовать для базовой аутентификации Apache.

Создание паролей базовой аутентификации Apache с вариантом SHA1 на разных языках:

PHP

'{SHA}' . base64_encode(sha1($password, TRUE))

Java

"{SHA}" + new sun.misc.BASE64Encoder().encode(java.security.MessageDigest.getInstance("SHA1").digest(password.getBytes()))

ColdFusion

"{SHA}" & ToBase64(BinaryDecode(Hash(password, "SHA1"), "Hex"))

Ruby

require 'digest/sha1'
require 'base64'
'{SHA}' + Base64.encode64(Digest::SHA1.digest(password))

C или C++

Use the APR function: apr_sha1_base64

Python

import base64
import hashlib
"{SHA}" + format(base64.b64encode(hashlib.sha1(password).digest()))

PostgreSQL (с установленными функциями contrib/pgcrypto)

'{SHA}'||encode(digest(password,'sha1'),'base64')

Аутентификация Digest

Для паролей аутентификации Digest Apache распознаёт один формат — MD5-хеш строки user:realm:password в виде 32-символьной строки шестнадцатеричных цифр. realm — это аргумент Authorization Realm директивы AuthName в httpd.conf.

Поля паролей базы данных для mod_dbd

Поскольку функция MD5 широко доступна, другое программное обеспечение может заполнять базу данных зашифрованными паролями, которые можно использовать для аутентификации Digest Apache.

Создание паролей аутентификации Digest Apache на разных языках:

PHP

md5($user . ':' . $realm . ':' .$password)

Java

byte b[] = java.security.MessageDigest.getInstance("MD5").digest( (user + ":" + realm + ":" + password ).getBytes());
java.math.BigInteger bi = new java.math.BigInteger(1, b);
String s = bi.toString(16);
while (s.length() < 32)
 s = "0" + s;  // String s is the encrypted password

ColdFusion

LCase(Hash( (user & ":" & realm & ":" & password) , "MD5"))

Ruby

require 'digest/md5'
Digest::MD5.hexdigest(user + ':' + realm + ':' + password)

PostgreSQL (с установленными функциями contrib/pgcrypto)

encode(digest( user || ':' || realm || ':' || password , 'md5'), 'hex')

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/misc/password_encryptions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API