gpt4 book ai didi

c# - 使用 SSH.NET 流式传输私钥的问题

转载 作者:行者123 更新时间:2023-11-30 21:43:39 29 4
gpt4 key购买 nike

我正在使用 Renci.SshNet 库,并让它使用用户名和私钥。当从文件或文件流读取私钥时,我可以很好地打开私钥,但在内存流期间它会失败。

这有效:

var pk = new PrivateKeyFile(@"C:\myfile.ppk");

这有效:

var f = new FileStream(@"C:\myfile.ppk", FileMode.Open, FileAccess.Read);
var pk = new PrivateKeyFile(f);

这些失败并显示“无效私钥”。

var s = new MemoryStream(Encoding.UTF8.GetBytes(variablename));
//No carriage returns
var s = new MemoryStream(Encoding.UTF8.GetBytes(@"-----BEGIN RSA PRIVATE KEY----- <snip>"));
//Include carriage returns
var s = new MemoryStream(Encoding.UTF8.GetBytes(@"-----BEGIN RSA PRIVATE KEY----- <snip>"));

我什至尝试了在SO上找到的流位置:

private Stream GenerateStreamFromString(string s)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}

我一开始以为 Renci 库的 Stream 存在错误,但显然文件流可以工作。我计划将字符串格式的 key 托管在 azure 存储表中,但我对其他想法持开放态度。

最佳答案

根据您的描述,我使用PuTTYgen通过SSH生成了我的私钥文件。并引用此tutorial将我的 key 转换为OpenSSH格式。根据您提供的有关使用MemoryStream的代码,我可以使其按照我的预期工作,您可以引用它:

var f = new MemoryStream(Encoding.UTF8.GetBytes(@"-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----");
var pk = new PrivateKeyFile(f, "{password}");

注意:我认为传递给 Encoding.UTF8.GetBytes 的私钥字符串内容的格式不正确。要找出此原因,您可以尝试将加载的 MemoryStream 保存到文件中,如以下代码所示,并将其与 C:\myfile.ppk 进行比较。

memoryStream.CopyTo(fileStream);

I plan on hosting the key in string format in an azure storage table, but am open to other ideas

据我所知,对于 Azure Web App 上托管的 Web 应用程序,您可以利用 app settings存储键值对,这些键值对可以在运行时自动加载并覆盖 web.config 文件中的现有应用程序设置。

此外,您可以利用 Azure Blob storage以私密方式存储您的私钥文件并按如下方式检索它:

using(var ms=new MemoryStream())
{
cloudBlockBlob.DownloadToStream(ms);
var pk = new PrivateKeyFile(ms, "{password}");
}

注意:您可以按照此 tutorial 中的“加密 blob 数据”部分进行操作。在客户端和服务器端加密您的 blob 数据。

此外,您可以利用 Azure Key Vault来存储您的私钥。更多详情,可以引用这个官方document开始使用 Azure Key Vault。

关于c# - 使用 SSH.NET 流式传输私钥的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41535188/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com