Java安全架构概览

介绍

Java平台在设计的时候就着重与安全方面,在Java核心设计中,Java语言本身就是类型安全的,并且提供了自动垃圾收集机制,用于增强代码的健壮性,类在加载时需要被验证,用于保证只有合法的Java代码会被执行。

初始的Java平台创建了一个安全的运行环境,用于执行那些可能不被信任的代码,例如从公共网络上下载下来的Java applets。随着平台的成长以及部署范围的扩展,Java安全体系结构也相应地演变为支持日益增长的一系列服务的集合。到今天,该架构已经是包含了一系列API,工具,常用算法实现,原型以及协议的巨大集合,为开发这提供了全面的用于编写应用的安全框架,也为用户和管理者提供了管理安全应用的工具集合。

Java安全API涉及的范围很广,加密和公钥基础设施(PKI)接口为开发安全应用程序提供了基础。用于执行身份验证和访问控制的接口使应用程序能够防止未经授权访问受保护的资源。

API允许算法和其他多个安全服务实现互操作性,服务采用Providers实现,Provider通过标准的接口接入Java平台,这使得应用程序很容易获得安全服务,而不必知道任何有关它们的实现细节。这使开发人员可以专注于如何将安全性集成到应用程序中,而不是如何实际的实现复杂的安全机制。

Java语言安全性和字节码验证

Java语言被设计为类型安全且易于使用。它提供了自动内存管理,垃圾收集和对数组的范围检查。这减少了开发人员的整体编程负担,产生更少的细微编程错误,以及更安全,更健壮的代码。另外,Java语言定义了可以分配给Java类,方法和字段的不同访问修饰符,使开发人员能够根据需要限制对其类实现的访问。具体来说,该语言定义了四个不同的访问级别:private,protected,public,如果没有指定,默认为包级别的访问。public被允许给任何人公开访问。 private限制性最强,不允许私有成员(例如方法)之外的任何人访问。 protected修饰符允许访问同一包中的其他类及其任何子类。 包级访问只允许访问相同包中的类。

编译器将Java程序翻译成与机器无关的字节码表示。运行时会调用字节码验证器来确保在Java运行时中只执行合法的字节码。检查字节码是否符合Java语言规范,并且不要违反Java语言规则或命名空间限制。验证器还检查内存管理违规行为,堆栈下溢或溢出以及非法数据类型转换。一旦这些字节码得到验证,Java运行时就准备好执行这些字节码。

基础安全架构

Java平台定义了一系列覆盖主要安全领域的API,包括密码学,公共密钥基础设施,认证,安全通信和访问控制。这些API允许开发人员将安全性轻松集成到应用程序代码中。 他们是围绕以下原则设计的:

实现独立性
应用程序不需要自己实现安全性。 相反,他们可以从Java平台请求安全服务。安全服务在Provider(见下文)中实现,通过标准接口接入Java平台。 应用程序可能依靠多个独立的提供者来提供安全功能。
实现互操作性
Provider可以跨应用程序进行互操作。 具体而言,应用程序不绑定到特定的提供者,而提供者也不绑定到特定的应用程序。
算法可扩展性
Java平台包含许多内置的Provider,这些Provider实现了当今广泛使用的一组基本的安全服务。但是,一些应用程序可能依赖尚未实施的新兴标准或专有服务。 Java平台支持安装实现这些服务的定制提供程序。

安全提供者

java.security.Provider 类在Java平台中封装了安全提供者的概念。它指定提供者的名字并列出它实现的安全服务。可以同时配置多个提供程序,并按优先顺序列出。当应用请求安全服务时,选择实现该服务的最高优先级提供者。

应用程序依靠相关的getInstance方法从底层提供者获取安全服务。例如,消息摘要创建表示提供者可用的一种服务类型。(第4节讨论消息摘要和其他加密服务。)应用程序调用java.security.MessageDigest类中的getInstance方法来获取特定消息摘要算法(如SHA-256)的实现。

MessageDigest md = MessageDigest.getInstance("SHA-256");

程序可以通过指定Provider名称来选择性地从特定提供者请求实现,如下所示:

MessageDigest md = MessageDigest.getInstance("SHA-256", "ProviderC");

