Java.security与javax.security的区别

12

我对Java(6+)安全框架的分发有些困惑。一方面,你有以下包(以及它们各自的子包和类型):

  • java.security.*
  • javax.security.*

另一方面,你还有java.lang.SecurityManager,以及可能在其他非安全包(如java.lang)中出现的其他安全相关类型。

所以有几个问题:

  1. java.securityjavax.security之间有什么区别?何时使用每个类型?
  2. 除了java.lang,是否存在其他安全型类型出现的包,如果有,它们是什么?
  3. JCE和JCA在这里属于哪个范畴?它们包含哪些包,还是它们完全独立并位于它们自己的JAR中?

我不是这些包使用方面的专家,但这个问题看起来太宽泛了。在发帖之前你有搜索过吗? - Luiggi Mendoza
是的,但似乎没有一个好的解释我的第一个问题。至于我的第二个问题,就像在干草堆里找针一样:当我甚至不知道我在寻找什么时,我该如何搜索整个JRE以获取安全中心类型。在访问JCE主页之后,他们提供的只是下载一些司法管辖政策文件,而不是包含实际类型的JAR。这使我相信JCE是JRE的一部分,但看不到像“java.security.jce”等的包。 - IAmYourFaja
1
如果您的问题纯粹与JCE有关,则答案是“是”,它包含在jre中。 - jtahlborn
感谢@jtahlborn (+1) - 但是JCA呢?还有关于上面的#1和#2我仍然在想。再次感谢! - IAmYourFaja
是的,JCA也全部包含在内。 - jtahlborn
1个回答

8
分离主要是出于历史原因。曾经美国对密码软件实行出口限制。
一般来说:与签名有关的内容可以在java.security中找到,其他内容(如密码等)可以在javax.security中找到。
现在JRE已经捆绑了标准安全提供程序,因此JCE是平台的一部分。

感谢@Henry (+1) - 有几个后续问题:(1) JCE和JCA是相同的吗,还是它们不同(如果不同,又是如何不同的)?(2) JCE本身是否是一个API(像JDBC或JPA一样),还是安全API的参考实现?如果是后者,它是什么的参考实现?(3)除了java.security.*、javax.security.*和SecurityManager之外,JRE中还有哪些部分属于“安全框架”?再次感谢! - IAmYourFaja
@TicketMonster - 你有什么具体想要确定的吗? - jtahlborn
1
我不是专家,但我认为JCA主要是一个规范,而JCE则是其实现。它是一种插件架构,因此在框架的底层还可以使用其他安全提供程序。 - Henry
1
SecurityManager有不同的目的,它与加密无关,而是与Java的沙盒模型相关,该模型允许限制不受信任代码的某些操作(如文件访问)。 - Henry
啊,再次感谢@Henry(+1)。所以只是确认一下:JCA是API,而JCE是该API的参考实现,就像弹性城堡军团也提供了它的实现。因此,JCE和弹性城堡是“竞争的JCA实现”,如果你愿意这样说的话。这个评估合理吗?再次感谢! - IAmYourFaja
Bouncy Castle曾经是一个竞争性的实现,对于后来的Java版本而言,它只是一个安全提供者,并在JCE框架内运行。此外还有一些额外的内容。 - Henry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接