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

时间:2014-10-16 09:10:23

标签: 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。

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

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

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

2 个答案:

答案 0 :(得分:1)

没有。但是,通过将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标志的结果。

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

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

答案 1 :(得分:1)

我确定了三个解决方案:

  1. NSS与提供80%兼容的OpenSSL API的Nss compat ossl一起使用。
  2. 使用GnuTLS及其OpenSSL compatibility layer(我尚未检查覆盖范围)。
  3. 继续使用OpenSSL并移至OpenBSD的LibReSSL或Google的BoringSSL(如果有)。第一个已经可以在OpenBSD上使用,他们管理一个可移植性项目到其他 n x发行版,所以我认为它可以在几个月内用于Linux。已经完成了巨大的cleaning and improvements