图1和图2说明了用于请求SHA-256消息摘要实现的这些选项。这两张图都显示了三个实现消息摘要算法的Provider。 Provider按照优先顺序从左至右排列(1-3)。 在图1中,应用程序请求SHA-256算法实现而不指定提供者名称。 提供程序按优先顺序搜索,并返回提供该特定算法ProviderB的第一个提供程序的实现。 在图2中,应用程序请求来自特定提供者ProviderC的SHA-256算法实现。 这次,即使具有更高优先顺序的提供者ProviderB也提供了SHA-256实现,但是仍然将返回ProviderC的实现。
Java安全架构概览_第1张图片 图1 自动搜索Provider

Java安全架构概览_第2张图片图2 指定特定的Provider

Oracle的Java平台实现包括许多预先配置的默认提供程序,这些提供程序实现了可供应用程序使用的一组基本安全服务。请注意,Java平台的其他供应商可能会实现封装了基于厂商特定的安全服务。当本文提到内置的默认Provider时,指的是Oracle实现那些Provider。

以下关于各种安全领域(密码学,认证等)的章节都包括对默认提供者提供的相关服务的描述。 附录C中的表格总结了所有的默认提供者。

安全配置文件位置

本文提到的Java安全性的某些方面(包括提供者的配置)可以通过设置安全属性来定制。您可以在安全属性文件中静态设置安全性属性,默认情况下是安装Java™运行时环境(JRE)的目录的lib / security目录中的java.security文件。安全属性也可以通过调用Security类的适当方法(在java.security包中)动态设置。

本文提到的工具和命令都在〜jre / bin目录中,其中〜jre代表安装JRE的目录。 第5节中提到的cacerts文件在〜jre / lib / security中。

加解密

Java密码体系结构是访问和开发Java平台的密码功能的框架。 它包括各种加密服务的API,包括:

  • 消息摘要算法
  • 数字签名算法
  • 对称批量加密
  • 对称流加密
  • 不对称加密
  • 基于密码的加密(PBE)
  • 椭圆曲线密码(ECC)
  • 密钥协商算法
  • 密钥生成器
  • 消息认证码(MAC)
  • (伪)随机数发生器

出于历史(出口控制)的原因,加密API被组织成两个不同的包。java.security包中包含不受导出控制的类(如Signature和MessageDigest)。 javax.crypto包中包含受控于导出控制的类(如Cipher和KeyAgreement)。

加解密接口是基于Provider的,允许多个互操作的密码实现。 一些Provider可以用软件执行密码操作; 其他人可以在硬件令牌上执行操作(例如,在智能卡设备上或在硬件密码加速器上)。实现了那些出口限制服务的Provider必须进行数字签名。

Java平台包括许多最常用的密码算法(包括RSA,DSA和ECDSA签名算法,AES加密算法,SHA-2消息摘要算法和Diffie-Hellman(DH))的内置提供程序。 和椭圆曲线Diffie-Hellman(ECDH)密钥协商算法。大多数内置提供程序都使用Java代码实现加密算法。

Java平台还包含一个内置提供程序,它作为使用本地PKCS#11(v2.x)的Token。 这个名为SunPKCS11的Provider允许Java应用程序无缝访问兼容于PKCS#11的加密服务。

在Windows上,Java平台包含一个内置的提供程序,可以充当本地Microsoft CryptoAPI的桥梁。 这个名为SunMSCAPI的Provider允许Java应用程序通过CryptoAPI在Windows上无缝访问加密服务。

公钥基础设置PKI

公钥基础设施(PKI)是一个用于框架的术语,该框架能够基于公钥密码术实现安全的信息交换。它允许将身份(人员,组织等)绑定到数字证书,并提供验证证书真实性的方法。 PKI包括密钥,证书,公共密钥加密以及生成和数字签名证书的可信证书颁发机构(CA)。Java平台包括对X.509数字证书和证书撤销列表(CRL)的Provider支持的API,以及符合PKIX的认证路径构建和验证。 与PKI相关的类位于java.security和java.security.cert包中。

密钥和证书存储

Java平台通过密钥和证书存储Provider提供密钥和证书的长期持久存储。 具体而言,java.security.KeyStore类表示密钥库,加密密钥和/或可信证书的安全存储库(例如,在证书路径验证期间使用)以及java.security.cert.CertStore类表示 一个证书存储区,一个公共的证书库和和潜在的不受信任的证书库通常是不相关的。 CertStore也可以存储CRL。

