• 密钥,密钥对,公钥,pfx,jks和https的几个概念


    密钥:
    我理解是公钥+私钥的统称。

    密钥对:
    公钥(证书)和私钥成对存在。
    通信双方各持有自己的私钥和对方的公钥。自己的私钥需密切保护,而公钥是公开给对方的。在windows下,单独存在的公钥一般是后缀为.cer的文件
    A用自己的私钥对数据加密,发给B,B用A提供的公钥解密。同理B用自己的私钥对数据加密,发送给A后,A用B的公钥解开。
    公钥的两个用途:
    1。验证对方身份:防止其他人假冒对方发送数据给你。
    2。解密。
    私钥的两个用途:
    1。表明自己身份:除非第三方有你私钥,否则无法假冒你发送数据数据给对方。
    2。加密。

    jks(java key store):
    java用的存储密钥的容器。可以同时容纳n个公钥或私钥,后缀一般是.jks或者.keystore或.truststore等,千奇百怪。
    不管什么后缀,它就是一个容器,各个公司或机构叫法不同而已。比如把只包含"受信任的公钥"的容器存成.truststore文件等。
    用jdkin目录下的keytool.exe对其进行查看,导入,导出,删除,修改密码等各种操作。
    可以对jks容器加密码,输入正确才可以操作此容器中密钥。
    还有一个密码的概念与上者不同,是jks中存储着的私钥的密码,通常是绝密的。

    pfx:
    和jks功能相同但文件格式不同,pfx是浏览器用的。
    可以用一些工具程序把pfx转化成jks格式供java程序使用(如银行只提供了pfx,但是我们想用httpclient模拟浏览器自动访问时)。
    据说IE导出的pfx格式不标准,转化jks时往往报错,可以尝试用Netscape Navigator导入再导出,然后再转化。碰到过这样的情况。

    常见的几种https系统的访问
    经https协议的数据经过加密传输,防止第三方监听,冒充和篡改。
    1.不需要用户做任何操作,比如https://www.verisign.com/
    这是因为此公钥是合法的(公钥是可信任的机构颁发,和实际域名吻合,而且没有到期)。用IE访问时空白处点右键可以查看公钥信息。
    2.https的页面会弹出公钥确认提示
    公钥不合法(不是可信任的机构颁发,和实际域名不吻合,已到期),但用户点“是”即表示忽略危险,继续访问。
    3.需要往浏览器倒入一个文件才可访问的
    一般是银行在线交易等特别需要安全的场合,站方(银行)需要验证访客身份(如要确认必须是已注册的网银商户),需要在浏览器中导入含有访客私钥的pfx文件。

    生成jks:
    在银行没有提供jks文件的情况下对帐,需要自己生成jks
    对于1,2类https网站,如果java程序访问此地址时在jre默认的信任库中找不到对方证书的颁发机构,则会抛出安全方面的异常。
    所以要将站方公钥存进一个jks,并在环境变量中设定,表明信任此库中的公钥,才可以正常访问。
    我是用现成的make_jks的工具类在程序中读取https://xxxx地址,程序自动抓取出银行公钥并存进一个jks文件。
    在浏览器中查看站方公钥时,把公钥导出(一般是cer后缀),然后用keytool.exe手工将此cer导入一个jks或许也可以?没试过。
    以上1,2类https网站,仅仅是用到了公钥的“验证对方身份”功能。
    对于第3种https网站,也可以找到现成的程序把pfx直接转成jks。
    既然动用了pfx,一般是把公钥的两个用途和私钥的两个用途都用起来。

  • 相关阅读:
    错误: 找不到符号
    RSA 加解密算法详解
    RSA 加解密算法详解
    adb 显示手机分辨率
    adb 显示手机分辨率
    你有没有想过你的上级为什么让你干这件事情,他想干什么
    你有没有想过你的上级为什么让你干这件事情,他想干什么
    什么叫努力工作
    支付宝sdk 支付订单查询失败
    Error:Java home supplied via 'org.gradle.java.home' is invalid
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3366179.html
Copyright © 2020-2023  润新知