hmac: Fonctions HMAC pour nginx-module-lua et LuaJIT
Installation
Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.
CentOS/RHEL 7 ou Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-hmac
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-hmac
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que le nginx-module-lua est installé.
Ce document décrit lua-resty-hmac v0.6 publiée le 31 mai 2023.
Cette bibliothèque nécessite une version d'nginx avec OpenSSL, le module ngx_lua, et LuaJIT 2.0.
Synopsis
# nginx.conf:
server {
location = /test {
content_by_lua_file conf/test.lua;
}
}
-- conf/test.lua:
local hmac = require "resty.hmac"
local hmac_sha1 = hmac:new("secret_key", hmac.ALGOS.SHA1)
if not hmac_sha1 then
ngx.say("échec de la création de l'objet hmac_sha1")
return
end
local ok = hmac_sha1:update("he")
if not ok then
ngx.say("échec de l'ajout de données")
return
end
ok = hmac_sha1:update("llo")
if not ok then
ngx.say("échec de l'ajout de données")
return
end
local mac = hmac_sha1:final() -- mac binaire
local str = require "resty.string"
ngx.say("hmac_sha1: ", str.to_hex(mac))
-- sortie : "hmac_sha1: aee4b890b574ea8fa4f6a66aed96c3e590e5925a"
-- n'oubliez pas de réinitialiser après final !
if not hmac_sha1:reset() then
ngx.say("échec de la réinitialisation de hmac_sha1")
return
end
-- version courte
ngx.say("hmac_sha1: ", hmac_sha1:final("world", true))
-- sortie : "hmac_sha1: 4e9538f1efbe565c522acfb72fce6092ea6b15e0"
Méthodes
Pour charger cette bibliothèque,
- vous devez spécifier le chemin de cette bibliothèque dans la directive lua_package_path de ngx_lua. Par exemple,
lua_package_path "/path/to/lua-resty-hmac/lib/?.lua;;";. - vous utilisez
requirepour charger la bibliothèque dans une variable Lua locale :
local hmac = require "resty.hmac"
new
syntax: local hmac_sha256 = hmac:new(key [, hash_algorithm])
Crée une nouvelle instance hmac. En cas d'échec, retourne nil.
L'argument key spécifie la clé à utiliser lors du calcul du code d'authentification de message (MAC).
key est une chaîne Lua qui peut contenir des caractères imprimables ou des données binaires.
L'argument hash_algorithm spécifie quel algorithme de hachage utiliser (hmac.ALGOS.MD5, hmac.ALGOS.SHA1, hmac.ALGOS.SHA256, hmac.ALGOS.SHA512).
La valeur par défaut est hmac.ALGOS.MD5.
update
syntax: hmac_sha256:update(data)
Met à jour le calcul du MAC pour inclure de nouvelles données. En cas d'échec, retourne false.
L'argument data spécifie les données supplémentaires à inclure dans le MAC.
data est une chaîne Lua qui peut contenir des caractères imprimables ou des données binaires.
final
syntax: local mac = hmac_sha256:final([data, output_hex])
Finalise le calcul du MAC et retourne la valeur finale du MAC. En cas d'échec, retourne nil.
Lorsque output_hex n'est pas true, retourne une chaîne Lua contenant le MAC brut et binaire. Lorsque output_hex est true, retourne une chaîne Lua contenant la représentation hexadécimale du MAC.
L'argument data spécifie les données supplémentaires à inclure dans le MAC avant de finaliser le calcul.
La valeur par défaut est nil.
L'argument output_hex spécifie si le MAC doit être retourné en hexadécimal ou en binaire. Si true, le MAC sera retourné en hexadécimal.
La valeur par défaut est false.
reset
syntax: hmac_sha256:reset()
Réinitialise le contexte interne hmac afin qu'il puisse être réutilisé pour calculer un nouveau MAC. En cas d'échec, retourne false.
Si réussi, la key et hash_algorithm restent les mêmes mais toutes les autres informations sont effacées.
Cela DOIT être appelé après hmac_sha256:final() afin de calculer un nouveau MAC en utilisant la même instance hmac.
Prérequis
- LuaJIT 2.0+
- module ngx_lua
- lua-resty-string 0.8+
- OpenSSL 1.0.0+
Voir aussi
- le module ngx_lua : http://wiki.nginx.org/HttpLuaModule
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-hmac.