KeyStore和CertStore的实现需要按类型区分。 Java平台包括标准的PKCS11和PKCS12密钥存储类型(它的实现符合RSA的PKCS规范)。它还包含一个称为JKS(代表“Java Key Store”)专用的基于文件的密钥存储类型和一个称为DKS(“Domain Key Store”)的类型,在密钥库集合中代表单独的逻辑密钥库。

Java平台包含一个特殊的内置JKS密钥存储区cacerts,它包含许多用于众所周知的可信CA的证书。 keytool实用程序能够列出包含在cacerts中的证书(请参阅第10节中的安全功能文档链接)。

在“加解密”部分(第4节)中提到的SunPKCS11提供程序包含一个PKCS11 KeyStore实现。这意味着位于安全硬件(如智能卡)中的密钥和证书可以通过KeyStore API被Java应用程序访问和使用。请注意,智能卡密钥可能不允许离开设备。 在这种情况下,由KeyStore API返回的java.security.Key对象引用可能仅仅是对键的引用(也就是说,它不包含实际的密钥材料)。 这样的密钥对象只能用于在实际密钥所在的设备上执行密码操作。

Java平台还包括LDAP证书存储类型(用于访问存储在LDAP目录中的证书)以及位于内存中的证书存储类型集合(用于访问由java.util.Collection对象管理的证书)。

PKI工具

