随便创建一个证书keystore(密钥仓库),就可以在实际的项目中使用吗???

jf007_jp 2010-01-13 06:40:34
各位高手,我想在实际的项目中使用SSL服务,按照网上的资料,随便创建一个证书keystore(密钥仓库)就可以吗?
还是需要买真正的证书keystore,敬请执教!
...全文
329 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jf007_jp 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 alugey 的回复:]
OPENSSL是一个开源项目,算是一个可以生成证书的工具。有点类似keytool。
OPENSSL更强大一些,可以生成标准格式证书,还可以对证书进行签名,等等,具体我不是很清楚,只用到生成证书功能。你可以用Google查一下相关资料。
[/Quote]

你说的意思,我明白了,谢谢!
alugey 2010-01-14
  • 打赏
  • 举报
回复
OPENSSL是一个开源项目,算是一个可以生成证书的工具。有点类似keytool。
OPENSSL更强大一些,可以生成标准格式证书,还可以对证书进行签名,等等,具体我不是很清楚,只用到生成证书功能。你可以用Google查一下相关资料。
jf007_jp 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 chdw 的回复:]
你可以下载OPENSSL生成根证书,这样就可以要求IE安装这个根证书到受信任的列表中,这样就可以避免每次弹出对话框。
[/Quote]

非常感谢你的指点!
实际上,我按照下面的资料,已经创建了证书
http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!791.entry

你说的OPENSSL,我不明白,它和SSL是什么关系?
我正在查找中。。。
jf007_jp 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 alugey 的回复:]
你需要了解一下证书的概念,和SSL的机制。
通常所说的证书是x.509证书格式,每个证书都含有一对密钥和一个指纹,一对密钥也就是公钥和私钥,公钥可以分发出去,私钥自己保密。用公钥加密的内容,只能用私钥解出;用私钥加密的内容,只能用公钥解出。
所以,只要是标准格式的密钥,采用的就会是标准的算法,不会因使用环境发生改变而改变。
只是Tomcat使用的是keystore格式的证书库,因此要把证书导入到keystore中。
在IIS中,可能也有证书库,你只要把证书导入到IIS的证书库中就行。
当然,证书因为格式不同可能需要转换,我所知道的就有P12,PIX,CER这些格式。
[/Quote]
非常感谢你的讲解,学习了!
ChDw 2010-01-14
  • 打赏
  • 举报
回复
你可以下载OPENSSL生成根证书,这样就可以要求IE安装这个根证书到受信任的列表中,这样就可以避免每次弹出对话框。
alugey 2010-01-14
  • 打赏
  • 举报
回复
//这是我从网上下下来的,将PFX证书转换成keystore的代码

package com.bjb.vch.test;


/**
* Convert PKCS12 format digital certificate(treated as a PKCS12 keystore)
* to a JKS format keystore, which could be used in JSSE(Although JSSE has
* a tool to recognize PKCS12, internally it's using JKS format).
*/
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.util.Enumeration;

