openssl - 如何使用 NSS 或 GnuTLS 而不是 OpenSSL 构建 openSSH?

标签 openssl openssh nss gnutls libressl

由于 OpenSSL 的安全问题,我想改用 NSS 或 GnuTLS。对于 Apache 服务器的需求,这很容易,因为每个服务器都有一个模块。但对于 SSH,这看起来即使不是不可能,也是很困难。

Dropbear嵌入了自己的算法,不对外开放。 OpenSSH 习惯于使用 OpenSSL 构建,但几个月以来,it is possible to build it without it感谢新选项:

make OPENSSL=no

但是随后使用了 D. J. Bernstein 作品中的软件加密算法。这很好,但不适合我,因为我将使用 TPM,因此可以访问 pkcs11 层。因此,正确的解决方案是使用 NSS 或 GnuTLS 构建 OpenSSH。

我等不及LibReSSL在 Linux 上,也不要使用刚刚发布的 OpenBSD,并将其设为 SSL 默认层。

所以我的问题是:是否有人尝试并设法使用 NSS 或 GnuTLS 而不是 OpenSSL 构建 OpenSSH,或者修补了 Dropbear 或任何其他解决方案以使 SSH 服务器与 TPM 和 EC 身份验证一起工作?

注意:由于我的资源有限,我无法将 OpenSSL 与 OpenSSH 结合使用,以及将 NSS 与 Apache 结合使用。我绝对需要最小化嵌入式库。

最佳答案

没有。但是,您可以通过将 libcrypto(OpenSSH 实际使用的 OpenSSL 的一部分)静态链接到 sshd 来减少与 OpenSSL 相关的磁盘使用量的增加。

在我的系统上,我可以通过在 make sshd 之后手动运行以下命令来做到这一点:

gcc -o sshd sshd.o auth-rhosts.o auth-passwd.o auth-rsa.o auth-rh-rsa.o audit.o \
  audit-bsm.o audit-linux.o platform.o sshpty.o sshlogin.o servconf.o serverloop.o \
  auth.o auth1.o auth2.o auth-options.o session.o auth-chall.o auth2-chall.o \
  groupaccess.o auth-skey.o auth-bsdauth.o auth2-hostbased.o auth2-kbdint.o \
  auth2-none.o auth2-passwd.o auth2-pubkey.o monitor_mm.o monitor.o monitor_wrap.o \
  kexdhs.o kexgexs.o kexecdhs.o kexc25519s.o auth-krb5.o auth2-gss.o gss-serv.o \
  gss-serv-krb5.o loginrec.o auth-pam.o auth-shadow.o auth-sia.o md5crypt.o \
  sftp-server.o sftp-common.o roaming_common.o roaming_serv.o sandbox-null.o \
  sandbox-rlimit.o sandbox-systrace.o sandbox-darwin.o sandbox-seccomp-filter.o \
  sandbox-capsicum.o -L. -Lopenbsd-compat/  -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack \
  -fstack-protector-strong  -lssh -lopenbsd-compat \
  /usr/lib/x86_64-linux-gnu/libcrypto.a -ldl -lutil -lz -lnsl  -lcrypt -lresolv

(这是将 -lcrypto 替换为 libcrypto.a 的完整路径并从链接器命令中删除 -pie 标志的结果由 make 生成)。

然后,在 sshd 上运行 strip 将其大小减少到大约 2MB。

如果您只想在设备上发送 sshd,显然这是有意义的。如果你还需要 ssh ,它就变得毫无用处。

关于openssl - 如何使用 NSS 或 GnuTLS 而不是 OpenSSL 构建 openSSH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26400471/

相关文章:

python - 解析 X509 专有名称

SSL证书中间CA

windows - BATCH文件可通过SSH连接到Linux。如何?

windows - 无法使用 Ngrok SSH 到 Windows 机器

jetty - 如何将 NSS 与 Jetty 一起使用?

php - composer.phar 与 nss 和 api.github.com 的问题

javascript - Web Crypto API 无法导入 openssl key

openssl - 是否有 CSR 'BEGIN' header 的规范?

linux - 为什么使用sftp上传文件后文件权限会发生变化?

c - libcurl-NSS 使用 tls :SSL CA cert (path? 访问权限构建 Imap?)windows