我的拓扑
两台 Ubuntu 服务器,边缘暴露在互联网上,核心仅在本地连接。两者都在同一个子网上,核心只接受来自边缘服务器的 SSH。SSH 私钥存储在我连接的本地计算机上。我在两台服务器上都使用了自定义 ssh 端口和 MFA
我想要实现的是通过 SSH 从我的计算机连接到边缘服务器,然后使用本地存储的私有 SSH 密钥从那里连接到核心服务器。
我敢肯定这很简单,但我不知道如何实现。
我的拓扑
两台 Ubuntu 服务器,边缘暴露在互联网上,核心仅在本地连接。两者都在同一个子网上,核心只接受来自边缘服务器的 SSH。SSH 私钥存储在我连接的本地计算机上。我在两台服务器上都使用了自定义 ssh 端口和 MFA
我想要实现的是通过 SSH 从我的计算机连接到边缘服务器,然后使用本地存储的私有 SSH 密钥从那里连接到核心服务器。
我敢肯定这很简单,但我不知道如何实现。
使用 Powershell,我正在尝试使用可以导出的私钥创建自签名 ssl 证书。我已经阅读并遵循了各种教程,但最终结果始终是没有导出任何私有的。我正在使用 Powershell,因为服务器运行的是 Windows Server 2016 Core 版本。我已经尝试从远程计算机使用证书 MMC 控制台,但是在远程执行该操作时似乎并非所有功能都可用。无论如何,我所遵循的各种教程都谈到了导出私钥的能力,但是我还没有找到一个具体的代码示例来实现这项工作。这是我一直在尝试的代码:
$todaydt = Get-Date
$5years = $todaydt.AddYears(5)
$selfSignedRootCA = New-SelfSignedCertificate -DnsName SelfSignedRootCA -notafter $5years -CertStoreLocation Cert:\LocalMachine\My\ -KeyExportPolicy Exportable -KeyUsage CertSign,CRLSign,DigitalSignature -KeySpec KeyExchange -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm 'RSA' -HashAlgorithm 'SHA256' -Provider 'Microsoft Enhanced RSA and AES Cryptographic Provider'
New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName "myserver.test" -notafter $5years -Signer $selfSignedRootCA -KeyUsage KeyEncipherment,DigitalSignature
$CertPassword = ConvertTo-SecureString -String "MyPassword" -Force -AsPlainText
Export-PfxCertificate -Cert cert:\LocalMachine\My\REDACTED-THUMBPRINT -FilePath C:\test.pfx -Password $CertPassword
我的研究表明,最常见的原因是用于创建证书的证书模板不允许导出私钥,因此按照这些建议,我复制了现有的证书模板并确保将其配置为允许导出密钥。但是,我不知道如何/在哪里在上述任何命令中指定新创建的模板。我对这些 cmdlet 文档的审查没有显示任何参数。真的坚持这一点,所以任何建议都非常感谢。
我已经生成了一对私有/公共 ssh 密钥(在 Linux 上),它们现在在我的.ssh
文件夹中。
我已将我的 ssh id ( ssh-copy-id
) 复制到我想要连接的远程机器上,而无需一直键入我的密钥。
复制我的 ssh id 后,我无需输入密码就可以连接到机器,并且我在 中仔细检查.ssh/authorized_keys
了唯一授权的公钥是我刚刚复制的那个(这很好)。
但是,我看到了两个问题:
首先,由于某种原因,ssh-copy-id
我的私钥也复制到了那台机器上。我删除了它,因为它似乎是一个很大的安全整体,将你的私钥传播到其他机器上。这个对吗?
其次,我看到我的公钥现在是用.ssh/authorized_keys
. 此文件的权限已配置,因此只有我的用户可以读取它 ( -rw-------
)。不过,如果有人设法访问此内容,他/她可以在没有密码的情况下访问我的远程计算机,这是正确的吗?我已经看到,在我的本地计算机上,这个文件已经生成了允许任何其他用户(登录机器)读取它的权限。这不是安全漏洞吗?我应该更改权限以便只有我的用户可以读取文件的内容吗?
最后,在连接到远程机器时,哪个密钥实际上用于非常我的身份,私有密钥还是公共密钥?
我试图在我的 Centos 7 机器上安装 Fail2ban 以防止 ssh 服务器上的强制暴力连接。
我正在使用带有密码的私钥进行连接。我测试了 Fail2ban,但当我输入错误的密码时它不会阻止我。
我只想坚持我正在使用我的私钥连接到 ssh。
感谢帮助 :)
我有一个使用 SSL 进行通信的客户端 VM 和服务器 VM。客户端 VM 使用 CLI 运行 Wireshark 捕获
Wireshark GUI 在另一台机器上本地运行。
作为客户端 VM 上的用户,我使用 python 脚本通过 SSL 启动了一个 RESTful HTTP 会话。
我已经使用wireshark 捕获了对话,现在想要对应用程序数据进行解密。
我复制了本地机器捕获的文件,现在想分析应用程序数据。
我只能通过 ssh 访问客户端 VM,并且按照 https://wiki.wireshark.org/SSL上的步骤操作 让我相信我应该
1)将客户端VM上的/home/USER./ssh/id_rsa的内容复制到本地机器。
2) 指向 SSL 首选项 RSA 密钥文件列表中的文件。3) 在相同的 SSL 首选项中配置 IP 地址、端口
然后我希望能够查看加密的数据,但我仍然看到
我的理论是我使用了不正确的 RSA_PRIVATE_KEY ,所以我想确认 SSL 会话中使用了哪个密钥。
如果 RSA PRIVATE KEY 正确,我还应该检查什么?
有什么方法可以在不使用 SSH 登录的情况下重新访问我的服务器?我的私钥权限不正确,现在我无法登录。
当使用 openssl 0.9.8 创建一个新的自签名证书+密钥时,有一个-nodes
参数可以用来告诉 openssl 不要加密它创建的私钥。例如:
openssl req -x509 -nodes -days 365 \
-subj '/C=US/ST=Florida/L=Jupiter/CN=test.com' \
-newkey rsa:1024 -keyout mykey.pem -out mycert.pem
但是对于新的 openssl v1.0.1,似乎该-nodes
参数被忽略了。据我所知,私钥始终是加密的。我使用 openssl 错了吗?我应该改用其他参数吗?
该-nodes
参数被记录为:
if this option is specified then if a private
key is created it will not be encrypted
来源:http ://www.openssl.org/docs/apps/req.html#item__nodes
询问的更多详细信息:
使用 openssl 0.9.8,密钥 + 证书可以直接导入到我们拥有的其他第三方设备中,这些设备需要未加密的密钥和证书。这没有任何问题。
但是当使用 openssl 1.0.1 时,这些第 3 方设备会抱怨密钥无效。确切的错误信息是:
ERROR: Private key for 'My Cert' does not appear to be a valid
RSA private key in PEM format.
这是一个封闭源系统,它不提供额外的细节。我今天通过使用它发现的是,如果我通过以下命令运行 v1.0.1 私钥:
openssl rsa -in mykey.pem -out decryptedkey.pem
...然后在这一点上,这个第 3 方系统在导入证书和解密密钥时没有问题。当我在 v1.0.1 密钥上运行此命令时:
openssl rsa -text -in mykey.pem
...私钥的文本与 v1.0.1 mykey.pem 文件中的内容不同。这就是为什么我认为密钥以某种方式加密的原因。
使用证书的 SSL 客户端身份验证——这是一个复杂的话题,我认为我学到的知识足以让它变得更加复杂。
这是我的基本理解:公钥和私钥是由证书颁发机构生成的。此信息可以保存在“证书”中,然后由客户端用于身份验证。
为什么可以有没有私钥的证书?我知道,如果从 Windows 证书商店导出证书,您可以在没有私钥的情况下导出它。如何使用没有私钥的证书?我一直认为,如果您要将其转移到另一台电脑/设备上使用,则两者都需要。
如果公钥和 CA 已知,是否可以随时请求私钥?
我有一个启用了基于密码的 SSH 的 FreeBSD 服务器。我想启用sudo
,但我不希望潜在的攻击者远离 root 访问的一个密码。我当前的解决方案是使用公钥以 root 身份登录(对 root 禁用远程密码身份验证),而我的普通用户不在轮子中,sudo
也没有安装。
过去,我使用一次性密码进行 sudo 访问(我可以公开密钥进入系统,但 sudo 需要 OTP,并且有 30 分钟的超时时间让我无需重新验证所有时间)。然而,这是相当麻烦的,至少对于 OPIE/S/Key 来说是这样。使用硬件令牌可能没问题,但我目前没有。
我一直在寻找可以让我通过代理转发使用 SSH 公钥对 sudo 进行身份验证的东西。 pam_ssh
FreeBSD 包含的似乎并没有这样做——它只是通过查看用户是否可以解密服务器上的私钥来进行身份验证。我找到了pam_ssh_agent_auth
,但我在其他地方发现很少提及它。现在是 0.9,但我有点犹豫是否相信通往根目录的程序的网关,我找不到太多人们实际使用的证据。
所以,我的问题基本上是2:
pam_ssh_agent_auth
在野外使用可靠吗?假设我有一个 SSH 密钥,但我删除了公钥部分。我有私钥部分。有什么方法可以重新生成公钥部分吗?