tomcat密钥库是怎么生成的?

缘缘 2012-03-23 04:26:45
例如一句命令:keytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore -keysize 1024 -dname "CN=localhost, OU=share, O=share, L=wuxi, S=jiangsu, C=CN" -storepass password -keypass password
这样一句命令,里面的具体操作是什么样的呢?
例如生成公钥,生成私钥,签名密钥,验签这样的步骤,想知道,有人研究过没?
另外,keystore里面存放的是什么?公钥和私钥?
看结帖率,咱从不拖欠!
跪求大神啊!
...全文
215 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
缘缘 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]

你自己要实现 JCE 的 Provider 啊?建议你还是不要这么做了,如果 Sun JCE Provider 不够用的话,可以看看 BouncyCastle JCE Provider
[/Quote]
抱歉一直没时间上论坛。自己的provider大部分和SUN的一致,但其中需要修改一部分代码,把软件做私钥签名的步骤用硬件来实现,硬件里面存贮有公私钥对,在安全上有保障,同时在速度上也有优势。
现在是Provider写好了,可以通过硬件加密,但是一直生成不了数字签名证书
  • 打赏
  • 举报
回复
SPI 就是 service provider interface 的意思,是 Java 提供的扩展机制。在 Java 密码学及安全类库和 J2EE 类库中大量地采用了 SPI 机制。
  • 打赏
  • 举报
回复
1:继承 java.security.Provider 实现一个自己的 Provider
2:使用 Security.addProvider 方法添加你的这个 Provider
3:当然了,你需要自己实现 JCE 中相关的 SPI 类,比如你打算自行实现一个消息摘要算法,那么需要继承 java.security.MessageDigestSpi 这个类
  • 打赏
  • 举报
回复
你自己要实现 JCE 的 Provider 啊?建议你还是不要这么做了,如果 Sun JCE Provider 不够用的话,可以看看 BouncyCastle JCE Provider
缘缘 2012-04-01
  • 打赏
  • 举报
回复
愚人节了啊!哪个哥能给点信息啊!!!
alan_219_2008 2012-03-31
  • 打赏
  • 举报
回复
以前配置HTTPS的时候生成过 不过具体里面放的是什么还真不太了解
YangMingGood 2012-03-31
  • 打赏
  • 举报
