没有合适的资源?快使用搜索试试~ 我知道了~
首页JAVA调用U盾 UKEY(网上交易安全认证)
通过用户名和密码来进行认证的弊病,我们有一个网站,为了保证用户在线交易传输数据的安全性,我们会启用一个HTTPS/SSL:但是,对于一些网上银行或者是网购来说,黑客特别喜欢攻击这样的网站, 有一种攻击手法叫MIMAT(中间者攻击), 伪造SSL证书,让客户端的HTTP流,流到他那边去, 然后再进一步用暴力破解,来破解你HTTP传输时的密码。
资源详情
资源评论
资源推荐

一、改进的交易流程
我们假设密码已经被 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页未读,继续阅读



安全验证
文档复制为VIP权益,开通VIP直接复制

评论2