Java非对称加密开发(二)-证书及操作

完成基础理论的梳理后,我们首要的就是要进行一系列证书相关操作,为后续的开发做准备,这里主要描述证书操作的几种常规和常用操作,如:申请证书,自签发放证书,合成pfx等。

本文主要是通过工具对证书相关的操作进行收集和整理,主选工具为openssl这个比较通用写,关于keytool的操作,因为只是java首选,我们放一下。

申请证书

申请证书是最常用的证书相关操作,一般网站需要向CA及代理机构申请证书时,我们需要先进行一些操作,然后提交相关资料和文件给CA机构,待缴钱钱和处理后,CA在发放对应的证书回来。

前文理论部分介绍过,证书是CA机构对我们的实体信息及公钥的签名证明文件,所以我们申请证书时,需要提交我们的实体信息及公钥给CA机构,怎么提交的,业界一般采用生成一种叫CSR的文件提交给CA机构。

CSR是Cerificate Signing Request的英文缩写,即证书请求文件,也就是证书申请者在申请数字证书时由CSP(加密服务提供者, 就是自己通过openssl生成的)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。 通常CSR文件是在拿到参考码、授权码进行证书签发和下载时,通过网页提交给CA的。

怎么做!?我们以openssl为例介绍如下:

  • 创建公私秘钥对

前面理论介绍过,目前证书相关技术和操作的核心其实是非对称加密,所以生成证书前,我们先生成一对非对称秘钥对。

# 创建一个1024位(1024/8=256字节)长度秘钥,如果觉得不安全可以使用2048,但是速度回慢很多。
openssl genrsa -out private.pem 1024

# (可选)生成私钥对应的公钥,其实不必要,因为可以直接生成证书请求文件,然后拿到证书后,证书里面就有对应的公钥。为了看起舒服,先生成一个阔来。
openssl rsa -in private.pem -pubout -out public.pem 

OK,上面命令成功后,当前目录就有了2个文件: private.pem和public.pem

  • 生成证书申请文件CSR
# 直接使用签名的私钥生成对应的证书申请请求文件,请根据提示设置实体信息及保护密码
openssl req -new -out server.csr -key private.pem 

注意:

  1. 需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了网站申请https,这个必须和域名吻合(可以支持泛域名),否则会引发浏览器警报。
  2. 如果你准备后续使用直接生成的CA证书(ca.cer,请参考后续节点说明)自签名发放证书,注意这里的组织名称(O)与ca.cer的组织名称设置一致,否则会提示错误。

OK,该不是完成后,就会生成一个server.csr文件,请提交该文件个CA机构并缴钱钱,然后等CA完成后发放证书给你~ 如果你下自己发放一个自签名证书,请继续~~

自签名证书发放

在开发和测试相关应用的时候,我们一般还没有申请正式的CA证书,所以,一般情况下,我们会使用自己先制造一个CA的根证书和私钥来作为CA身份,然后在对我们的证书申请文件进行签名生成自签名的证书。

接上节中生成的CRS文件:server.csr

  • 生成CA证书及秘钥
# 通过命令直接生成一个CA的证书及私钥,用于后续直签名证书生成
openssl req -new -x509 -keyout ca.key -out ca.cer

成功后,生成2个文件。ca.cer为证书文件; ca.key为pem编码的私钥。

  • 生成自签名证书

使用上面生成的CA证书和私钥,对CSR文件生成我们的自签名证书。

openssl ca -in server.csr -out server.cer -cert ca.cer -keyfile ca.key

这里如果出现错误:I am unable to access the ./demoCA/newcerts directory./demoCA/newcerts: No such file or directory,则需要处理:

  1. 在当前目录建立 demoCA/newcerts目录
  2. 创建空文件:demoCA/index.txt
  3. 创建文件:demoCA/serial,并首行写入01,第二行空一行。

或者,请修改下openssl.conf里面对应的CA Default配置段。

OK,成功后,输出我们的证书文件:server.cer

至此,我们已经获得了证书文件server.cer, 无论你是从CA申请的还是自签名的,我们都完成了。你可以使用该文件去配置你web服务器的https访问了,例如:apache/nginx等。

合成pfx文件

如果你面临一个case,需要使用非对称加密来完成与你客户之间数据的通讯和签名,但是因成本考虑,你们都没有购买专业授信的加密机(秘钥不落地), 而你的客户也并没有管理和维护证书的成本考虑,那么比较合适的方案是:你采用文件方式管理和发放证书给你的客户,并交换你们的公钥,然后加密数据在传输。

你准备怎么给你的客户发放证书呢?!当然你需要为客户生成证书,同时发放对应的私钥给你的客户,我们一般采用keystore的方式交互给对方。常用的有jks和pkcs12(pfx)两种方式,其中pfx比较通用,jks一般是java体系使用。

现在我们,假设前面生产的证书及对应私钥就是为客户生成,并准备发放给客户的,那么我们现在需要把证书和私钥合成为pfx文件,并设置一个保护密码,然后再交付给客户。

  1. 生成pkcs12文件,但不包含CA证书:
openssl pkcs12 -export -inkey private.pem -in server.cer  -out server.pfx
  1. 生成pkcs12文件,包含CA证书:
openssl pkcs12 -export -inkey private.pem -in server.cer -CAfile ca.cer -chain -out server.pfx

OK, 我们为客户生成了server.pfx,现在可以交付给客户了,如果你设置了保护密码,请记得告诉他密码。同时不要忘记交付给他你的公钥,否则无法加密发送的数据~

JKS常用操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zp820705

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值