回复
数据结构:JAVA实现RSA算法
实现一对密钥对整个项目所有加密解密文件都适用的方法,采用先生成一对密钥.保存到xml文件中,以后获得私匙和公钥只需要从xml文件中取得就可以了.
  /**
  * 把成生的一对密钥保存到RSAKey.xml文件中
  */
  public void saveRSAKey() {
  try {
  SecureRandom sr = new SecureRandom();
  KeyPairGenerator kg = KeyPairGenerator.getInstance(\"RSA\",
  new org.bouncycastle.jce.provider.BouncyCastleProvider());
  //注意密钥大小最好为1024,否则解密会有乱码情况.
  kg.initialize(1024, sr);
  FileOutputStream fos = new FileOutputStream(\"C:/RSAKey.xml\");
  ObjectOutputStream oos = new ObjectOutputStream(fos);
  //生成密钥
  oos.writeObject(kg.generateKeyPair());
  oos.close();
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
  注意:需要从http://www.bouncycastle.org下载bcprov-jdk14-137.jar包.
  获取密钥方法如下:
  /**
  * 获得RSA加密的密钥。
  * @return KeyPair返回对称密钥
  */
  public static KeyPair getKeyPair() {
  //产生新密钥对
  KeyPair kp;
  try {
  String fileName = \"conf/RASKey.xml\";
  InputStream is = FileUtils.class.getClassLoader()
  .getResourceAsStream(fileName);
  ObjectInputStream oos = new ObjectInputStream(is);
  kp = (KeyPair) oos.readObject();
  oos.close();
  } catch (Exception e) {
  throw new EprasRuntimeException(\"读取加密文件出错.\", e);
  }
  return kp;
  }
  文件采用RSA算法加密文件
  /**
  * 文件file进行加密并保存目标文件destFile中
  * @param srcFileName
  * 要加密的文件 如c:/test/srcFile.txt
  * @param destFileName
  * 加密后存放的文件名 如c:/加密后文件.txt
  */
  public static void encryptFile(String srcFileName,
  String destFileName) throws Exception {
  OutputStream outputWriter = null;
  InputStream inputReader = null;
  try {
  Cipher cipher = Cipher.getInstance(\"RSA/ECB/PKCS1Padding\",
  new org.bouncycastle.jce.provider.BouncyCastleProvider());
  byte[] buf = new byte[100];
  int bufl;
  cipher.init(Cipher.ENCRYPT_MODE, getKeyPair().getPublic());
  outputWriter = new FileOutputStream(destFileName);
  inputReader = new FileInputStream(srcFileName);
  while ((bufl = inputReader.read(buf)) != -1) {
  byte[] encText = null;
  byte[] newArr = null;
  if (buf.length == bufl) {
  newArr = buf;
  } else {
  newArr = new byte[bufl];
  for (int i = 0; i < bufl; i++) {
  newArr = (byte) buf;
  }
  }
  encText = cipher.doFinal(newArr);
  outputWriter.write(encText);
  }
  outputWriter.flush();
  } catch (Exception e) {
  throw e;
  } finally {
  try {
  if (outputWriter != null) {
  outputWriter.close();
  }
  if (inputReader != null) {
  inputReader.close();
  }
  } catch (Exception e) {
  }
  }
  }
  文件采用RSA算法解密文件
  /**
  * 文件file进行加密并保存目标文件destFile中
  * @param srcFileName
  * 已加密的文件 如c:/加密后文件.txt
  * @param destFileName
  * 解密后存放的文件名 如c:/ test/解密后文件.txt
  */
  public static void decryptFile(String srcFileName,
  String destFileName) throws Exception {
  OutputStream outputWriter = null;
  InputStream inputReader = null;
  try {
  Cipher cipher = Cipher.getInstance(\"RSA/ECB/PKCS1Padding\",
  new org.bouncycastle.jce.provider.BouncyCastleProvider());
  byte[] buf = new byte[128];
  int bufl;
  cipher.init(Cipher.DECRYPT_MODE, getKeyPair().getPrivate());
  outputWriter = new FileOutputStream(destFileName);
  inputReader = new FileInputStream(srcFileName);
  while ((bufl = inputReader.read(buf)) != -1) {
  byte[] encText = null;
  byte[] newArr = null;
  if (buf.length == bufl) {
  newArr = buf;
  } else {
  newArr = new byte[bufl];
  for (int i = 0; i < bufl; i++) {
  newArr = (byte) buf;
  }
  }
  encText = cipher.doFinal(newArr);
  outputWriter.write(encText);
  }
  outputWriter.flush();
  } catch (Exception e) {
  throw e;
  } finally {
  try {
  if (outputWriter != null) {
  outputWriter.close();
  }
  if (inputReader != null) {
  inputReader.close();
  }
  } catch (Exception e) {
  }
  }
  }
  如果对于大文件加密采用RSA算法执行速度要非常非常慢。
(提示需要下载 bcprov-jdk15-1.43.jar包)
酒比花香 2012-03-31
  • 打赏
  • 举报
回复
看来我不求甚解了。。帮顶
缘缘 2012-03-31
  • 打赏
  • 举报
回复
求顶!
缘缘 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

以前配置HTTPS的时候生成过 不过具体里面放的是什么还真不太了解
[/Quote]
用SUN的provider配置HTTPS是很OK的,但是现在问题是想要自己用自己的算法来替换SUN的算法,作为加密的provider,所以就想弄清楚里面到底是怎么运作的。现在我碰到问题是弄出来的keystore配置HTTPS是不成功的......
缘缘 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

数据结构:JAVA实现RSA算法
实现一对密钥对整个项目所有加密解密文件都适用的方法,采用先生成一对密钥.保存到xml文件中,以后获得私匙和公钥只需要从xml文件中取得就可以了.
/**
* 把成生的一对密钥保存到RSAKey.xml文件中
*/
public void saveRSAKey() {
try {
SecureRandom sr = new SecureRandom(……
[/Quote]
哥!虽然看起来是把一对密钥放到xml里面。但,我想知道的是用keytool生成数字证书的时候,所做的其中操作是什么。例如里面有一个参数,keysize =1024,其中有个步骤就是checkkeylength,那么这个步骤是什么时候做的呢?keystore里面存放的是一个经过CA签名的公钥和一个私钥,那么签名公钥这步操作是怎么进行的?私钥是怎么产生的?
缘缘 2012-03-28
  • 打赏
  • 举报
回复
求大神指点迷津!!!
shusheng1997 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
要死在这个问题上了,求高手大神!
[/Quote]
楼主帮你顶一个..
缘缘 2012-03-28
  • 打赏
  • 举报
回复
大神!!!高手!!!
dryZeng 2012-03-28
  • 打赏
  • 举报
回复
这个。。。。木研究过。帮顶了。
缘缘 2012-03-28
  • 打赏
  • 举报
回复
要死在这个问题上了,求高手大神!
kebin0001 2012-03-26
  • 打赏
  • 举报
回复
RSA算法
http://blog.yam.com/luyuanhsiung/article/9599539

KeyStore
http://hi.baidu.com/%D3%C0%B2%BB%D1%D4%C6%FA%B7%E8%D7%D3/blog/item/d669e5d4a00520cd50da4b70.html
缘缘 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 h_zai888 的回复:]

我只会用tomcat真的还没研究的那么深!帮你顶顶人气
[/Quote]谢啦!没人啊没人!跪求大神!
缘缘 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kebin0001 的回复:]

RSA算法
http://blog.yam.com/luyuanhsiung/article/9599539

KeyStore
http://hi.baidu.com/%D3%C0%B2%BB%D1%D4%C6%FA%B7%E8%D7%D3/blog/item/d669e5d4a00520cd50da4b70.html
[/Quote]
讲解的不够详细啊,有更详细一点的没?上面的那个RSA算法的链接被屏蔽了?打不开
h_zai888 2012-03-24
  • 打赏
  • 举报
回复
我只会用tomcat真的还没研究的那么深!帮你顶顶人气
加载更多回复(2)

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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