当前位置: 首页 > 知识库问答 >
问题:

将python中的SSL套接字迁移到PHP

司空坚
2023-03-14

我有这个Python代码。它应该按原样工作——连接到远程服务器,发送数据包并检查响应的延迟。


    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(20)

    ssl_sock = ssl.wrap_socket(s,
                               keyfile="client_MY.key",
                               certfile="client_MY.crt",
                               ca_certs="CA_MY_chain.crt",
                               cert_reqs=ssl.CERT_REQUIRED)    

    ssl_sock.connect(('111.111.111.111', 2500)) # fake IP addy

    # ... onward to sending & receiving a packet...

编辑:在获得正确的IP地址后,上面的python代码工作并成功返回一个数据包。

编辑:PHP代码现在返回一个有效的套接字,在添加verify_peer_name之后。

现在我需要转换一些Python代码,使用pack()构建消息

以下是我到目前为止在将Python转换为PHP方面所做的工作:


    $transport = "ssl";
    $ip = "111.111.111.111";
    $port = "2500";
    $timeout = 5;

    $local_pk   = "client_MY.key";
    $local_cert = "client_MY.crt"; // Path to certificate
    $cafile     = "CA_MY_chain.crt";

    //dd("openssl s_client -connect $ip:$port -cert $local_cert -key $local_pk -CAfile $cafile -showcerts -state");
    // openssl s_client -connect 111.111.111.111:2500 -cert client_MY.crt -key client_MY.key -CAfile CA_MY_chain.crt -showcerts -state

        $context = stream_context_create(
            array(
                $transport=>array(
                    'local_cert'=> $local_cert,
                    'local_pk'=> $local_pk,
                    'cafile'=>$cafile,
                    'verify_peer'=>true,
                    'verify_peer_name'=>false
                )
            )
        );

    if ($socket = stream_socket_client(
        "$transport://$ip:$port",
        $errno,
        $errstr,
        $timeout,
        STREAM_CLIENT_CONNECT,
        $context)
    ) {
        fwrite($socket, "\n");
        echo fread($socket,8192);
        fclose($socket);
    } else {
        echo "ERROR: $errno - $errstr\n";
    }

我的问题是:我是否正确地将代码移植到PHP?我也不知道用什么来代替“cert_reqs”。我也不确定我是否正确处理了密钥/证书文件。

我尝试了CLI上的注释out opensslhtml" target="_blank">调用,但没有任何效果。这就像远程传输到邮件服务器。除了无论我输入什么,都不会返回任何东西。我按了ctrl-c后有一堆东西被Echo弄出来了。

共有1个答案

喻高寒
2023-03-14

成功重要的部分是从客户那里获得正确的IP地址和端口。也可能是111.111。111.111:2500. 然后,补充一点也很重要

'verify_peer_name'=>false

然后创建了一个套接字。

 类似资料:
  • 问题内容: 我正在尝试在Python中建立安全的套接字连接,而使用SSL有点麻烦。我已经找到一些有关如何与SSL建立连接的代码示例,但它们都涉及密钥文件。我尝试连接的服务器不需要接收任何密钥或证书。我的问题是,我该如何实质上包装带有SSL的python套接字连接。我知道我应该使用的密码是,协议是。这就是我一直在尝试的: 运行此代码时,没有任何错误,但响应为空。当尝试在命令行中调试此代码时,通过在终

  • 问题内容: 如何创建SSL套接字连接? 我真的需要创建密钥库吗?该密钥库应该与我所有的客户端应用程序共享吗? 我用以下代码创建了一个服务器: 我用以下代码在android上创建了一个客户端: 但是当我尝试连接时,会引发以下错误: 问题答案: 您需要一个证书来建立ssl连接,您可以在密钥库中加载证书,也可以加载证书本身。我将显示一些有关keystore选项的示例。 您的代码需要一些参数才能运行: 您

  • 问题内容: 我正在加密服务器和客户端之间的TCP连接。在研究和测试过程中,我倾向于使用秘密密钥加密。我的问题是我找不到有关如何实现此功能的任何教程。我发现的教程围绕一次HTTP请求进行,我只需要一个SSL套接字。 我到目前为止编写的代码如下。我几乎可以肯定它需要扩展,我只是不知道该怎么做。任何帮助表示赞赏。 接受客户端连接的服务器代码 我只是不知道如何实际进行握手。 参考:http : //doc

  • 这很好,但没有SSL。 我已经使用OpenSSL为服务器和客户机生成了SSL证书,结果是: 服务器的证书(PEM格式) 客户端的证书(PEM格式) 服务器的私钥(PEM格式) 客户端的私钥(PEM格式) CA文件(PEM、CER和CRT格式) null 会出什么问题?

  • Hi想知道是否有办法设置套接字的超时,以及在连接握手之前重试的次数。我在非常糟糕的连接模式下测试了我的应用程序,我为我在Volley中的请求设置了重试策略为10秒,但SSL握手似乎是个问题,因为它有一个默认的超时设置为60秒,而Volley超时只被触发当套接字由于尝试次数或超时而失败时。 下面是我的方法: 我正在使用截击来提出我的请求,我实现这一点的方法是: 我还尝试设置了这样的超时:

  • 我正在使用OpenJDK 12中的Nashorn JS引擎。纳肖恩似乎遭到了反对。我正在寻找可用的替代方案。我找到了GraalVM,但我不确定这是不是最好的。如何从Java执行GraalVM JavaScript?你有什么例子吗? Nashorn用的是Java: 在Nashorn中,我创建了一个WrappedMongoDatabase,它扩展了AbstractJSObject。在那里,我添加了一些