如果想从头编可以到www.rsa.com下载PKCS#12的规范。Bouncy Castle的JCE应该支持PKCS#12,但我没用过:http://www.bouncycastle.org/

解决方案 »

  1.   

    jimjxr(宝宝猫) 我去看看先,谢谢,你有做过这方面的东西吗?看来比较熟悉啊!
      

  2.   

    推荐一本书《JAVA安全性编程指南》
      

  3.   

    jimjxr(宝宝猫) 我看了一下,没有弄明白,其中的CreateCert()的参数竟然都是java.security.PublicKey类型,这是生成什么证书,我都分特了!!!
      

  4.   

    jimjxr(宝宝猫) 再指点一二吧,我很着急,下个月就要交东西了,帮忙啊!!!
      

  5.   

    我用的加解密的部分,没用过认证部分。我不太懂你问的CreateCert()是什么意思,不过你如果想生成PKCS #12 Keystore,在src\org\bouncycastle\jce\examples下面有一个例子。
      

  6.   

    我是要创建一个PKCS#12格式的证书。因为我现在证书格式是PKCS#7和PKCS#10,证书和密钥是分开的。
      

  7.   

    证书主体都是以X509为标准的,证书当然不能和私人密匙一起传递,不安全。
    还有数字签名和加密解密不是一回事,从你CreateCert()来看,并且把公钥类型PublicKey做参数传递,可能得到的是数字签名证书。
    我不知道你用的哪个开发包,我曾购买使用过keytools Crypto,很不错。
      

  8.   

    客户端下载证书后,如何让证书自动装载,有没有做过?
    Hikaru(小新) jimjxr(宝宝猫)
      

  9.   

    客户端下载证书后,如何让证书自动装载,有没有做过?
    Hikaru(小新) jimjxr(宝宝猫)
      

  10.   

    Hikaru(小新) 我现在只是作测试证书的下载,所以证书和密钥一块发送。正式证书肯定不能这样了,呵呵。你的开发包在什么地方买的,多少钱?
      

  11.   

    我当时做的项目不是国内的,所以我没有用国内的证书服务提供商提供的数字证书,价钱我也不能说,反正都是客户出的。
    国内的项目好像不能用国外的证书服务提供商提供的数字证书,你只能选国内的CA中心了,你可以去南方电子商务认证中心(cnca.net)以及中国协卡(sheca.com)上看看。
      

  12.   

    我现在取得了一个证书,是一个字符串,但是我如何使这个字符串转换为X509Certificate对象呢,这点我很疑惑,X509Certificate这个类到底有什么用?他好像没有一个创建证书的方法!!!
      

  13.   

    不会啊,你直接用X509Certificate的构造函数构造就行了(可能要用byte[]的形式)。
    你具体的构造过程是怎样的?
      

  14.   

    我现在用cert是String类型的证书
    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方法,你帮看看有什么错误,谢了!
      

  15.   

    啊?我有点明白你的做法了。你用的是java.security.cert.X509Certificate啊,应该象下面这样用,是个InputStream 
     InputStream inStream = new FileInputStream("fileName-of-cert");
     CertificateFactory cf = CertificateFactory.getInstance("X.509");
     X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
     inStream.close();
      

  16.   

    Hikaru(小新) 做法是对的.
    证书信息保存为.cer文件.在MS的OS上可以打开查看信息.
    我也在了解CA0证书的有关内容.
    问题:
    如何知道一个证书是有效的还是无效的?
    谁有PKCS#7和PKCS#10的标准,如何应用?(PKCS#10 是证书申请时使用的标准)
    请知道的朋友多多提拔
    谢谢
      

  17.   

    X509Certificate  cert  =  (X509Certificate)cf.generateCertificate(inStream);
    运行到这里出现异常:
    java.security.cert.CertificateException: Unsupported encoding
      

  18.   

    上面的没问题了,现在遇到这个问题:
    KeyStore store =KeyStore.getInstance("PKCS12","BC");
    异常:
    java.security.KeyStoreException: PKCS12 not found
    java.security.NoSuchProviderException: no such provider: BC
      

  19.   

    你的inStream必须是DER-encoded 。
      

  20.   

    keyStore store=KeyStore.getInstance("JKS","SUN");
      

  21.   

    在前面要用一下Security.insertProviderAt(Provider provider,
                                       int position)
    把供应商加进去。否则就会NoSuchProviderException。
      

  22.   

    楼上说的keyStore  store=KeyStore.getInstance("JKS","SUN");
    就是sun公司自己提供的,所以无需insertProviderAt了,如果用其他供应商的格式,必须先insertProviderAt。
      

  23.   

    我现在用的是http://www.bouncycastle.org/的开发包
    供应商的名字是BC
    我该用insertProviderAt("BC",?);  position是什么?
      

  24.   

    但是为什么PKCS12它也不认识呢?奇怪,J2SDK1.4里面明明提到了啊有JKS和PKCS12两种的,为什么JKS可以,PKCS12就不行呢?
      

  25.   

    to lhdyf(lhdyf)
    CRL即证书废止列表包含失效证书情报。
    PKCS#7和PKCS#10的标准网上可以查到,自己实现有点困难。购买第三方的软件应用很方便。他们的主题都是x.509,只是外包装形式的不一样罢了~
      

  26.   

    注意Provider 是个类不是一般的String,后面的参数是位置号,写1就可以了~
    J2SDK1.4我还没仔细看过,如果提到了且实现了的话,肯定是可以用的。
      

  27.   

    to Hikaru(小新),
    请教一下:
    如何辨认一个证书是有效的还是无效的.CRL是根据什么来判断证书的有效性.例如我自己颁发一个证书.java类CRL是不是要连接上认证中心来判断这个证书的有效性还是其他方式?
      

  28.   

    这个可以了
    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: 系统找不到指定的文件。>>
    帮忙看看,谢了!
      

  29.   

    每个认证中心都会提供实时查询CRL的,你的程序对相应的CRL要进行自动验证。
    你自己当然可以颁发一个证书喽,不过你可以试试看,谁会信任你这张证书,呵呵~
      

  30.   

    to  night_knight(黑夜骑士只抽红河)
    是哪一行出错的阿?
      

  31.   

    FileOutputStream fOut = new FileOutputStream("id.p12");
    store.store(fOut, psw);//这行
      

  32.   

    to Hikaru(小新)
    java中CRL类实现证书的有效性是根据:证书的颁发机构,然后到该颁发机构通过CRL来验证该证书是否有效.
    是这样吗?
      

  33.   

    原来是我JRE更新版本遗留下来的问题,java就是老出现这些配置问题,浪费时间也没办法啊!!!!
      

  34.   

    你的jdk是不是装在Program  Files下了,就是说默认路径。
    如果是的话,你可能遇到了jdk的bug,因为Program  Files之间有个空格。
    这不是笑谈,因为我在网上看到过这样的问题。我看你的出错信息是找不到指定文件,所以突然想到。
    你可以试试看把环境换个目录装,不要有空格。
      

  35.   

    新版的jdk应该没什么问题了吧~
      

  36.   

    我有一个问题,一个String类型的PrivateKey如何转成PrivateKey的对象,我只知道这样生成一个私钥:
    PrivateKey =KeyFactory.generatePrivate(RSAPrivateCrtKeySpec);
    还有什么别的方法可以:
    PrivateKey =xxxxxxxxx.xxxxxxxxxx(String/byte[]);
      

  37.   

    比如publickey = keyFact.generatePublic(new X509EncodedKeySpec(public_key_bytes));
    public_key_bytes是byte[]
      

  38.   

    Karnak(神庙) 用你说的方法就可以了。
      

  39.   

    jimjxr(宝宝猫) 你给的资料太有用了,谢了!给分!!!