zoukankan      html  css  js  c++  java
  • PHP中使用 JKS(Java Key Store)的方法

    PHP语言无法直接读取 JKS中的密钥,需要通过以下方法进行转换

    本例以JKS中的私钥为例

    首先 使用 KeyStore Explorer工具,打开JKS文件 ,此时可能需要输入 JKS密码

    对私钥进行导出 Export Private Key,  此时可能 需要输入 密钥密码

    导出 为 PKCS#8 格式, 此时需要输入两次 密钥密码 ( 一定要输入)

    然后 到命令行 ,使用openssl 再次转换

    openssl rsa -in prv.pkcs8 -out prv.pem

    此时,此文件即可由PHP使用

    常规情况下创建Web请求,并获取请求数据的代码如下:

        WebRequest req = WebRequest.Create(url);

        req.Timeout = 15000;

        WebResponse result = req.GetResponse();

        Stream ReceiveStream = result.GetResponseStream();

    如果需要在代码中加入证书,则需要使用HttpWebRequest对象进行请求,代码如下:

        //添加验证证书的回调方法

        ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

        HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(strQueryURL);

        X509Certificate cerCaiShang = new X509Certificate(System.Web.HttpContext.Current.Server.MapPath(setting.PfxFile), setting.key);

        httpRequest.ClientCertificates.Add(cerCaiShang);

        HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();

        Stream receiveStream = httpResponse.GetResponseStream();

        // 回调方法

        public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)

        {

            if (sslPolicyErrors == SslPolicyErrors.None)

                return true;

            return false;

        }

    本来这就算是完成了,但总是失败,原因未知,与万恶的Windows有关,还需要将客户端的证书+私钥(pfx 或p12 文件),导入到操作系统(windows)的相关证书区域,步骤:

        Windows xp/2003

            1. 单击 开始 ,单击 运行 ,键入 mmc ,然后单击 确定 。

            2. 在 文件 菜单上单击 添加/删除管理单元 。

            3. 在 添加/删除管理单元 对话框中,单击 添加 。

            4. 在 添加独立管理单元 对话框单击 证书 ,然后单击 添加 。

            5. 在在 证书管理单元中 对话框中单击 计算机帐户 ,然后单击 下一步

            6. 在 选择计算机 对话框中,单击 完成 。

            7. 在 添加独立管理单元 对话框单击 关闭 ,然后单击 确定 。

            8. 展开 证书 (本地计算机) ,展开 个人 ,然后单击 证书 。

            9. 右键 -》 所有任务-》导入 选择你的证书导入

        Windows 7

            1. 单击 开始 ,单击 运行 ,键入 mmc ,然后单击 确定 。

            2. 在 文件 菜单上单击 添加/删除管理单元 。

            3. 在 可用的管理单元 列表中选择 证书 ,点击 添加 。

            4. 在 证书管理 对话框中选择 计算机账户 ,然后单击 下一步

            5. 在 选择计算机 对话框中,单击 完成 。

            6. 在 添加或删除管理单元 对话框单击 确定 。

            7. 展开 证书 (本地计算机) ,展开 个人 ,然后单击 证书 。

            8. 右键 -》 所有任务-》导入 选择你的证书导入

    再次测试,就可以使用了。

    参考:http://blog.wsdd.org/?p=510 

    $prvKey=openssl_pkey_get_private(file_get_contents("prv.pem"));
    


    使用此私钥进行签名
    //进行签名
    $signature = '';
    openssl_sign($data, $signature, $prvKey, 'SHA256');
    
    //返回 签名
    return $signature;
  • 相关阅读:
    Spring Boot 入门之持久层篇(三)
    Spring Boot 入门之 Web 篇(二)
    Spring Boot 入门之基础篇(一)
    Java 设计模式之建造者模式(四)
    Java 设计模式之抽象工厂模式(三)
    Java 设计模式之工厂模式(二)
    c++ type_info and typeid
    opengl& 颜色
    OpenGl And 视图
    如何写一个c++插件化系统
  • 原文地址:https://www.cnblogs.com/Alex80/p/7942421.html
Copyright © 2011-2022 走看看