有两个内置工具可用于处理密钥,证书和密钥存储区
keytool 用于创建和管理密钥库. 它可以做到:

  • 创建公钥/私钥对
  • 显示,导入和导出作为文件存储的X.509 v1,v2和v3证书
  • 创建自签名证书
  • 颁发证书(PKCS#10)请求发送到CA
  • 根据证书请求创建证书
  • 导入证书回复(从CA发送证书请求获得)
  • 指定公钥证书为可信
  • 接受密码并将其作为密钥安全地存储

jarsigner工具用于对JAR文件进行签名,或者对已签名的JAR文件进行签名验证。Java ARchive(JAR)文件格式允许将多个文件捆绑到一个文件中。 通常,JAR文件包含与应用程序相关的类文件和辅助资源。 当你想要对代码进行数字签名时,首先使用keytool来生成或导入适当的密钥和证书到密钥存储区(如果它们不存在的话),然后使用jar工具将代码放入JAR文件中,最后使用 jarsigner工具来签署JAR文件。jarsigner工具访问密钥库以查找签署JAR文件或验证签名JAR文件签名所需的任何密钥和证书。 注意:jarsigner可以选择性地生成包含时间戳的签名。 验证JAR文件签名的系统(例如Java插件)可以检查时间戳并接受签名证书有效时签名的JAR文件,但不是要求证书是最新的。 (证书通常每年到期,期望JAR文件创建者每年重新签署已部署的JAR文件的证书是不合理的。)

认证

认证是确定用户身份的过程。 在Java运行时环境的上下文中,识别正在执行的Java程序的用户是一个过程。 在某些情况下,这个过程可能依赖于“加解密”部分(第4节)中描述的服务。

Java平台提供的API使应用程序可以通过可插入登录模块执行用户身份验证。 应用程序调用LoginContext类(在javax.security.auth.login包中),后者又引用一个配置。 该配置指定要使用哪个登录模块(javax.security.auth.spi.LoginModule接口的实现)来执行实际身份验证。

由于应用程序只与标准的LoginContext API对话,因此它们可以独立于底层的插件模块。 可以为应用程序插入新的或更新的模块,而无需修改应用程序本身。 图3说明了应用程序和底层登录模块之间的独立性:
Java安全架构概览_第3张图片
图3 身份验证登录模块接入身份验证框架

需要注意的是,虽然登录模块是可插入的组件,可以配置到Java平台中,但是它们不是通过安全提供程序插入的。 因此,他们不遵循第3节中描述的提供者搜索模型。相反,如上图所示,登录模块是通过自己独特的配置进行管理的。

Java平台提供了以下内置的LoginModule,全部在com.sun.security.auth.module包中:

  • Krb5LoginModule:使用Kerberos协议进行身份验证
  • JndiLoginModule:使用LDAP或NIS数据库进行用户名/密码认证
  • KeyStoreLoginModule:用于登录到任何类型的密钥库,包括PKCS#11密钥库token

在建立两个对等体之间的安全通信信道的过程中也可以实现认证。 Java平台提供了许多标准通信协议的实现,将在下一节讨论。

安全通信

通过网络传播的数据可以被不是预期收件人的人访问。当数据包括密码和信用卡号码等私人信息时,必须采取措施使数据对未授权方不可理解。确保您将数据发送给适当的参与方也很重要,并且在运输过程中数据没有被有意或无意地修改。

SSL/TLS

Java平台提供SSL和TLS协议的API实现,其中包括数据加密,消息完整性,服务器身份验证和可选的客户端身份验证功能。 应用程序可以使用SSL / TLS来通过任何应用程序协议(例如TCP / IP之上的HTTP)在两个对等点之间提供数据的安全通道。

javax.net.ssl.SSLSocket类表示一个网络套接字,它在正常的流套接字(java.net.Socket)之上封装了SSL / TLS支持。 某些应用程序可能希望使用备用数据传输抽象(例如New-I / O)。 javax.net.ssl.SSLEngine类可用于生成和使用SSL / TLS数据包。

Java平台还包括支持可插拔(基于Provider)密钥管理器和信任管理器概念的API。 密钥管理器由javax.net.ssl.KeyManager类封装,并管理用于执行身份验证的密钥。 TrustManager类(在同一个包中)封装了一个信任管理器,并根据它所管理的密钥库中的证书决定要信任的人。

Java平台包含一个实现SSL / TLS协议的内置提供程序:

  • SSLv3
  • TLSv1
  • TLSv1.1
  • TLSv1.2

SASL

简单身份验证和安全层(SASL)是一种Internet标准,用于指定客户端和服务器应用程序之间的身份验证和可选安全层的协议。 SASL定义了如何交换认证数据,但是本身不指定数据的内容。 这是一个框架,指定可用的认证数据的内容和语义的特定认证机制。 因特网社区为各种安全级别和部署方案定义了许多标准的SASL机制。

Java SASL API为使用SASL机制的应用程序定义了类和接口。 它被定义为中立的机制; 使用API的应用程序不需要硬连线到使用任何特定的SASL机制。 应用程序可以根据所需的安全功能选择使用的机制。 该API支持客户端和服务器应用程序。 javax.security.sasl.Sasl类用于创建SaslClient和SaslServer对象。

提供程序包中提供了SASL机制实现。 每个Provider可以支持一个或多个SASL机制,并通过标准Provider架构进行注册和调用。

Java平台包含一个实现以下SASL机制的内置提供程序:

  • CRAM-MD5,DIGEST-MD5,EXTERNAL,GSSAPI,NTLM和PLAIN客户端机制
  • CRAM-MD5,DIGEST-MD5,GSSAPI和NTLM服务器机制

GSS-API 和 Kerberos

Java平台包含一个具有通用安全服务应用程序编程接口(GSS-API)的Java语言实现的API。 GSS-API为应用程序员提供了在各种底层安全机制上对安全服务的统一访问。 Java GSS-API当前需要使用Kerberos v5机制,而Java平台包含此机制的内置实现。 目前,无法插入其他机制。 注意:第6节中提到的Krb5LoginModule可以与GSS Kerberos机制一起使用。

Java平台还包含简单和受保护的GSSAPI协商机制(SPNEGO)GSS-API机制的内置实现。

在两个应用程序可以使用Java GSS-API在它们之间安全地交换消息之前,它们必须建立一个联合安全上下文。 上下文封装了可能包括例如密码密钥的共享状态信息。 这两个应用程序都创建并使用org.ietf.jgss.GSSContext对象来建立和维护构成安全上下文的共享信息。 一旦建立了安全上下文,它就可以用来准备安全的交换消息。

Java GSS API位于org.ietf.jgss包中。 Java平台还定义了基本的Kerberos类,如位于javax.security.auth.KerberosPrincipal, KerberosTicket, KerberosKey, and KeyTab in the kerberos package.

访问控制

Java平台中的访问控制体系结构保护对敏感资源(例如本地文件)或敏感应用程序代码(例如,类中的方法)的访问。 所有的访问控制决策都由一个安全管理器来调度,由java.lang.SecurityManager类表示。 SecurityManager必须安装到Java运行时才能激活访问控制检查。

Java小应用程序和Java™Web Start应用程序会在安装了SecurityManager的情况下自动运行。 但是,通过java命令执行的本地应用程序默认情况下不会在安装SecurityManager的情况下运行。 为了使用SecurityManager运行本地应用程序,应用程序本身必须通过setSecurityManager方法(在java.lang.System类中)以编程方式设置一个应用程序,或者必须在命令行上使用-Djava.security.manager参数调用命令。

权限

当Java代码被类加载器加载到Java运行时时,类加载器会自动将以下信息与该代码关联:

  • 代码从哪里加载
  • 谁签署了代码(如果有的话)
  • 授予代码的默认权限

无论代码是通过不可信网络(例如,小应用程序)下载还是从文件系统(例如,本地应用程序)加载,该信息都与代码相关联。 加载代码的位置由URL表示,代码签名者由签名者的证书链表示,默认权限由java.security.Permission对象表示。

自动授予下载代码的默认权限包括将网络连接返回到源自其的主机的能力。 自动授予从本地文件系统加载的代码的默认权限包括从它所来自的目录以及该目录的子目录中读取文件的能力。

请注意,执行代码的用户身份在class加载时不可用。 如有必要,应用程序代码负责验证最终用户(例如,如第6节所述)。 用户通过身份验证后,应用程序可以通过调用javax.security.auth.Subject类中的doAs方法将该用户与正在执行的代码进行动态关联。

策略

如前所述,类加载器为代码授予有限的一组默认权限。 管理员可以通过安全策略灵活地管理额外的代码权限。

Java平台将安全策略的概念封装在java.security.Policy类中。 在任何给定的时间,只有一个Policy对象安装到Java运行时。 Policy对象的基本职责是确定是否允许访问受保护的资源进行编码(以从何处加载,谁签名以及谁执行它为特征)。 策略对象如何做出这个决定是依赖于实现的。 例如,它可能会咨询包含授权数据的数据库,或者可能会联系其他服务。

Java平台包含一个默认的Policy实现,它从安全属性文件中配置的一个或多个ASCII(UTF-8)文件中读取授权数据。 这些策略文件包含授予代码的确切权限集合:具体而言,授予从特定位置加载的代码的确切权限集,由特定实体签名并作为特定用户执行。 每个文件中的策略条目必须符合文档化的专有语法,并且可以通过简单的文本编辑器或图形化policytool实用程序进行组合。

访问控制增强

Java运行时跟踪程序执行时产生的Java调用堆栈。 当请求访问受保护的资源时,将默认评估整个调用堆栈,以确定是否允许请求的访问。

如前所述,资源受到SecurityManager的保护。 Java平台和应用程序中对安全敏感的代码通过以下代码保护对资源的访问:

SecurityManager sm = System.getSecurityManager();
if (sm != null) {
   sm.checkPermission(perm);
}

其中perm是与请求的访问对应的Permission对象。 例如,如果试图读取文件/ tmp / abc,则权限可以如下构造:

Permission perm = new java.io.FilePermission("/tmp/abc", "read");

SecurityManager的默认实现将其决定委托给java.security.AccessController实现。 AccessController遍历调用堆栈,并将所请求的权限(例如上面的示例中的FilePermission)与所安装的安全策略中的每个代码元素一起传递给堆栈。 策略根据管理员配置的权限确定是否授予请求的访问权限。 如果访问不被授予,AccessController抛出一个java.lang.SecurityException。

图4说明了访问控制的执行。 在这个特定的例子中,最初有两个元素在调用栈ClassA和ClassB上。 ClassA调用ClassB中的方法,然后通过创建java.io.FileInputStream的实例来尝试访问文件/ tmp / abc。 FileInputStream构造函数创建一个FilePermission,如上所示,然后将Perm传递给SecurityManager的checkPermission方法。 在这种情况下,只需要检查ClassA和ClassB的权限,所以包括FileInputStream,SecurityManager和AccessController在内的所有系统代码都会自动获得所有权限。

在这个例子中,ClassA和ClassB具有不同的代码特征 - 它们来自不同的位置并具有不同的签名者。 每个人都可能被授予不同的权限。 如果策略指示两个类都已被授予所需的FilePermission,则AccessController仅授予访问所请求的文件的权限。
Java安全架构概览_第4张图片 图4 资源访问控制

XML签名

Java XML数字签名API是用于生成和验证XML签名的标准Java API。

XML签名可以应用于任何类型的数据,XML或二进制数据(请参阅http://www.w3.org/TR/xmldsig-core/)。 结果签名用XML表示。 XML签名可用于保护您的数据并提供数据完整性,消息身份验证和签名者身份验证。

该API旨在支持W3C XML签名语法和处理推荐标准的所有必需或推荐功能。 该API是可扩展和可插入的,并基于Java加密服务提供程序架构。

Java XML数字签名API包含六个包:

  • javax.xml.crypto
  • javax.xml.crypto.dsig
  • javax.xml.crypto.dsig.keyinfo
  • javax.xml.crypto.dsig.spec
  • javax.xml.crypto.dom
  • javax.xml.crypto.dsig.dom

更多相关信息

其他Java安全性文档可以在网上找到Java SE Security或者是在这本书中。

注意:从历史上看,随着新类型的安全服务被添加到Java平台(有时最初作为扩展),各种缩写词被用来指代它们。 由于这些首字母缩略词在Java安全性文档中仍在使用,下面解释它们代表的内容:JSSE(Java™安全套接字扩展)是指第7节中描述的SSL相关服务,JCE(Java™密码扩展) 指的是加密服务(第4节),JAAS(Java™认证和授权服务)分别是指在第6节和第8节中介绍的身份验证和基于用户的访问控制服务。

附录A 类摘要

表1总结了本文提到的Java安全类和接口的名称,包和用法。

类/接口名 用法
com.sun.security.auth.module JndiLoginModule 使用LDAP或NIS执行用户名/密码认证
com.sun.security.auth.module KeyStoreLoginModule 根据密钥库登录进行验证
com.sun.security.auth.module Krb5LoginModule 使用Kerberos协议执行身份验证
java.lang SecurityException 指示安全违规
java.lang SecurityManager 管理所有访问控制决定
java.lang System 安装SecurityManager
java.security AccessController 默认调用SecurityManager实现访问控制决策
java.security DomainLoadStoreParameter 存储域密钥库(DKS)的参数
java.security Key 表示加密密钥
java.security KeyStore 表示密钥和可信证书的存储库
java.security MessageDigest 代表消息摘要
java.security Permission 代表对特定资源的访问
java.security PKCS12Attribute 支持PKCS12密钥库中的属性
java.security Policy 封装安全策略
java.security Provider 封装安全服务实现
java.security Security 管理安全提供者和安全属性
java.security Signature 创建并验证数字签名
java.security.cert Certificate 代表公钥证书
java.security.cert CertStore 代表不相关且通常不受信任的证书的存储库
java.security.cert CRL 代表CRL
javax.crypto Cipher 执行加密和解密
javax.crypto KeyAgreement 执行密钥交换
javax.net.ssl KeyManager 管理用于执行SSL / TLS身份验证的密钥
javax.net.ssl SSLEngine 生成/使用SSL / TLS数据包,允许应用程序自由选择传输机制
javax.net.ssl SSLSocket 表示一个网络套接字,它在正常的流套接字之上封装SSL / TLS支持
javax.net.ssl TrustManager 决定谁要信任SSL / TLS交互(例如,基于密钥存储区中的可信证书)
javax.security.auth Subject 代表一个用户
javax.security.auth.kerberos KerberosPrincipal 代表Kerberos主体
javax.security.auth.kerberos KerberosTicket 代表Kerberos凭据
javax.security.auth.kerberos KerberosKey 代表Kerberos密钥
javax.security.auth.kerberos KerberosTab 表示Kerberos密钥表文件
javax.security.auth.login LoginContext 支持可插拔的身份验证
javax.security.auth.spi LoginModule 实现一个特定的认证机制
javax.security.sasl Sasl 创建SaslClient和SaslServer对象
javax.security.sasl SaslClient 作为客户端执行SASL身份验证
javax.security.sasl SaslServer 作为服务器执行SASL认证
org.ietf.jgss GSSContext 封装GSS-API安全上下文,并通过上下文提供可用的安全服务

附录B 工具摘要

表2总结了本文提到的工具。

工具 用法
jar 创建Java归档(JAR)文件
jarsigner 在JAR文件上签名并验证签名
keytool 创建和管理密钥库
policytool 创建和编辑策略文件以用于默认策略实施

Windows平台上还有三个与Java平台相关的与Kerberos相关的工具。 这些功能自动成为Solaris和Linux操作环境的相同名称的工具提供。
表3总结了Kerberos工具。

工具 用法
kinit 获取并缓存Kerberos票证授予票据
klist 列出本地Kerberos凭证缓存和密钥表中的条目
ktab 管理存储在本地Kerberos密钥表中的名称和服务密钥

附录C 内置Provider

Oracle的Java平台实现包括许多内置的提供程序包。 有关详细信息,请参阅Java™ Cryptography Architecture Oracle Providers Documentation.

你可能感兴趣的:(Java安全)