openssl s_server 无法指定要绑定的 ip 地址?

openssl s_server 无法指定要绑定的 ip 地址?

我正在使用 Mac OS X,我已经尝试了内置版本openssl以及最新版本opensslhomebrew但我仍然找不到绑定openssl s_server到特定 IP 地址的方法,例如127.0.0.42

这一页说:

-accept val 用于侦听连接的可选 TCP 主机和端口。如果未指定,则使用 *:4433。

但它不起作用:

$ openssl s_server -accept '127.0.0.42:4433' -cert my.crt -key my.key
getservbyname failure for 127.0.0.42:4433
usage: s_server [args ...]

 -accept arg   - port to accept on (default is 4433)
 -context arg  - set session ID context
 -verify arg   - turn on peer certificate verification
 -Verify arg   - turn on peer certificate verification, must have a cert.
 -cert arg     - certificate file to use
                 (default is server.pem)
 -crl_check    - check the peer certificate has not been revoked by its CA.
                 The CRL(s) are appended to the certificate file
 -crl_check_all - check the peer certificate has not been revoked by its CA
                 or any other CRL in the CA chain. CRL(s) are appended to the
                 the certificate file.
 -certform arg - certificate format (PEM or DER) PEM default
 -key arg      - Private Key file to use, in cert file if
                 not specified (default is server.pem)
 -keyform arg  - key format (PEM, DER or ENGINE) PEM default
 -pass arg     - private key file pass phrase source
 -dcert arg    - second certificate file to use (usually for DSA)
 -dcertform x  - second certificate format (PEM or DER) PEM default
 -dkey arg     - second private key file to use (usually for DSA)
 -dkeyform arg - second key format (PEM, DER or ENGINE) PEM default
 -dpass arg    - second private key file pass phrase source
 -dhparam arg  - DH parameter file to use, in cert file if not specified
                 or a default set of parameters is used
 -named_curve arg  - Elliptic curve name to use for ephemeral ECDH keys.
                 Use "openssl ecparam -list_curves" for all names
                 (default is nistp256).
 -nbio         - Run with non-blocking IO
 -nbio_test    - test with the non-blocking test bio
...

错误说-accept只能指定端口,而不是IP地址,这太荒谬了。

这是怎么回事?有什么解决方法吗?

答案1

我很确定你不应该指定 IP 地址。你只想允许来自一个 IP 的连接吗?或者你为什么要指定它?
端口号应该足够了,要连接到你的服务器,请使用服务器的 IP 地址或 127.0.0.1(如果是本地的)。

这是选项的语法-accept-accept port- 监听连接的 TCP 端口。如果未指定,则使用 4433。
取自https://www.openssl.org/docs/man1.0.2/man1/openssl-s_server.html

答案2

你不需要为此编写自己的代码 - 使用隧道.stunnel 将为您完成所有加密工作并在另一端为您提供明文管道。

设置 launchd 之外的服务,当有人连接到所需端口时运行 stunnel。如果您愿意仔细阅读 launchd.plist 手册页来弄清楚这一点,可以告诉 launchd 监听所需的 IP 地址。或者,在进行测试时使用 shell 脚本启动服务。

相关内容