没有合适的资源?快使用搜索试试~ 我知道了~
网上交易安全之九阳神功-使用JAVA调用U盾进行客户认证的total solution.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 185 浏览量
2022-06-11
19:14:13
上传
评论
收藏 208KB DOC 举报
温馨提示
试读
18页
网上交易安全之九阳神功-使用JAVA调用U盾进行客户认证的total solution
资源推荐
资源详情
资源评论
一、改进的交易流程
我们假设密码已经被 MIM 拿到了,拿到就拿到呗,大家知道工商银行网上转贴划款时除了
输入用户名和密码外,还会在点”下一步”时,跳出一个页面,让你插上你的 U 盾,然后再送一下
交易密码的过程吧?
这个就是”电子签名认证”
二、先来回顾一下什么叫电子签名:
公钥加密,私钥解密
私钥签名,公钥认证
举例:
1.A 用自己的私钥,对 abcdefg 进行 sign,sign()函数返回一个 byte[],这就是电子签名。
2.把 A 的公钥和签名送到公行后台
3.工行先看 A 的密码输的对不对,做一个数据库校验
工行用 A 的公钥对 A 的签名做 verify 运算,也得到一个 byte[]
4.工行把工发过来的签名 byte[]和用 A 的公钥做 verify()后的 byte[], 两个 byte[]进行
booleanverified = sig.verify(dcByPriv);
5.如果 verified 为 true,代表 A 一定是客户 A 本人且是工行的客户(当然,A 如果被人
杀了,并且 A 的私钥被杀他的人获得了这个不能算工行的责任)
三、用 JAVA 实现签名过程
于是, 根据上述过程先做一个 POC, 用 JAVA 来做电子签名认证,代码如下:
import java.security.*;
public class SimpleSignature {
private static void digitalSign(String text)throws Exception{
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair keyPair = kpg.generateKeyPair();
byte[] data = text.getBytes("UTF8");
Signature sig = Signature.getInstance("MD5WithRSA");
sig.initSign(keyPair.getPrivate());
sig.update(data);
byte[] signatureBytes=sig.sign();
System.out.println("Signature:\n"+Base64.encode(signatureBytes));
sig.initVerify(keyPair.getPublic());
sig.update(data);
boolean verified = false;
try{
verified = sig.verify(signatureBytes);
}catch(SignatureException se){
se.printStackTrace();
verified = false;
}
if(verified){
System.out.println("Signature verified.");
}else{
System.out.println("Signature did not match.");
}
}
public static void main(String[] args){
try{
String text="abc";
digitalSign(text);
}catch(Exception e){
e.printStackTrace();
}
}
}
四、运用证书解决公钥,私钥传输的问题
1.生成自签名 CA 根证书
openssl genrsa -des3 -out ca.key 1024
openssl rsa -in server.key -out ca.key
openssl req -new -x509 -keyout ca.key -out ca.crt
2.生成 Web 服务器证书
openssl genrsa -des3 -out shnlap93.key 1024
openssl rsa -in shnlap93.key -out shnlap93.key
openssl req -new -key shnlap93.key -out shnlap93.csr
openssl ca -in shnlap93.csr -out shnlap93.crt -cert ca.crt -keyfileca.key
3.生成客户端证书
openssl genrsa -des3 -out client.key 1024
openssl rsa -in shnlap93.key -out client.key
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
4.把 shnlap93.crt 装在服务器上
客户端的 IE 导入 client.crt(此处必须把 crt 再转成 p12 格式)导入:
openssl pkcs12 -export -inkey client.key -in client.crt -out client.p12
1.大家看到第 4 步中的那个 key 了吧,这个 key 就是客户端的私钥
大家看到第 4 步中的那个 crt 文件了吧?那个文件里存着客户端的公钥(不是那个.key 文件
啊)
2.写一个 servlet,客户端访问这个 servlet 时,该 servlet 自动从客户端的 IE 获取
client.p12,然后把里面的公钥抽出来(由于是公钥,公开的,所以这个不存在安全不安全
的因素)
剩余17页未读,继续阅读
资源评论
oligaga
- 粉丝: 50
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功