Предварительно, я надеюсь, что вы на самом деле не сделали то, что показали. За исключением меток, все данные, используемые при получении ключа TLS, являются двоичными данными, которые не могут быть точно заданы в качестве аргумента для echo
команды оболочки или любой другой команды, кроме, возможно, встроенной версии, zsh
если вы отключаете экранирование, и, конечно, не могут быть «напечатаны» (даже вырезать и вставить) в буквальном аргументе с одинарными кавычками.
Если у вас есть данные в файлах, их можно использовать. Двоичные данные могут быть считаны из файлов и записаны в них - по крайней мере на платформах, поддерживаемых OpenSSL. Если у вас нет файлов (но есть каналы), вы можете обойти это, передав данные в шестнадцатеричном формате, за исключением того, -macopt hexkey:
что уже занимает шестнадцатеричный формат, используя либо подобную программу xxd -r
, либо printf
шестнадцатеричный гекс, образованный в escape-файлах, или echo
с помощью шестнадцатеричный гекс, преобразованный в непереносимые побеги, или хаки типа GNU sed s///e
, или более общую программу awk
или perl
, чтобы преобразовать гекс в двоичный файл для ввода в openssl
. И при необходимости аналогичные хаки для преобразования двоичного вывода в шестнадцатеричный, но dgst -mac hmac
могут выводить в шестнадцатеричном виде до тех пор, пока вы удалите blahblah=(sp)
из передней части.
Более существенно, что запуск первого выхода HMAC обратно через себя дает только блоки «A», которые вы затем пропускаете через другой слой HMAC, чтобы получить фактический вывод «P_hash». См. Https://crypto.stackexchange.com/questions/46549/tls-1-2-prf-with-hmac-sha256, который по сути является тем же вопросом с использованием тестового вектора, опубликованного на https://www.ietf.org/ mail-archive / web / tls / current / msg03416.html за исключением того, что я ответил на Java. Вот эквивалент командной строки OpenSSL:
$ echo $key; echo $lbsd # start from hex 9bbe436ba940f017b17652849a71db35 74657374206c6162656c a0ba9f936cda311827a6f796ffd5198c $ echo $lbsd | xxd -r -p >a0 $ openssl dgst -sha256 -mac hmac -macopt hexkey:$key <a0 -binary >a1 $ openssl dgst -sha256 -mac hmac -macopt hexkey:$key <a1 -binary >a2 $ openssl dgst -sha256 -mac hmac -macopt hexkey:$key <a2 -binary >a3 $ openssl dgst -sha256 -mac hmac -macopt hexkey:$key <a3 -binary >a4 $ cat a1 a0 | openssl dgst -sha256 -mac hmac -macopt hexkey:$key -binary >k1 $ cat a2 a0 | openssl dgst -sha256 -mac hmac -macopt hexkey:$key -binary >k2 $ cat a3 a0 | openssl dgst -sha256 -mac hmac -macopt hexkey:$key -binary >k3 $ cat a4 a0 | openssl dgst -sha256 -mac hmac -macopt hexkey:$key -binary >k4 $ cat k1 k2 k3 k4 | head -c100 | xxd 0000000: e3f2 29ba 727b e17b 8d12 2620 557c d453 ..).r{.{..& U|.S 0000010: c2aa b21d 07c3 d495 329b 52d4 e61e db5a ........2.R....Z 0000020: 6b30 1791 e90d 35c9 c9a4 6b4e 14ba f9af k0....5...kN.... 0000030: 0fa0 22f7 077d ef17 abfd 3797 c056 4bab .."..}....7..VK. 0000040: 4fbc 9166 6e9d ef9b 97fc e34f 7967 89ba O..fn......Oyg.. 0000050: a480 82d1 22ee 42c5 a72e 5a51 10ff f701 ....".B...ZQ.... 0000060: 8734 7b66 .4' | sed 's/\,/\n/g' \ | xargs -i sss_override user-add {} -g $(getent group AD-group-name \ | awk -F':' '')
Отлично сработало для нас в качестве обходного пути для ограничения группы NFS 16.