如何通过SNMP通过PowerShell设置HP打印机的802.1x密码?

时间:2019-06-05 20:17:49

标签: powershell snmp printers

我已经能够通过SNMP通过PowerShell成功配置许多HP打印机dot1x设置;但是,我不确定如何设置用于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公共x.x.x.x   .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在设置请求中未显示任何错误,但在get-response中显示了错误代码(3)badValue。 AFAICT,我设置的值具有正确的长度(256)和格式(八位字节字符串),所以我不知道我在做什么错。有想法吗?

0 个答案:

没有答案