Как установить пароль HP 802.1x для принтера с помощью PowerShell через SNMP? - PullRequest
0 голосов
/ 05 июня 2019

Мне удалось успешно настроить многие параметры принтера HP dot1x с помощью PowerShell через SNMP;Однако я не уверен, как справиться с установкой пароля, используемого для PEAP.Похоже, вам нужно взять открытый ключ, используемый принтером, и использовать его для шифрования пароля, который вы отправляете обратно на принтер.Открытый ключ может быть получен через SNMP следующим образом:

$text = (.\snmpget.exe -v2c -c public -Oq x.x.x.x .1.3.6.1.4.1.11.2.4.3.20.4.0)

Я использую snmpget (Net-SNMP), поскольку опция PS-native (через olePrn.OleSNMP) усекает возвращаемое значение.Во всяком случае, я затем извлекаю модуль, который используется для создания объекта CSP, который я использую для шифрования пароля:

# extract text between quotation marks
$hexStr = ([regex]::Matches($text, '".*?"').Value -replace '"')
# remove whitespace
$hs=$hexStr -replace '\s',''
# extract modulus only
$hs1=$hs.Substring(18,512)
# convert to bytes
$bytes = Convert-HexStringToByteArray -String $hs1
# convert bytes to base64 encoded string
$b = [Convert]::ToBase64String($bytes)
# create new CSP object using RSA encryption and 2048-bit key length
$rsa = New-Object -TypeName System.Security.Cryptography.RSACryptoServiceProvider(2048)
# set XML string that with modulus and exponent extracted from public key info
$rsa.FromXmlString("<RSAKeyValue><Modulus>$b</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>")
# set plaintext password that will be encrypted with public key
$pw = 'mypassword'
# encode password with UTF8
$enc = [system.Text.Encoding]::UTF8
$data=$enc.GetBytes($pw)
# encrypt password using CSP object
$encryptedBytes = $rsa.Encrypt($data, $true)
$hs2 = Convert-ByteArrayToHexString -ByteArray $encryptedBytes -Width 16 -Delimiter " "
$hs3 = $hs2 -join ''

Я сталкиваюсь с проблемами при попытке установить пароль dot1x на принтере.Это значение устанавливается через OID .1.3.6.1.4.1.11.2.4.3.20.6.0 (npSecurityDot11EncryptedDot1xEapMd5Secret).Захват WireShark показывает, что это 256-байтовая строка октетов.Я пытаюсь установить значение с помощью SNMPset:

PS C: \ usr \ bin>. \ Snmpset.exe -v 1 -r 0 -c public xxxx .1.3.6.1.4.1.11.2.4.3.20.6.0 x "$ hs3" Ошибка в пакете.Причина: (badValue) Данное значение имеет неправильный тип или длину.Сбой объекта: SNMPv2-SMI :: enterprises.11.2.4.3.20.6.0

WireShark не показывает ошибок с запросом set, но в get-response отображается код ошибки (3) badValue.AFAICT, значение, которое я устанавливаю, имеет правильную длину (256) и формат (строка октетов), поэтому я не знаю, что я делаю неправильно.Мысли? * * 1013

...