建议使用哪些PHP插件或库或其他方法来完成TLS连接?哪些地方可以开始寻找? (我最初的谷歌搜索给了我很大比例的噪音信号.)
将X509私钥放在Web服务器上涉及哪些安全问题?要建立TLS连接,我将需要X509证书和相应的私钥,可能需要PEM文件,或DER文件,或Java密钥库,或其他任何东西.这个私钥是否会位于Web根目录下易受攻击的位置?这通常如何处理?有什么安全问题,特别是保护用于建立TLS连接的私钥的安全问题?什么是最佳做法?
编辑:我忘了提到程序连接的服务器需要提供客户端证书.客户端确实需要私钥才能连接.此外,我连接的服务器不是HTTP服务器 – 我只需要在与服务器的普通套接字连接上读取/写入(通过SSL / TLS连接).
解决方法
使用TLS / SSL客户端,您只需要公钥即可验证远程主机.这个公钥只是那个公共密钥,它是否泄露给攻击者并不重要.在服务器端,Apache可以访问公钥和私钥.使用普通文件访问权限保护这些密钥.在* nix系统下,这些密钥通常存储在/ etc /中的某个地方,由Apache进程拥有,而chmod 400最好.
客户端最简单的身份验证方法是简单的用户名/密码.您可以使用SSL对客户端和服务器进行身份验证.这将要求您将私钥存储在您的程序可以访问的位置,理想情况下,在具有chmod 400的webroot之外,但您可以轻松地将其重命名为.PHP或将其放在包含拒绝的.htaccess的文件夹中.所有.在服务器端,您可以使用these environmental variables验证客户端证书.
如果您只想要TLS连接而不是HTTP.然后你可以通过设置Context Options来使用stream_context_set_option:
<?PHP $context = stream_context_create(); $result = stream_context_set_option($context,'ssl','local_cert','/path/to/keys.pem'); // This line is needed if your cert has a passphrase $result = stream_context_set_option($context,'passphrase','pass_to_access_keys'); $socket = stream_socket_client('tls://'.$host.':443',$errno,$errstr,30,STREAM_CLIENT_CONNECT,$context); ?>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。