package com.citi.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import org.bouncycastle.cms.CMSEnvelopedData;
import org.bouncycastle.cms.CMSEnvelopedDataGenerator;
import org.bouncycastle.cms.CMSException;
import org.bouncycastle.cms.CMSProcessable;
import org.bouncycastle.cms.CMSProcessableByteArray;
import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.cms.CMSSignedDataGenerator;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Crypto {
private File keystoreFile;
private String keyStoreType;
private char[] password;
private String alias;
private static final Crypto instance = new Crypto();
public static Crypto getInstance() {
return instance;
}
public Crypto(){
if(readPath("C:\\ibm\\WebSphere\\profiles\\GBGCB\\installedApps\\APACCNSHZJW1373Node01Cell\\GBGCB.ear\\GBGCB.war\\WEB-INF\\etc").endsWith("/")){
keystoreFile=new File(readPath("C:\\ibm\\WebSphere\\profiles\\GBGCB\\installedApps\\APACCNSHZJW1373Node01Cell\\GBGCB.ear\\GBGCB.war\\WEB-INF\\etc")+readPath("keystore.jks"));
}else{
keystoreFile=new File(readPath("C:\\ibm\\WebSphere\\profiles\\GBGCB\\installedApps\\APACCNSHZJW1373Node01Cell\\GBGCB.ear\\GBGCB.war\\WEB-INF\\etc")+"/"+readPath("keystore.jks"));
}
keyStoreType=readPath("JKS");
BASE64Decoder decoder = new BASE64Decoder();
String passwordStr ="";
try {
passwordStr=new String(decoder.decodeBuffer("Q2l0aWJhbmswMQ=="));
} catch (IOException e) {
}
password=passwordStr.toCharArray();
alias=readPath("outkey");
}
public static String getSignature(byte []data){
X509Certificate senderPubCert =null;
PrivateKey senderPriKey =null;
String certpath =null;
try{
BASE64Encoder m_EncoderBase64 = new BASE64Encoder();
java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
if ((data == null) || (data.length == 0)) {
return null;
}
certpath = new Crypto().readPath("C:\\ibm\\WebSphere\\profiles\\GBGCB\\installedApps\\APACCNSHZJW1373Node01Cell\\GBGCB.ear\\GBGCB.war\\WEB-INF\\etc");
// Get Vendor Public Cert
/***** Get Sender Certificate ****/
Crypto export=new Crypto();
HashMap strMap = export.export();
if(strMap != null){
senderPriKey = (PrivateKey) strMap.get("0");
senderPubCert= (X509Certificate) strMap.get("1");
}
byte[] signedData = null;
if (senderPriKey != null && senderPubCert != null) {
Signature rsa = Signature.getInstance("SHA1withRSA", "BC");
rsa.initSign(senderPriKey);
rsa.update(data);
signedData = rsa.sign();
}
else {
// signedData = encryptedData;
return null;
}
// perform Base64 encoding
String sBase64Encoded = m_EncoderBase64.encode(signedData);
sBase64Encoded = sBase64Encoded.replaceAll("\\r", "").replaceAll("\\n", "");
return sBase64Encoded;
}
catch (CMSException cmsex) {
cmsex.printStackTrace();
}
catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public static String encryptAndSignData(byte[] data) {
String sGeneratorType = "RC2_CBC";
X509Certificate senderPubCert =null;
PrivateKey senderPriKey =null;
String certpath =null;
String vendorcertificate=null;
try{
boolean init = false;
String CRYPTO_PROVIDER_NAME ="BC";
BASE64Encoder m_EncoderBase64 = new BASE64Encoder();
// Check if we got not-null parameters
if (!init){
java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
init = true;
}
if ((data == null) || (data.length == 0)) {
return null;
}
certpath = new Crypto().readPath("C:\\ibm\\WebSphere\\profiles\\GBGCB\\installedApps\\APACCNSHZJW1373Node01Cell\\GBGCB.ear\\GBGCB.war\\WEB-INF\\etc");
vendorcertificate = new Crypto().readPath("vendorcertificate");
vendorcertificate = "LPSSO.cer";
// Get Vendor Public Cert
FileInputStream fi=null;
if(certpath.endsWith("/")){
fi = new FileInputStream(certpath+vendorcertificate);
}else{
fi = new FileInputStream(certpath+"/"+vendorcertificate);
}
CertificateFactory certFact = CertificateFactory.getInstance("X.509", "BC");
X509Certificate recipientPubCert= (X509Certificate)certFact.generateCertificate(fi);
if (recipientPubCert == null) {
return null;
}
/***** Get Sender Certificate ****/
Crypto export=new Crypto();
HashMap strMap = export.export();
if(strMap != null){
senderPriKey = (PrivateKey) strMap.get("0");
senderPubCert= (X509Certificate) strMap.get("1");
}
//***** End of Get Sender Certificate ****//*
CMSEnvelopedDataGenerator edGen = new CMSEnvelopedDataGenerator();
// add the recipient's public key
edGen.addKeyTransRecipient(recipientPubCert);
// generate the enveloped-data object
CMSProcessable procData = new CMSProcessableByteArray(data);
sGeneratorType = CMSEnvelopedDataGenerator.RC2_CBC;
CMSEnvelopedData envelopedData = edGen.generate(procData, sGeneratorType, CRYPTO_PROVIDER_NAME);
byte[] encryptedData = envelopedData.getEncoded();
// sign the enveloped data
byte[] signedData = null;
if (senderPriKey != null && senderPubCert != null) {
CMSSignedDataGenerator signer = new CMSSignedDataGenerator();
signer.addSigner(senderPriKey, senderPubCert, CMSSignedDataGenerator.DIGEST_SHA1);
CMSSignedData cmsSignedData = signer.generate(new CMSProcessableByteArray(encryptedData), true, CRYPTO_PROVIDER_NAME);
}
else {
// signedData = encryptedData;
return null;
}
// perform Base64 encoding
String sBase64Encoded = m_EncoderBase64.encode(signedData);
sBase64Encoded = sBase64Encoded.replaceAll("\r\n", "");
return sBase64Encoded;
}
catch (CMSException cmsex) {
cmsex.printStackTrace();
}
catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public HashMap export() throws Exception{
HashMap strmap = new HashMap();
KeyStore keystore=KeyStore.getInstance(keyStoreType);
keystore.load(new FileInputStream(keystoreFile),password);
PrivateKey senderPK = (PrivateKey)keystore.getKey(alias,password);
X509Certificate certificate =(X509Certificate) keystore.getCertificate(alias);
strmap.put("0",senderPK);
strmap.put("1",certificate);
return strmap;
}
public String readPath(String pathname){
java.util.Properties properties = new java.util.Properties();
String certpath = null;
try {
certpath = pathname;
}catch (Exception ex) {
ex.printStackTrace();
}
return certpath;
}
public static void main(String[] args){
System.out.println("test");
String GRBNumber="004195137";
String PageID="HomePage";
String Initial_Request_timestamp=String.valueOf(System.currentTimeMillis());
String ICHANNEL_ID="Default";
String postData = "GRBNumber="+GRBNumber+"&PageID="+PageID+"&Initial_Request_timestamp="+Initial_Request_timestamp+"&ICHANNEL_ID="+ICHANNEL_ID;
System.out.println(postData);
String value = Crypto.getSignature(postData.getBytes());
System.out.println(value);
}
}
分享到:
相关推荐
在这个基于对称加密的简单SSO系统中,我们将探讨如何使用Servlet和对称加密技术来实现这一功能。 首先,对称加密是一种常见的加密方式,它指的是加密和解密使用同一密钥的加密算法。在SSO系统中,对称加密可以帮助...
* 使用加密技术来保护Cookie验证票。 * 使用身份验证机制来确保会员身份的真实性。 * 使用访问控制机制来限制会员的访问权限。 6. SSO系统的实现难点: * 实现单点登录,需要确保认证服务器和成员网站服务器之间的...
C#源码可能涉及到`FormsAuthenticationTicket`类和`FormsAuthentication.Encrypt()`方法,用于创建和加密票据。 2. **票据验证**:为了跨域和跨服务器共享信息,通常采用票据中心(Ticket Center)或中央认证服务...
- **ssoserver.crt**:可能是一个SSL证书,用于加密和验证服务器的身份,确保通信的安全性。 - **ssoserver.keystore**:Java keystore文件,包含私钥和公钥,用于服务器端的身份验证和SSL/TLS连接。 - **SSODemo2、...
- **配置Broker Server**: 配置SSO服务器的设置,包括加密密钥、存储会话的方式(例如使用数据库或文件系统)以及客户端信息。 - **创建Broker Server中间件**: 用于处理来自客户端的会话ID请求,验证并响应相应的...
当`protection`属性设置为"All"时,意味着通过Hash值加密和验证的数据都将存储在Cookie中,从而实现跨应用的SSO功能。 ### 不同验证机制下的SSO 当应用采用不同的验证机制时,实现SSO变得更为复杂。例如,在一个...
- 考虑安全性:确保通信过程中的数据加密,避免敏感信息泄露。 - 配置适当的权限控制:根据业务需求,对不同角色的用户赋予不同的访问权限。 - 优化用户体验:例如,提供“记住我”功能,使用户在一定时间内无需频繁...
- **令牌加密**:确保生成的令牌经过加密处理,以防止中间人攻击。 - **令牌过期**:设置合理的令牌过期时间,避免长时间未使用的令牌被恶意利用。 - **HTTPS**:所有 SSO 相关的通信都应该使用 HTTPS,以保护数据...
5. **配置HTTP通道安全**:为了实现SSO,需要配置Web服务器(如Apache或IHS)的HTTPS通道,确保通信的加密和安全性。 6. **测试SSO**:完成配置后,通过尝试访问受保护的应用来验证SSO是否工作正常。如果用户能从一...
SSO是一种身份验证机制,允许用户在登录一个应用系统后,无需再次输入凭证即可访问与其相互信任的其他应用系统。在企业环境中,这样的功能能够极大提升用户体验,同时简化管理,降低安全风险。 PHPSSO的设计目标...
- **util**:这里可能存放通用的工具类,比如加密解密工具、SSO配置工具等。 - **base**:基础类或基类,可能包含SSO认证的基础组件,如自定义Realm或Filter的基类。 整合Shiro与SSO的关键在于设计一个灵活且可扩展...
- 安全性:确保SSO系统的安全性至关重要,防止中间人攻击和票据伪造,同时要定期更新加密算法。 - 性能优化:合理设计票据的生命周期,避免过多的数据库查询,提高系统性能。 - 兼容性:考虑多种浏览器和设备,...
- **安全性**:SSO系统需要确保通信过程中的数据安全,防止中间人攻击,通常采用HTTPS进行加密传输,同时令牌也有过期时间限制。 - **实现技术**:可能涉及的编程语言和框架如Java(Spring Security)、Python...
### 基于对称加密的简单单点登录系统(SSO)—— .NET C# 版本 #### 一、概述 本文档旨在详细解释一个基于对称加密的简单单点登录系统的设计与实现原理,该系统适用于.NET平台下的C#开发环境。通过本文档,读者将...
服务器验证用户身份后,会生成一个包含用户信息的加密Token,然后存储在Cookie中。后续请求中,应用会检查这个Token来确认用户身份。 5. **CAS(Central Authentication Service)**:CAS是一个开源的SSO解决方案,...
4. **安全性**:SSO系统必须确保通信过程中的数据安全,例如采用HTTPS协议加密传输,防止中间人攻击,以及对票据的有效期和重放攻击进行控制。 5. **会话管理**:当用户在任一应用中登出时,SSO系统需要能够同步...
单点登录(Single Sign-On, SSO)是一种网络身份验证机制,允许用户在一次登录后,访问多个相互关联的应用系统而无需再次输入凭证。在这个场景中,"sso server端"指的是实现SSO功能的服务器端组件,它处理用户的认证...
2. 用户在SSO登录页面输入凭证并成功验证后,SSO服务器生成一个安全Token,并将其加密存储在一个特定的Cookie中,同时将用户重定向回系统A。 3. 系统A检测到Cookie中的Token,通过解密验证Token的有效性,从而识别...
在实际开发中,可能还需要考虑安全性问题,如票据的加密、防止重放攻击、超时策略等。同时,为了提高用户体验,还可以引入Remember Me功能,让用户在一定时间内免登录。 总结,使用SSM和Redis实现SSO单点登录,能够...
1. **配置Web.config**:在所有参与SSO的应用程序的Web.config文件中,需要配置相同的`machineKey`,这用于加密和解密身份验证票据。此外,需要启用跨应用程序的身份验证。 2. **创建身份验证票证**:当用户在主...