public class ConvertPKCS12ToJKS
{
//certificate store format
public static final String PKCS12 = "PKCS12";
public static final String JKS = "JKS";

// PKCS12 keystore properties
public static final String INPUT_KEYSTORE_FILE = "D:\\OpenSSL\\cq\\cert.pfx"; //证书路径
public static final String KEYSTORE_PASSWORD = "1111"; //证书密码
// JKS output file
public static final String OUTPUT_KEYSTORE_FILE = "D:\\OpenSSL\\cq\\cert_new.keystore"; //导出证书路径
public static final String OUTPUT_KEYSTORE_PASSWORD = "xxxxxx"; //导出证书密码
public static final String OUTPUT_KEY_ALIAS = "cert_new"; //证书别名

public static void main(String[] args)
{
try
{
KeyStore inputKeyStore = KeyStore.getInstance("PKCS12");
FileInputStream fis = new FileInputStream(INPUT_KEYSTORE_FILE);

// If the keystore password is empty(""), then we have to set
// to null, otherwise it won't work!!!
char[] nPassword = null;
if ((KEYSTORE_PASSWORD == null) || KEYSTORE_PASSWORD.trim().equals(""))
{
nPassword = null;
}
else
{
nPassword = KEYSTORE_PASSWORD.toCharArray();
}
inputKeyStore.load(fis, nPassword);
fis.close();

System.out.println("keystore type=" + inputKeyStore.getType());

//----------------------------------------------------------------------
// get a JKS keystore and initialize it.
KeyStore outputKeyStore = KeyStore.getInstance("JKS");
// outputKeyStore.load(new FileInputStream(OUTPUT_KEYSTORE_FILE), "changeit".toCharArray());
outputKeyStore.load(null, "changeit".toCharArray());
// Now we loop all the aliases, we need the alias to get keys.
// It seems that this value is the "Friendly name" field in the
// detals tab <-- Certificate window <-- view <-- Certificate
// Button <-- Content tab <-- Internet Options <-- Tools menu
// In MS IE 6.
Enumeration enumd = inputKeyStore.aliases();
while (enumd.hasMoreElements()) // we are readin just one certificate.
{
String keyAlias = (String)enumd.nextElement();
System.out.println("alias=[" + keyAlias + "]");
if (inputKeyStore.isKeyEntry(keyAlias))
{
Key key = inputKeyStore.getKey(keyAlias, nPassword);
Certificate[] certChain = inputKeyStore.getCertificateChain(keyAlias);
System.out.println("key.format=" + key.getFormat());
System.out.println("" + new String(key.getAlgorithm()));
outputKeyStore.setKeyEntry(OUTPUT_KEY_ALIAS, key, OUTPUT_KEYSTORE_PASSWORD.toCharArray(), certChain);
}
}
FileOutputStream out = new FileOutputStream(OUTPUT_KEYSTORE_FILE);
outputKeyStore.store(out, OUTPUT_KEYSTORE_PASSWORD.toCharArray());
out.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

loveunittesting 2010-01-14
  • 打赏
  • 举报
回复
可以用,但是有警告,所以最好在使用者客户端上安装证书。
alugey 2010-01-14
  • 打赏
  • 举报
回复
有点笔误。
是PFX格式不是PIX格式。
alugey 2010-01-14
  • 打赏
  • 举报
回复
你需要了解一下证书的概念,和SSL的机制。
通常所说的证书是x.509证书格式,每个证书都含有一对密钥和一个指纹,一对密钥也就是公钥和私钥,公钥可以分发出去,私钥自己保密。用公钥加密的内容,只能用私钥解出;用私钥加密的内容,只能用公钥解出。
所以,只要是标准格式的密钥,采用的就会是标准的算法,不会因使用环境发生改变而改变。
只是Tomcat使用的是keystore格式的证书库,因此要把证书导入到keystore中。
在IIS中,可能也有证书库,你只要把证书导入到IIS的证书库中就行。
当然,证书因为格式不同可能需要转换,我所知道的就有P12,PIX,CER这些格式。
Z_FEI 2010-01-14
  • 打赏
  • 举报
回复
学习下
jf007_jp 2010-01-14
  • 打赏
  • 举报
回复
再问一下,一个ssl 证书可以同时用在两种服务器上吗?
比如说,现在用在IIS上的ssl 证书,还可以用到Tomcat上,而不用购买新的
alugey 2010-01-14
  • 打赏
  • 举报
回复
可以的。
如在Tomcat中,可以用自己生成的keystore做为服务器证书。
但是有个问题,这跟SSL的安全机制有关系,就是证书需要经过一个权威机构的认证(也就是签名),这样才会被大家所认可。所以自己生成的证书,在访问时IE会有一个警告,提示证书未经认证之类的信息,当然可以忽略警告继续使用。
jf007_jp 2010-01-14
  • 打赏
  • 举报
回复
经常得到上面两位高手的帮助,非常感谢!
wenjjing2lianee 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 warison2008 的回复:]
实际的项目当然是买啦
[/Quote]

jdk里的不能用于实际的.
道光2008 2010-01-13
  • 打赏
  • 举报
回复
实际的项目当然是买啦

81,123

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