在 C# 中使用 p12 证书从 SFTP 下载文件

Posted

技术标签:

【中文标题】在 C# 中使用 p12 证书从 SFTP 下载文件【英文标题】:Download file from SFTP with p12 certificate in C# 【发布时间】:2014-11-18 07:40:05 【问题描述】:

我已经尝试搜索上述并找到了SSH.NET,但我不确定:

    如果它适合我​​的情况。 如何以我需要的方式使用它。

我有一个使用 SFTP 的客户端 - 他使用 FileZilla 等普通第三方工具连接到该客户端。

我有凭据等,需要从该 SFTP 下载文件。 对我来说不幸的是,SFTP 需要一个 p12 证书(我有),我不知道如何使用。我还没有使用过 SFTP。 连接是:“交互式”

对于“普通”FTP,我只需获取 FtpRequest 的响应流并将其信息转换为我需要的任何内容。

问题:如何使用 p12 证书建立与使用 C# 的 SFTP 的连接,而无需购买商业第三方库之一?

我将不胜感激,不仅可以提供直接提示,还可以阅读该主题的材料。

【问题讨论】:

【参考方案1】:

您确定要使用 SFTP 吗?我从未见过任何人通过 SSH/SFTP 使用 P12 密钥。也许您将 SFTP 与 FTPS [FTP over TLS/SSL] 混淆了?

无论如何,NET.SSH 库仅支持 OpenSSH 和 ssh.com 私钥文件格式。因此,您需要将 P12 密钥转换为其中任何一个。

引用Extract public/private key from PKCS12 file for later use in SSH-PK-Authentication:

您可以使用以下命令从 PKCS#12 容器:

PKCS#1 私钥

openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem

证书:

openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem

【讨论】:

【参考方案2】:

首先,您似乎将 SFTP 与 FTP-over-SSL 混淆了。这些是two different protocols。从您的问题来看,您似乎需要 FTP-over-SSL。

在您只需要下载文件的简单情况下,.NET 的 FtpWebRequest 类将起作用。在更复杂的情况下,需要第三方库。

如果需要处理SFTP,情况就复杂多了。 SSH 通常不适用于 X.509 证书(这种配置是可能的,但几乎从未使用过)。您不会使用开源库获得此功能。

【讨论】:

嗨,尤金,感谢您的快速回复。我很有可能实际上混淆了他们两个。我所看到的是 uri 包含 sftp 而不是 ftp 并且客户端经常将其称为安全 ftp 。我怎么确定?我知道 FtpWebRequest - 它适用于我并且我编写了自己的库,但是如何合并 p12 证书? @Aiolos 最简单的是询问他们连接到哪个端口。如果端口端口是 22 或类似(例如 2022),那么它很可能是 SFTP。如果端口是 990 或 21 或类似的端口(比如 2021),那么它就是 FTP-over-SSL。请注意,如果端口为 990,则这是隐式 TLS,而在端口 21 和类似端口上,您将获得显式 TLS。 @Aiolos 在这种情况下如何使用 pkcs#12 文件真的取决于协议。

以上是关于在 C# 中使用 p12 证书从 SFTP 下载文件的主要内容,如果未能解决你的问题,请参考以下文章

ipad如何安装cer、p12证书

mac下 空密码P12证书如何安装

将推送通知证书导出为 P12

如何使用 javascripts forge 从 p12 证书中获取证书信息?

使用 PHP 从 p12 证书文件中获取信息

苹果开发证书集锦(cer、p12、pem等生成使用)