上面的没问题了,现在遇到这个问题: KeyStore store =KeyStore.getInstance("PKCS12","BC"); 异常: java.security.KeyStoreException: PKCS12 not found java.security.NoSuchProviderException: no such provider: BC
你的inStream必须是DER-encoded 。
keyStore store=KeyStore.getInstance("JKS","SUN");
在前面要用一下Security.insertProviderAt(Provider provider, int position) 把供应商加进去。否则就会NoSuchProviderException。
还有数字签名和加密解密不是一回事,从你CreateCert()来看,并且把公钥类型PublicKey做参数传递,可能得到的是数字签名证书。
我不知道你用的哪个开发包,我曾购买使用过keytools Crypto,很不错。
Hikaru(小新) jimjxr(宝宝猫)
Hikaru(小新) jimjxr(宝宝猫)
国内的项目好像不能用国外的证书服务提供商提供的数字证书,你只能选国内的CA中心了,你可以去南方电子商务认证中心(cnca.net)以及中国协卡(sheca.com)上看看。
你具体的构造过程是怎样的?
Certificate[] chain =new Certificate[1];
byte[] temp;
temp =cert.getBytes();
chain =X509Certificate.getInstance(temp);
可是有异常抛出,
cannot resolve symbol
symbol : method getInstance (byte[])
location: class java.security.cert.X509Certificate
chain[0] =X509Certificate.getInstance(temp);
getInstance(byte[])是抽象类的一个public static方法,你帮看看有什么错误,谢了!
InputStream inStream = new FileInputStream("fileName-of-cert");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
inStream.close();
证书信息保存为.cer文件.在MS的OS上可以打开查看信息.
我也在了解CA0证书的有关内容.
问题:
如何知道一个证书是有效的还是无效的?
谁有PKCS#7和PKCS#10的标准,如何应用?(PKCS#10 是证书申请时使用的标准)
请知道的朋友多多提拔
谢谢
运行到这里出现异常:
java.security.cert.CertificateException: Unsupported encoding
KeyStore store =KeyStore.getInstance("PKCS12","BC");
异常:
java.security.KeyStoreException: PKCS12 not found
java.security.NoSuchProviderException: no such provider: BC
int position)
把供应商加进去。否则就会NoSuchProviderException。
就是sun公司自己提供的,所以无需insertProviderAt了,如果用其他供应商的格式,必须先insertProviderAt。
供应商的名字是BC
我该用insertProviderAt("BC",?); position是什么?
CRL即证书废止列表包含失效证书情报。
PKCS#7和PKCS#10的标准网上可以查到,自己实现有点困难。购买第三方的软件应用很方便。他们的主题都是x.509,只是外包装形式的不一样罢了~
J2SDK1.4我还没仔细看过,如果提到了且实现了的话,肯定是可以用的。
请教一下:
如何辨认一个证书是有效的还是无效的.CRL是根据什么来判断证书的有效性.例如我自己颁发一个证书.java类CRL是不是要连接上认证中心来判断这个证书的有效性还是其他方式?
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
Security.addProvider(new BouncyCastleProvider());
现在的问题是:
InputStream inStream2 =new FileInputStream("aa.cer");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert2 = (X509Certificate)cf.generateCertificate(inStream2);
inStream2这样new后是否有数据?KeyStore store =KeyStore.getInstance("PKCS12","BC");
store.load(null, null);
store.setKeyEntry("NANTIAN", privKey, psw, chain);
OutputStream outStream = new FileOutputStream("nantian.p12");
store.store(outStream, psw);
但是异常:
Exception in thread "main" java.lang.ExceptionInInitializerError: java.lang.SecurityException: Cannot set up certs for trusted CAs: java.lang.SecurityException:Cannot authenticate jar:file:C:/Program Files/JavaSoft/JRE/1.3.1/lib/security/US_export_policy.jar!/java.security.PrivilegedActionException <<java.util.zip.ZipException: 系统找不到指定的文件。>>
帮忙看看,谢了!
你自己当然可以颁发一个证书喽,不过你可以试试看,谁会信任你这张证书,呵呵~
是哪一行出错的阿?
store.store(fOut, psw);//这行
java中CRL类实现证书的有效性是根据:证书的颁发机构,然后到该颁发机构通过CRL来验证该证书是否有效.
是这样吗?
如果是的话,你可能遇到了jdk的bug,因为Program Files之间有个空格。
这不是笑谈,因为我在网上看到过这样的问题。我看你的出错信息是找不到指定文件,所以突然想到。
你可以试试看把环境换个目录装,不要有空格。
PrivateKey =KeyFactory.generatePrivate(RSAPrivateCrtKeySpec);
还有什么别的方法可以:
PrivateKey =xxxxxxxxx.xxxxxxxxxx(String/byte[]);
public_key_bytes是byte[]