了解Powershell SecureStrings

时间:2018-02-14 15:43:54

标签: powershell session securestring

今天,我想深入研究SecureString .NET和Powershell的概念,但我不认为,我对此非常了解。

如果我有密码并将其转换为securestring。它是在我输入时保存的吗? (加密或纯文本)。

现在,如果我将密码作为PSCredential的一部分传递给PSSession:会发生什么? PSSession是否对传递的密码运行ConvertFrom-SecureString?但是密码再次被加密。它如何知道如何将其传递给PSSesion?

1 个答案:

答案 0 :(得分:4)

我不完全理解你的问题但得到了这个问题。如果您根据对象类型some explanation)进行思考,这可能会更容易。

  

"如果我有密码并将其转换为securestring。是保存为   我进去了吗? (加密或纯文本)"

  • 您的密码为纯文字,类型为[String]。这不加密。
  • SecureString的类型为[System.Security.SecureString]。它已加密。
  • 此加密发生in memory whenever you create the SecureString
  • 重要的是要注意解密SecureString需要密钥(以下更多信息)

方法1
这会创建一个名为SecureString加密 $SecurePassword变量。未加密的密码不会使其成为内存。

$SecurePassword = Read-Host -Prompt "Enter password" -AsSecureString

方法2
这会创建未加密 String变量$PlainPassword然后 SecureString变量。

$PlainPassword = Read-Host -Prompt "Enter password"
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force
  

"现在如果我将密码作为PSCredential的一部分传递给PSSession:会发生什么?"

  • PSSession不接受未加密的密码。为简化起见,您可以提供User并提示输入密码,也可以传递类型为PSCredential的对象 - 即期望安全密码
  • 当您传递PSCredential时,它已使用密码加密为SecureString
  • 但是PSSession需要解密它(这部分我不确定但是假设......还有什么可以改变它?)
  • 要解密SecureString,需要密钥。密钥通常是生成的,只要两台机器具有相同的security principle,PSSession就可以完成解密(这部分我确定)
  • This post解决了如何创建密钥,以便在存在不同原则时可以解密SecureString