如何使用NSS或GnuTLS而不是OpenSSL构建openSSH?
由于OpenSSL的安全问题,我想改用NSS或GnuTLS。对于Apache服务器需求,这很容易,因为每个服务器都有一个模块。但是对于SSH来说,这看起来很困难,如果不是不可能的话 Dropbear嵌入了自己的算法,不对外开放。OpenSSH已经习惯于使用OpenSSL构建,但几个月后,由于新选项:如何使用NSS或GnuTLS而不是OpenSSL构建openSSH?,openssl,openssh,nss,gnutls,libressl,Openssl,Openssh,Nss,Gnutls,Libressl,由于OpenSSL的安全问题,我想改用NSS或GnuTLS。对于Apache服务器需求,这很容易,因为每个服务器都有一个模块。但是对于SSH来说,这看起来很困难,如果不是不可能的话 Dropbear嵌入了自己的算法,不对外开放。OpenSSH已经习惯于使用OpenSSL构建,但几个月后,由于新选项: make OPENSSL=no 但随后软件加密算法被D.J.Bernstein的作品所使用。这很好,但对我来说不是,因为我将使用TPM,因此可以访问pkcs11层。因此,正确的解决方案是使用NSS
make OPENSSL=no
但随后软件加密算法被D.J.Bernstein的作品所使用。这很好,但对我来说不是,因为我将使用TPM,因此可以访问pkcs11层。因此,正确的解决方案是使用NSS或GnuTLS构建OpenSSH
我不能在Linux上等待,也不能使用刚刚发布的OpenBSD并将其作为SSL默认层
所以我的问题是:是否有人尝试并设法用NSS或GnuTLS构建OpenSSH,而不是用OpenSSL、补丁Dropbear或任何其他解决方案来让SSH服务器与TPM和EC身份验证一起工作
注意:由于资源有限,我无法将OpenSSL与OpenSSH结合使用,而将NSS与Apache结合使用。我绝对需要最小化嵌入式库。没有。但是您可以通过静态地将libcrypto(OpenSSH实际使用的OpenSSL的一部分)链接到
sshd
来减少与OpenSSL相关的磁盘使用量的增加
在我的系统上,我可以通过在makesshd
之后手动运行以下命令来实现这一点:
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
(这是替换libcrypto.a
的完整路径的-lcrypto
,并从make
生成的链接器命令中删除-pie
标志的结果)
然后,在sshd
上运行strip
,将其大小减少到大约2MB
显然,如果您只打算在设备上装运
sshd
,这是有意义的。如果您还需要ssh
,它将变得无用。我已经确定了三种解决方案:
谢谢你,萨尔瓦。关键是我想避免使用OpenSSL。我正在研究交付OpenSSL API的GNUTL和NSS包装器。但它们只提供了一个子集。我必须检查它是否足以满足我的需要。我知道这个答案很旧,但你能描述一下你最终选择了哪种解决方案吗?我也面临着同样的问题,我想和你一起去,但我就是不知道该怎么做。不幸的是,我搬家了。但是当你有工作时请发邮件。