【文档说明】Java安全技术.pptx,共(40)页,175.743 KB,由精品优选上传
转载请保留链接:https://www.ichengzhen.cn/view-287761.html
以下为本文档部分文字说明:
第16章Java安全技术主要内容◼16.1安全基本知识◼16.2Java的安全模型◼16.3Java的密码学结构16.1安全基本知识◼攻击,保护◼密码学,机密性,认证,证书◼完整性,认可性◼审计和日志,安全策略和访问控制主要内容◼16.1安全基本知识◼16.2Java
的安全模型◼16.3Java的密码学结构16.2Java的安全模型◼安全模型的演化◼Java2安全模型◼Java2的安全划分◼应用程序安全性◼小程序安全性◼J2SDK安全工具◼Java小程序的安全部署最初安全模型为沙箱模型JVMValuableResourc
es(files,etc)SandBoxRemoteCodeLocalcode为从开放的网络中获取的非信任代码的提供了一个受限制的运行环境。沙箱模型的实质是本地代码对重要的系统资源(如文件系统)有全部的访问权限,而下载的远程代码(例如App
let)则不被信任并且仅能访问沙箱里提供的有限资源JDK1.1安全模型JVMValuableResources(files,etc)SandBoxRemoteCodeLocalcode使用数字签名服务,可以用
与Java编写的本地程序类似的方式对待可信的AppletJDK1.2中的新安全体系结构JVMValuableresources(files,etc)PDPDSandboxSecuritypolicyClassloaderLocalorremotecodeProtectionDomain是在策
略数据库中指定的,授予CodeSource的Permission的聚合体。通过ClassLoader装入到JVM的每个类文件被分配给一个ProtectionDomain。Java2安全模型BootstrapClassfilesSys
temClassfilesUserClassfilesBytecodeVerifierBootstrapClassLoaderSystemClassLoaderClassLoaderSecurityManagerProtectionDomainsAccessControllerOperatin
gSystem,HardwareCodeSource(URL,Certificates)PermissionskeystoreJava2安全模型◼Java安全主要建立在Java运行时环境的三个方面:ByteCodeVerifier(字节码验证器)、SecurityManage
r(安全管理器)以及ClassLoader(类装入器)。◼代码验证(BytecodeVerifier)确保所下载的代码被恰当地格式化,字节码(“Java虚拟机”指令)没有违反语言或虚拟机的安全限制(如,无非法数据转换),没有执行指针寻址,内部堆栈不能溢出或下溢,以
及字节码指令将拥有正确的类型参数。安全管理器(SecurityManager)◼SecurityManager在尝试执行文件I/O和网络I/O、创建新的ClassLoader、操作线程或线程组、启动底层平台(操作系统)上的进程、终止“Java虚拟机
”、将非Java库(本机代码)装入到JVM、完成某种类型的系统操作以及将某种类型的类装入到JVM中时激发运行时访问控制机制。◼例如,JavaApplet沙箱严格地将所下载的Applet约束到被认为是比较安全的有限的运行环境中。权限(Permission)◼一个权限允许代码
执行的一个特定的操作,权限可以是特别具体的,也可以是一般化的。◼一个权限由三个部分组成:类型,名称和操作。类型是必须的,它是实现了Permission接口的特定的类◼permissionjava.se
curity.AllPermission;◼permissionjava.lang.RuntimePermission"stopThread";◼permissionjava.io.FilePermission"/tmp/foo","read";代码源(CodeSou
rces)◼代码源包含类的从哪里装载的位置信息和对类签名信息。一般情况下,这个位置被表示成一个URL。如果代码被签名,那么代码源里面包含了关于签名者的信息。类可以基于代码源被赋予一定的权限。◼保护域(ProtectionDomains
)是赋予代码源的权限的集合。可以通过策略文件定义。策略文件(Policyfiles)◼策略文件是一个控制沙箱的管理元素。◼一个策略文件可以包含一个或者多个条目来定义一个保护域。◼每个条目是赋予代码源的权限声明。◼一般有两个策
略文件,一个全局策略文件,一个用户相关策略文件。◼全局策略文件影响Java虚拟机种的所有的实例。◼策略文件是一个文本文件,可以直接进行编辑。也可以用Java提供的编辑工具policyTool进行编辑。密钥库(Keystores)◼通过代码签名可以赋予代
码更多的执行自由度。◼如果你确信正在执行的代码来自一个可信的组织,你可以允许它访问本地磁盘文件,或者使用打印机等。◼被签名的代码依赖于公钥证书,证书被保存在密钥库中。开发者可以使用密钥库中的证书对代码进行签名;◼一般用户或者系统
管理员可以在执行已签名的代码时参考密钥库发现是谁的签名。访问控制器(AccessController)◼访问关键系统资源时,是否允许或者拒绝,具体结果决定于策略文件的配置。◼把一段代码标记为具有一定的特权,
影响后续的访问判断。◼获取当前调用上下文的一个快照,来自不同上下文的访问控制判断可以参照被保存的上下文。◼做特殊安全检查Java2的策略配置文件SecurityManagersecurity=System.getSecurityManager();if(security!=null){
security.checkPermission(Permissionperm);}如果这个请求被允许,checkPermission不返回任何值;如果被拒绝,抛出异常SecurityException。gr
antsignedBy"signer_names",codeBase"URL"{permissionpermission_class_name"target_name","action",signedBy"signer_names";};应用程序安
全性◼在不使用SecurityManager的情况下◼使用SecurityManager的情况◼修改策略配置文件小应用程序安全性通过程序说明在命令行中用AppletViewer执行AppletviewerwriteFile.htmlJ2SDK安全工具◼keytool–管理密钥库和证书◼j
arsigner–产生和验证Java签名◼policytool–图形化的方式管理策略文件。Keytool◼1)创建公/私钥对;◼2)发出证书请求到认证权威(CA)◼3)从认证权威导入证书回复◼4)指明
属于其他组织的公钥是受信任的。◼Keytool目前能够处理符合X.509标准的证书。JSSE(JavaSecureSocketExtension,JSSE)1.0.2以后的版本可以支持pkcs12。Keytool参数参
数描述-genkey产生一个密钥对(一个公钥关联一个私钥)-import读取一个证书或者证书链,并存储到密钥库中,同时用一个别名进行标识。-certreq用pkcs10产生一个证书签发请求。-export导出一个和某个别名相关联的证书-list打印整个密
钥库中的内容,或者打印与某个别名相关联的证书。-storepasswd修改或指定密钥库的密码-keypasswd修改或者指定某一个密钥对的访问密码-delete删除密钥库中的条目。KeyTool应用◼D:\>keytool-
genkey-aliasjavafan-keyalgrsa-validity750◼输入keystore密码:keystore◼您的名字与姓氏是什么?◼[Unknown]:JavaFan◼您的组织单位名称是什么?◼[Unknown]:ComputerScience◼您的组织名称是什么?◼
[Unknown]:ChongqingUniversity◼您所在的城市或区域名称是什么?◼[Unknown]:Chongqing◼您所在的州或省份名称是什么?◼[Unknown]:Chongqing◼该单位的两字母国家代码是什么◼[Unknown]:CN◼CN=Ja
vaFan,OU=ComputerScience,O=ChongqingUniversity,L="Chongqing",ST=Chon◼gqing,C=CN正确吗?◼[否]:是◼输入<javafan>的主密码◼(如果和keystore密码相同,按回车):用keytool显示证书的内
容◼D:\>keytool-v-printcert-filejavafan.cer◼Owner:CN=JavaFan,OU=ComputerScience,O=ChongqingUniversity,L="Chongqing",ST=Chongqing
,C=CN◼发照者:CN=JavaFan,OU=ComputerScience,O=ChongqingUniversity,L="Chongqing",ST=Chongqing,C=CN◼序号:43030437◼有效期间:WedAug1717:
32:39CST2005至:ThuSep0617:32:39CST2007◼认证指纹:◼MD5:CB:AE:97:24:A9:93:4B:34:E2:3B:95:95:70:E7:70:D5◼SHA1:E3:32:0C:68:24:34:
CB:6E:02:BF:ED:E6:D8:C0:29:AE:66:5C:20:DDjarsigner◼Jarsigner用于给打包后的Java程序签名,或者验证签名。Jarsigner可以在签名或者验证签名时
,访问由keytool创建的密钥库。选项描述-storepass访问密钥库时,指定口令-keypass指定私钥的保护口令-signedjar指定需要被签名的jar文件-verifyjar文件的签名验证-verbose控制是否输出签名或者验证过程的详细信息-cer
ts与-verify、verbose一起使用,输出包括每个签名证书的信息policytoolJava运行时环境的安全配置文件{java.home}/lib/security/java.security(java.home指安装Java运行时环境的目录)中包括两个策略文件:{java.home}/l
ib/security/java.policy和{user.home}/.java.policy({user.home}指用户主目录)。PolicyTool缺省修改第二个文件。Java小程序的安全部署程序运行界面制作和部署安全小程序步骤◼编制小程序Sim
pleScannerApplet◼编写Html文件scanner.html◼把程序打包成Jar文件◼获取并安装一个支持RSA的签名证书。◼用该证书对Jar文件进行签名◼用sun的HtmlConvert转换scann
er.html◼部署转换后的html文件和已经签名的jar文件◼见程序主要内容◼16.1安全基本知识◼16.2Java的安全模型◼16.3Java的密码学结构16.3Java的密码学结构◼16.3.1基本概念◼16.3.2核心类◼16.3.3消息摘要◼
16.3.4数字签名◼16.3.5数据加密/解密16.3.1基本概念◼Java密码学结构设计遵循两个原则:(1)算法的独立性和可靠性;(2)实现的独立性和相互作用性。◼Java2中主要的密码学服务有以下几种:◼数字签名、消息摘要、加密/
解密◼密钥工厂◼密钥库创建与密钥管理◼算法参数产生、管理◼证书工厂JDK5.0提供的密码学服务◼可以通过修改{java.home}/lib/security/java.security文件安装密码学服务提供者。缺省情况下,Java运行时环境已经安装了下面的提供
者:◼security.provider.1=sun.security.provider.Sun◼security.provider.2=sun.security.rsa.SunRsaSign◼security.provider.3=com.s
un.net.ssl.internal.ssl.Provider◼security.provider.4=com.sun.crypto.provider.SunJCE◼security.provider.5=sun.security.jgss.SunP
rovider◼security.provider.6=com.sun.security.sasl.Provider◼见程序测试程序importjava.security.Provider;importjava.security.Secu
rity;publicclassGetProviderInfo{publicstaticvoidmain(String[]args){Provider[]plist=Security.getProviders();for(inti=0;i<plist.length;i
++){System.out.println("["+(i+1)+"]-Providername:"+plist[i].getName());System.out.println("Providerinfo:"+plist[i].getInfo());}}}16.3.2核心类◼Security,P
rovider◼MessageDigest类◼Signature类◼Key,KeyFactory,KeyPair,KeyPairGenerator◼SecureRandom16.3.3消息摘要◼使用MD5算法产生消息摘要◼也可以使用SHA1算法◼MessageDiges
t支持MD5和SHA消息摘要算法。调用getInstance()方法选择一个合适的算法;调用update()方法准备数据输入缓冲区;digest()方法产生消息摘要;摘要的长度取决于所选择的算法。使用MD5产生128位的摘要,使用SHA产生160位的摘要。16.3.
4数字签名◼Signature类支持数字签名,getInstance()方法选择数字签名的算法。◼通过指定参数SHA1withDSA,可以在DSA数字签名算法中使用SHA-1产生消息摘要。◼如果使用RSA
数字签名算法,可以用MD5或者SHA-1产生消息摘要,可以由参数MD2withRSA,MD5withRSA,SHA1withRSA确定使用的算法。◼见程序16.3.5数据加密/解密◼对称密钥◼对称加密使用相同的密钥执行加密和解密操作。目前
,安全度最高,使用最广泛地就是AES加密标准。◼对称加密的基本过程是:◼根据指定算法生成密钥产生器对象;◼产生密钥◼生成加密引擎对象◼向加密引擎初始化需要加密的数据◼执行加密操作◼对称解密密的基本过程是:◼
获取密钥◼生成解密引擎对象◼向解密引擎初始化需要解密的数据◼执行解密操作非对称密钥◼非对称密钥体系就是加密和解密用不同的密钥,称为密钥对,一个叫公钥,一个叫私钥。公钥是公开的,任何人都可以访问,私钥是保密的,只有密
钥的持有能使用。◼最典型和使用最普遍的就是RSA算法。一般用接收者的公钥加密数据,只有接收者用自己的私钥才可以解密。◼主要设计到的类有:KeyPairGenerator和Cipher.KeyPairGenerator负责产生密钥对,Cipher作为执行引擎,具体执行
加密和解密操作。非对称加密解密过程◼一般加密处理过程是:◼使用RSA算法产生密钥对◼用公钥初始加密引擎Cipher◼向Cipher传送数据。◼执行加密操作。◼解密过程是:◼用私钥初始解密引擎Cipher◼向Cipher传送已加密的数据。◼执行解密操作。