2

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

Dropbear 嵌入了自己的算法,不对外开放。OpenSSH 过去是使用 OpenSSL 构建的,但几个月后,由于有了新选项,可以在没有它的情况下构建它:

make OPENSSL=no

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

我不能等待Linux 上的LibReSSL,也不能使用刚刚发布并使其成为 SSL 默认层的 OpenBSD。

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

注意:由于我的资源有限,我不能将 OpenSSL 与 OpenSSH 和 NSS 与 Apache 一起使用。我绝对需要最小化嵌入式库。

4

2 回答 2

1

我已经确定了三个解决方案:

  1. NSS与提供 80% 兼容 OpenSSL API 的Nss compat ossl一起使用。
  2. 使用带有OpenSSL 兼容层的GnuTLS(我没有检查覆盖范围)。
  3. 继续使用 OpenSSL 并在可用时迁移到 OpenBSD 的LibReSSL或 Google 的BoringSSL。第一个已经在 OpenBSD 上可用,并且他们管理着一个针对其他n x 发行版的可移植性项目,所以我认为它会在几个月后在 Linux 上可用。已经进行了巨大的清洁和改进。
于 2014-10-17T11:55:09.487 回答
1

不可以。但是您可以通过将 libcrypto(OpenSSH 实际使用的 OpenSSL 的一部分)静态链接到sshd.

在我的系统上,我可以通过手动运行以下命令来做到这一点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)。

然后,running striponsshd将其大小减少到大约 2MB。

显然,如果您只打算在设备上发货,这是有道理sshd的。如果你ssh也需要那里,它就变得没用了。

于 2014-10-16T10:39:03.210 回答