因为之前没有接触到https双向认证,所以有点陌生。
因为ssl证书和私钥都是对接方提供的,我的理解如下:
ssl证书携带了客户端的公钥,
对方服务器使用客户端的私钥验证,再用服务端的公钥加密返回
客户端再用设置的私钥解密形成通道,双方在通道中发收数据。
之前看别人文章时,完整流程还涉及了对称加密,这里先记下这次遇到的问题吧,如果有错误,欢迎指正。
php的curl代码如下:~~~~

$sslcert = 'ssl证书.pem';

    $sslkey = 'ssl证书私钥指定文件';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, '地址');
    curl_setopt($ch, CURLOPT_PORT, 443);
    curl_setopt($ch, CURLOPT_HEADER, ['Content-Type: application/xml']);
    // 客户端ssl证书
    curl_setopt($ch, CURLOPT_SSLCERT, $sslcert);
    curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '密码');
    curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
    // 私钥
    curl_setopt($ch, CURLOPT_SSLKEY, $sslkey);
    curl_setopt($ch, CURLOPT_SSLKEYPASSWD, '密码');
    curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, '发送的数据');
    //验证对方的证书
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
    //以字符串形式输出
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

假文艺青年
29 声望0 粉丝

Are You Ok