Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
98c5c8c7
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
98c5c8c7
编写于
2月 19, 2013
作者:
E
ewendeli
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
f3a1eb3e
0c6c0091
变更
26
显示空白变更内容
内联
并排
Showing
26 changed file
with
757 addition
and
255 deletion
+757
-255
src/share/classes/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java
...com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java
+2
-0
src/share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java
...share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java
+10
-0
src/share/classes/com/sun/jmx/mbeanserver/MBeanInstantiator.java
...re/classes/com/sun/jmx/mbeanserver/MBeanInstantiator.java
+30
-4
src/share/classes/com/sun/jmx/mbeanserver/MBeanSupport.java
src/share/classes/com/sun/jmx/mbeanserver/MBeanSupport.java
+2
-0
src/share/classes/java/lang/invoke/MethodHandleNatives.java
src/share/classes/java/lang/invoke/MethodHandleNatives.java
+2
-0
src/share/classes/java/lang/invoke/MethodHandleProxies.java
src/share/classes/java/lang/invoke/MethodHandleProxies.java
+19
-6
src/share/classes/java/lang/management/ManagementFactory.java
...share/classes/java/lang/management/ManagementFactory.java
+9
-9
src/share/classes/java/lang/reflect/Proxy.java
src/share/classes/java/lang/reflect/Proxy.java
+1
-1
src/share/classes/java/util/logging/LogManager.java
src/share/classes/java/util/logging/LogManager.java
+38
-17
src/share/classes/sun/reflect/misc/ReflectUtil.java
src/share/classes/sun/reflect/misc/ReflectUtil.java
+3
-1
src/share/classes/sun/security/ssl/CipherBox.java
src/share/classes/sun/security/ssl/CipherBox.java
+159
-47
src/share/classes/sun/security/ssl/CipherSuite.java
src/share/classes/sun/security/ssl/CipherSuite.java
+16
-7
src/share/classes/sun/security/ssl/EngineInputRecord.java
src/share/classes/sun/security/ssl/EngineInputRecord.java
+135
-57
src/share/classes/sun/security/ssl/EngineOutputRecord.java
src/share/classes/sun/security/ssl/EngineOutputRecord.java
+2
-2
src/share/classes/sun/security/ssl/InputRecord.java
src/share/classes/sun/security/ssl/InputRecord.java
+154
-24
src/share/classes/sun/security/ssl/MAC.java
src/share/classes/sun/security/ssl/MAC.java
+38
-13
src/share/classes/sun/security/ssl/OutputRecord.java
src/share/classes/sun/security/ssl/OutputRecord.java
+2
-2
src/share/classes/sun/security/ssl/SSLEngineImpl.java
src/share/classes/sun/security/ssl/SSLEngineImpl.java
+3
-23
src/share/classes/sun/security/ssl/SSLSocketImpl.java
src/share/classes/sun/security/ssl/SSLSocketImpl.java
+3
-19
src/share/classes/sun/security/util/UntrustedCertificates.java
...hare/classes/sun/security/util/UntrustedCertificates.java
+107
-1
src/share/lib/security/java.security-linux
src/share/lib/security/java.security-linux
+4
-4
src/share/lib/security/java.security-macosx
src/share/lib/security/java.security-macosx
+4
-4
src/share/lib/security/java.security-solaris
src/share/lib/security/java.security-solaris
+4
-4
src/share/lib/security/java.security-windows
src/share/lib/security/java.security-windows
+4
-4
test/javax/management/remote/mandatory/subjectDelegation/SubjectDelegation2Test.java
...e/mandatory/subjectDelegation/SubjectDelegation2Test.java
+3
-3
test/javax/management/remote/mandatory/subjectDelegation/SubjectDelegation3Test.java
...e/mandatory/subjectDelegation/SubjectDelegation3Test.java
+3
-3
未找到文件。
src/share/classes/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java
浏览文件 @
98c5c8c7
...
@@ -36,6 +36,7 @@ import java.util.logging.Level;
...
@@ -36,6 +36,7 @@ import java.util.logging.Level;
import
javax.management.ObjectName
;
import
javax.management.ObjectName
;
import
javax.management.loading.PrivateClassLoader
;
import
javax.management.loading.PrivateClassLoader
;
import
sun.reflect.misc.ReflectUtil
;
/**
/**
* This class keeps the list of Class Loaders registered in the MBean Server.
* This class keeps the list of Class Loaders registered in the MBean Server.
...
@@ -192,6 +193,7 @@ final class ClassLoaderRepositorySupport
...
@@ -192,6 +193,7 @@ final class ClassLoaderRepositorySupport
final
ClassLoader
without
,
final
ClassLoader
without
,
final
ClassLoader
stop
)
final
ClassLoader
stop
)
throws
ClassNotFoundException
{
throws
ClassNotFoundException
{
ReflectUtil
.
checkPackageAccess
(
className
);
final
int
size
=
list
.
length
;
final
int
size
=
list
.
length
;
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
try
{
try
{
...
...
src/share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java
浏览文件 @
98c5c8c7
...
@@ -51,6 +51,7 @@ import javax.management.MBeanPermission;
...
@@ -51,6 +51,7 @@ import javax.management.MBeanPermission;
import
javax.management.MBeanRegistrationException
;
import
javax.management.MBeanRegistrationException
;
import
javax.management.MBeanServer
;
import
javax.management.MBeanServer
;
import
javax.management.MBeanServerDelegate
;
import
javax.management.MBeanServerDelegate
;
import
javax.management.MBeanServerPermission
;
import
javax.management.NotCompliantMBeanException
;
import
javax.management.NotCompliantMBeanException
;
import
javax.management.NotificationFilter
;
import
javax.management.NotificationFilter
;
import
javax.management.NotificationListener
;
import
javax.management.NotificationListener
;
...
@@ -1409,6 +1410,8 @@ public final class JmxMBeanServer
...
@@ -1409,6 +1410,8 @@ public final class JmxMBeanServer
// Default is true.
// Default is true.
final
boolean
fairLock
=
DEFAULT_FAIR_LOCK_POLICY
;
final
boolean
fairLock
=
DEFAULT_FAIR_LOCK_POLICY
;
checkNewMBeanServerPermission
();
// This constructor happens to disregard the value of the interceptors
// This constructor happens to disregard the value of the interceptors
// flag - that is, it always uses the default value - false.
// flag - that is, it always uses the default value - false.
// This is admitedly a bug, but we chose not to fix it for now
// This is admitedly a bug, but we chose not to fix it for now
...
@@ -1494,4 +1497,11 @@ public final class JmxMBeanServer
...
@@ -1494,4 +1497,11 @@ public final class JmxMBeanServer
}
}
}
}
private
static
void
checkNewMBeanServerPermission
()
{
SecurityManager
sm
=
System
.
getSecurityManager
();
if
(
sm
!=
null
)
{
Permission
perm
=
new
MBeanServerPermission
(
"newMBeanServer"
);
sm
.
checkPermission
(
perm
);
}
}
}
}
src/share/classes/com/sun/jmx/mbeanserver/MBeanInstantiator.java
浏览文件 @
98c5c8c7
...
@@ -32,11 +32,13 @@ import java.io.IOException;
...
@@ -32,11 +32,13 @@ import java.io.IOException;
import
java.io.ObjectInputStream
;
import
java.io.ObjectInputStream
;
import
java.lang.reflect.Constructor
;
import
java.lang.reflect.Constructor
;
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.InvocationTargetException
;
import
java.security.Permission
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.logging.Level
;
import
java.util.logging.Level
;
import
javax.management.InstanceNotFoundException
;
import
javax.management.InstanceNotFoundException
;
import
javax.management.MBeanException
;
import
javax.management.MBeanException
;
import
javax.management.MBeanPermission
;
import
javax.management.NotCompliantMBeanException
;
import
javax.management.NotCompliantMBeanException
;
import
javax.management.ObjectName
;
import
javax.management.ObjectName
;
import
javax.management.OperationsException
;
import
javax.management.OperationsException
;
...
@@ -44,7 +46,7 @@ import javax.management.ReflectionException;
...
@@ -44,7 +46,7 @@ import javax.management.ReflectionException;
import
javax.management.RuntimeErrorException
;
import
javax.management.RuntimeErrorException
;
import
javax.management.RuntimeMBeanException
;
import
javax.management.RuntimeMBeanException
;
import
javax.management.RuntimeOperationsException
;
import
javax.management.RuntimeOperationsException
;
import
sun.reflect.misc.ConstructorUtil
;
import
sun.reflect.misc.ReflectUtil
;
import
sun.reflect.misc.ReflectUtil
;
/**
/**
...
@@ -56,7 +58,6 @@ import sun.reflect.misc.ReflectUtil;
...
@@ -56,7 +58,6 @@ import sun.reflect.misc.ReflectUtil;
* @since 1.5
* @since 1.5
*/
*/
public
class
MBeanInstantiator
{
public
class
MBeanInstantiator
{
private
final
ModifiableClassLoaderRepository
clr
;
private
final
ModifiableClassLoaderRepository
clr
;
// private MetaData meta = null;
// private MetaData meta = null;
...
@@ -88,6 +89,7 @@ public class MBeanInstantiator {
...
@@ -88,6 +89,7 @@ public class MBeanInstantiator {
"Exception occurred during object instantiation"
);
"Exception occurred during object instantiation"
);
}
}
ReflectUtil
.
checkPackageAccess
(
className
);
try
{
try
{
if
(
clr
==
null
)
throw
new
ClassNotFoundException
(
className
);
if
(
clr
==
null
)
throw
new
ClassNotFoundException
(
className
);
theClass
=
clr
.
loadClass
(
className
);
theClass
=
clr
.
loadClass
(
className
);
...
@@ -162,6 +164,7 @@ public class MBeanInstantiator {
...
@@ -162,6 +164,7 @@ public class MBeanInstantiator {
continue
;
continue
;
}
}
ReflectUtil
.
checkPackageAccess
(
signature
[
i
]);
// Ok we do not have a primitive type ! We need to build
// Ok we do not have a primitive type ! We need to build
// the signature of the method
// the signature of the method
//
//
...
@@ -205,6 +208,9 @@ public class MBeanInstantiator {
...
@@ -205,6 +208,9 @@ public class MBeanInstantiator {
*/
*/
public
Object
instantiate
(
Class
<?>
theClass
)
public
Object
instantiate
(
Class
<?>
theClass
)
throws
ReflectionException
,
MBeanException
{
throws
ReflectionException
,
MBeanException
{
checkMBeanPermission
(
theClass
,
null
,
null
,
"instantiate"
);
Object
moi
;
Object
moi
;
...
@@ -260,6 +266,9 @@ public class MBeanInstantiator {
...
@@ -260,6 +266,9 @@ public class MBeanInstantiator {
public
Object
instantiate
(
Class
<?>
theClass
,
Object
params
[],
public
Object
instantiate
(
Class
<?>
theClass
,
Object
params
[],
String
signature
[],
ClassLoader
loader
)
String
signature
[],
ClassLoader
loader
)
throws
ReflectionException
,
MBeanException
{
throws
ReflectionException
,
MBeanException
{
checkMBeanPermission
(
theClass
,
null
,
null
,
"instantiate"
);
// Instantiate the new object
// Instantiate the new object
// ------------------------------
// ------------------------------
...
@@ -407,6 +416,8 @@ public class MBeanInstantiator {
...
@@ -407,6 +416,8 @@ public class MBeanInstantiator {
throw
new
RuntimeOperationsException
(
new
throw
new
RuntimeOperationsException
(
new
IllegalArgumentException
(),
"Null className passed in parameter"
);
IllegalArgumentException
(),
"Null className passed in parameter"
);
}
}
ReflectUtil
.
checkPackageAccess
(
className
);
Class
<?>
theClass
;
Class
<?>
theClass
;
if
(
loaderName
==
null
)
{
if
(
loaderName
==
null
)
{
// Load the class using the agent class loader
// Load the class using the agent class loader
...
@@ -619,13 +630,13 @@ public class MBeanInstantiator {
...
@@ -619,13 +630,13 @@ public class MBeanInstantiator {
**/
**/
static
Class
<?>
loadClass
(
String
className
,
ClassLoader
loader
)
static
Class
<?>
loadClass
(
String
className
,
ClassLoader
loader
)
throws
ReflectionException
{
throws
ReflectionException
{
Class
<?>
theClass
;
Class
<?>
theClass
;
if
(
className
==
null
)
{
if
(
className
==
null
)
{
throw
new
RuntimeOperationsException
(
new
throw
new
RuntimeOperationsException
(
new
IllegalArgumentException
(
"The class name cannot be null"
),
IllegalArgumentException
(
"The class name cannot be null"
),
"Exception occurred during object instantiation"
);
"Exception occurred during object instantiation"
);
}
}
ReflectUtil
.
checkPackageAccess
(
className
);
try
{
try
{
if
(
loader
==
null
)
if
(
loader
==
null
)
loader
=
MBeanInstantiator
.
class
.
getClassLoader
();
loader
=
MBeanInstantiator
.
class
.
getClassLoader
();
...
@@ -676,6 +687,7 @@ public class MBeanInstantiator {
...
@@ -676,6 +687,7 @@ public class MBeanInstantiator {
// We need to load the class through the class
// We need to load the class through the class
// loader of the target object.
// loader of the target object.
//
//
ReflectUtil
.
checkPackageAccess
(
signature
[
i
]);
tab
[
i
]
=
Class
.
forName
(
signature
[
i
],
false
,
aLoader
);
tab
[
i
]
=
Class
.
forName
(
signature
[
i
],
false
,
aLoader
);
}
}
}
catch
(
ClassNotFoundException
e
)
{
}
catch
(
ClassNotFoundException
e
)
{
...
@@ -701,7 +713,7 @@ public class MBeanInstantiator {
...
@@ -701,7 +713,7 @@ public class MBeanInstantiator {
private
Constructor
<?>
findConstructor
(
Class
<?>
c
,
Class
<?>[]
params
)
{
private
Constructor
<?>
findConstructor
(
Class
<?>
c
,
Class
<?>[]
params
)
{
try
{
try
{
return
c
.
getConstructor
(
params
);
return
ConstructorUtil
.
getConstructor
(
c
,
params
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
return
null
;
return
null
;
}
}
...
@@ -715,4 +727,18 @@ public class MBeanInstantiator {
...
@@ -715,4 +727,18 @@ public class MBeanInstantiator {
char
.
class
,
boolean
.
class
})
char
.
class
,
boolean
.
class
})
primitiveClasses
.
put
(
c
.
getName
(),
c
);
primitiveClasses
.
put
(
c
.
getName
(),
c
);
}
}
private
static
void
checkMBeanPermission
(
Class
<?>
clazz
,
String
member
,
ObjectName
objectName
,
String
actions
)
{
SecurityManager
sm
=
System
.
getSecurityManager
();
if
(
clazz
!=
null
&&
sm
!=
null
)
{
Permission
perm
=
new
MBeanPermission
(
clazz
.
getName
(),
member
,
objectName
,
actions
);
sm
.
checkPermission
(
perm
);
}
}
}
}
src/share/classes/com/sun/jmx/mbeanserver/MBeanSupport.java
浏览文件 @
98c5c8c7
...
@@ -38,6 +38,7 @@ import javax.management.NotCompliantMBeanException;
...
@@ -38,6 +38,7 @@ import javax.management.NotCompliantMBeanException;
import
javax.management.ObjectName
;
import
javax.management.ObjectName
;
import
javax.management.ReflectionException
;
import
javax.management.ReflectionException
;
import
com.sun.jmx.mbeanserver.MXBeanMappingFactory
;
import
com.sun.jmx.mbeanserver.MXBeanMappingFactory
;
import
sun.reflect.misc.ReflectUtil
;
/**
/**
* Base class for MBeans. There is one instance of this class for
* Base class for MBeans. There is one instance of this class for
...
@@ -131,6 +132,7 @@ public abstract class MBeanSupport<M>
...
@@ -131,6 +132,7 @@ public abstract class MBeanSupport<M>
" is not an instance of "
+
mbeanInterfaceType
.
getName
();
" is not an instance of "
+
mbeanInterfaceType
.
getName
();
throw
new
NotCompliantMBeanException
(
msg
);
throw
new
NotCompliantMBeanException
(
msg
);
}
}
ReflectUtil
.
checkPackageAccess
(
mbeanInterfaceType
);
this
.
resource
=
resource
;
this
.
resource
=
resource
;
MBeanIntrospector
<
M
>
introspector
=
getMBeanIntrospector
();
MBeanIntrospector
<
M
>
introspector
=
getMBeanIntrospector
();
this
.
perInterface
=
introspector
.
getPerInterface
(
mbeanInterfaceType
);
this
.
perInterface
=
introspector
.
getPerInterface
(
mbeanInterfaceType
);
...
...
src/share/classes/java/lang/invoke/MethodHandleNatives.java
浏览文件 @
98c5c8c7
...
@@ -476,6 +476,8 @@ class MethodHandleNatives {
...
@@ -476,6 +476,8 @@ class MethodHandleNatives {
case
"getProxyClass"
:
case
"getProxyClass"
:
case
"newProxyInstance"
:
case
"newProxyInstance"
:
return
defc
==
java
.
lang
.
reflect
.
Proxy
.
class
;
return
defc
==
java
.
lang
.
reflect
.
Proxy
.
class
;
case
"asInterfaceInstance"
:
return
defc
==
java
.
lang
.
invoke
.
MethodHandleProxies
.
class
;
case
"getBundle"
:
case
"getBundle"
:
case
"clearCache"
:
case
"clearCache"
:
return
defc
==
java
.
util
.
ResourceBundle
.
class
;
return
defc
==
java
.
util
.
ResourceBundle
.
class
;
...
...
src/share/classes/java/lang/invoke/MethodHandleProxies.java
浏览文件 @
98c5c8c7
...
@@ -141,12 +141,15 @@ public class MethodHandleProxies {
...
@@ -141,12 +141,15 @@ public class MethodHandleProxies {
<
T
>
T
asInterfaceInstance
(
final
Class
<
T
>
intfc
,
final
MethodHandle
target
)
{
<
T
>
T
asInterfaceInstance
(
final
Class
<
T
>
intfc
,
final
MethodHandle
target
)
{
if
(!
intfc
.
isInterface
()
||
!
Modifier
.
isPublic
(
intfc
.
getModifiers
()))
if
(!
intfc
.
isInterface
()
||
!
Modifier
.
isPublic
(
intfc
.
getModifiers
()))
throw
new
IllegalArgumentException
(
"not a public interface: "
+
intfc
.
getName
());
throw
new
IllegalArgumentException
(
"not a public interface: "
+
intfc
.
getName
());
SecurityManager
smgr
=
System
.
getSecurityManager
()
;
final
MethodHandle
mh
;
if
(
smgr
!=
null
)
{
if
(
System
.
getSecurityManager
()
!=
null
)
{
final
int
CALLER_FRAME
=
2
;
// 0: Reflection, 1: asInterfaceInstance, 2: caller
final
int
CALLER_FRAME
=
2
;
// 0: Reflection, 1: asInterfaceInstance, 2: caller
final
Class
<?>
caller
=
Reflection
.
getCallerClass
(
CALLER_FRAME
);
final
Class
<?>
caller
=
Reflection
.
getCallerClass
(
CALLER_FRAME
);
final
ClassLoader
ccl
=
caller
.
getClassLoader
()
;
final
ClassLoader
ccl
=
caller
!=
null
?
caller
.
getClassLoader
()
:
null
;
ReflectUtil
.
checkProxyPackageAccess
(
ccl
,
intfc
);
ReflectUtil
.
checkProxyPackageAccess
(
ccl
,
intfc
);
mh
=
ccl
!=
null
?
bindCaller
(
target
,
caller
)
:
target
;
}
else
{
mh
=
target
;
}
}
ClassLoader
proxyLoader
=
intfc
.
getClassLoader
();
ClassLoader
proxyLoader
=
intfc
.
getClassLoader
();
if
(
proxyLoader
==
null
)
{
if
(
proxyLoader
==
null
)
{
...
@@ -160,7 +163,7 @@ public class MethodHandleProxies {
...
@@ -160,7 +163,7 @@ public class MethodHandleProxies {
for
(
int
i
=
0
;
i
<
methods
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
methods
.
length
;
i
++)
{
Method
sm
=
methods
[
i
];
Method
sm
=
methods
[
i
];
MethodType
smMT
=
MethodType
.
methodType
(
sm
.
getReturnType
(),
sm
.
getParameterTypes
());
MethodType
smMT
=
MethodType
.
methodType
(
sm
.
getReturnType
(),
sm
.
getParameterTypes
());
MethodHandle
checkTarget
=
target
.
asType
(
smMT
);
// make throw WMT
MethodHandle
checkTarget
=
mh
.
asType
(
smMT
);
// make throw WMT
checkTarget
=
checkTarget
.
asType
(
checkTarget
.
type
().
changeReturnType
(
Object
.
class
));
checkTarget
=
checkTarget
.
asType
(
checkTarget
.
type
().
changeReturnType
(
Object
.
class
));
vaTargets
[
i
]
=
checkTarget
.
asSpreader
(
Object
[].
class
,
smMT
.
parameterCount
());
vaTargets
[
i
]
=
checkTarget
.
asSpreader
(
Object
[].
class
,
smMT
.
parameterCount
());
}
}
...
@@ -183,8 +186,8 @@ public class MethodHandleProxies {
...
@@ -183,8 +186,8 @@ public class MethodHandleProxies {
}
}
};
};
Object
proxy
;
final
Object
proxy
;
if
(
smgr
!=
null
)
{
if
(
System
.
getSecurityManager
()
!=
null
)
{
// sun.invoke.WrapperInstance is a restricted interface not accessible
// sun.invoke.WrapperInstance is a restricted interface not accessible
// by any non-null class loader.
// by any non-null class loader.
final
ClassLoader
loader
=
proxyLoader
;
final
ClassLoader
loader
=
proxyLoader
;
...
@@ -204,6 +207,16 @@ public class MethodHandleProxies {
...
@@ -204,6 +207,16 @@ public class MethodHandleProxies {
return
intfc
.
cast
(
proxy
);
return
intfc
.
cast
(
proxy
);
}
}
private
static
MethodHandle
bindCaller
(
MethodHandle
target
,
Class
<?>
hostClass
)
{
MethodHandle
cbmh
=
MethodHandleImpl
.
bindCaller
(
target
,
hostClass
);
if
(
target
.
isVarargsCollector
())
{
MethodType
type
=
cbmh
.
type
();
int
arity
=
type
.
parameterCount
();
return
cbmh
.
asVarargsCollector
(
type
.
parameterType
(
arity
-
1
));
}
return
cbmh
;
}
/**
/**
* Determines if the given object was produced by a call to {@link #asInterfaceInstance asInterfaceInstance}.
* Determines if the given object was produced by a call to {@link #asInterfaceInstance asInterfaceInstance}.
* @param x any reference
* @param x any reference
...
...
src/share/classes/java/lang/management/ManagementFactory.java
浏览文件 @
98c5c8c7
...
@@ -802,6 +802,11 @@ public class ManagementFactory {
...
@@ -802,6 +802,11 @@ public class ManagementFactory {
*/
*/
private
static
void
addMXBean
(
final
MBeanServer
mbs
,
final
PlatformManagedObject
pmo
)
{
private
static
void
addMXBean
(
final
MBeanServer
mbs
,
final
PlatformManagedObject
pmo
)
{
// Make DynamicMBean out of MXBean by wrapping it with a StandardMBean
// Make DynamicMBean out of MXBean by wrapping it with a StandardMBean
try
{
AccessController
.
doPrivileged
(
new
PrivilegedExceptionAction
<
Void
>()
{
public
Void
run
()
throws
InstanceAlreadyExistsException
,
MBeanRegistrationException
,
NotCompliantMBeanException
{
final
DynamicMBean
dmbean
;
final
DynamicMBean
dmbean
;
if
(
pmo
instanceof
DynamicMBean
)
{
if
(
pmo
instanceof
DynamicMBean
)
{
dmbean
=
DynamicMBean
.
class
.
cast
(
pmo
);
dmbean
=
DynamicMBean
.
class
.
cast
(
pmo
);
...
@@ -811,11 +816,6 @@ public class ManagementFactory {
...
@@ -811,11 +816,6 @@ public class ManagementFactory {
dmbean
=
new
StandardMBean
(
pmo
,
null
,
true
);
dmbean
=
new
StandardMBean
(
pmo
,
null
,
true
);
}
}
try
{
AccessController
.
doPrivileged
(
new
PrivilegedExceptionAction
<
Void
>()
{
public
Void
run
()
throws
InstanceAlreadyExistsException
,
MBeanRegistrationException
,
NotCompliantMBeanException
{
mbs
.
registerMBean
(
dmbean
,
pmo
.
getObjectName
());
mbs
.
registerMBean
(
dmbean
,
pmo
.
getObjectName
());
return
null
;
return
null
;
}
}
...
...
src/share/classes/java/lang/reflect/Proxy.java
浏览文件 @
98c5c8c7
...
@@ -609,7 +609,7 @@ public class Proxy implements java.io.Serializable {
...
@@ -609,7 +609,7 @@ public class Proxy implements java.io.Serializable {
}
}
if
(
proxyPkg
==
null
)
{
if
(
proxyPkg
==
null
)
{
// if no non-public proxy interfaces, use sun.proxy package
// if no non-public proxy interfaces, use
com.
sun.proxy package
proxyPkg
=
ReflectUtil
.
PROXY_PACKAGE
+
"."
;
proxyPkg
=
ReflectUtil
.
PROXY_PACKAGE
+
"."
;
}
}
...
...
src/share/classes/java/util/logging/LogManager.java
浏览文件 @
98c5c8c7
...
@@ -395,6 +395,9 @@ public class LogManager {
...
@@ -395,6 +395,9 @@ public class LogManager {
context
=
userContext
;
context
=
userContext
;
}
else
{
}
else
{
context
=
new
LoggerContext
();
context
=
new
LoggerContext
();
// during initialization, rootLogger is null when
// instantiating itself RootLogger
if
(
manager
.
rootLogger
!=
null
)
context
.
addLocalLogger
(
manager
.
rootLogger
);
context
.
addLocalLogger
(
manager
.
rootLogger
);
}
}
javaAwtAccess
.
put
(
ecx
,
LoggerContext
.
class
,
context
);
javaAwtAccess
.
put
(
ecx
,
LoggerContext
.
class
,
context
);
...
@@ -455,7 +458,40 @@ public class LogManager {
...
@@ -455,7 +458,40 @@ public class LogManager {
}
}
Logger
demandSystemLogger
(
String
name
,
String
resourceBundleName
)
{
Logger
demandSystemLogger
(
String
name
,
String
resourceBundleName
)
{
return
systemContext
.
demandLogger
(
name
,
resourceBundleName
);
// Add a system logger in the system context's namespace
final
Logger
sysLogger
=
systemContext
.
demandLogger
(
name
,
resourceBundleName
);
// Add the system logger to the LogManager's namespace if not exist
// so that there is only one single logger of the given name.
// System loggers are visible to applications unless a logger of
// the same name has been added.
Logger
logger
;
do
{
// First attempt to call addLogger instead of getLogger
// This would avoid potential bug in custom LogManager.getLogger
// implementation that adds a logger if does not exist
if
(
addLogger
(
sysLogger
))
{
// successfully added the new system logger
logger
=
sysLogger
;
}
else
{
logger
=
getLogger
(
name
);
}
}
while
(
logger
==
null
);
// LogManager will set the sysLogger's handlers via LogManager.addLogger method.
if
(
logger
!=
sysLogger
&&
sysLogger
.
getHandlers
().
length
==
0
)
{
// if logger already exists but handlers not set
final
Logger
l
=
logger
;
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
Void
>()
{
public
Void
run
()
{
for
(
Handler
hdl
:
l
.
getHandlers
())
{
sysLogger
.
addHandler
(
hdl
);
}
return
null
;
}
});
}
return
sysLogger
;
}
}
// LoggerContext maintains the logger namespace per context.
// LoggerContext maintains the logger namespace per context.
...
@@ -663,21 +699,6 @@ public class LogManager {
...
@@ -663,21 +699,6 @@ public class LogManager {
}
}
}
while
(
result
==
null
);
}
while
(
result
==
null
);
}
}
// Add the system logger to the LogManager's namespace if not exists
// The LogManager will set its handlers via the LogManager.addLogger method.
if
(!
manager
.
addLogger
(
result
)
&&
result
.
getHandlers
().
length
==
0
)
{
// if logger already exists but handlers not set
final
Logger
l
=
manager
.
getLogger
(
name
);
final
Logger
logger
=
result
;
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
Void
>()
{
public
Void
run
()
{
for
(
Handler
hdl
:
l
.
getHandlers
())
{
logger
.
addHandler
(
hdl
);
}
return
null
;
}
});
}
return
result
;
return
result
;
}
}
}
}
...
...
src/share/classes/sun/reflect/misc/ReflectUtil.java
浏览文件 @
98c5c8c7
...
@@ -202,5 +202,7 @@ public final class ReflectUtil {
...
@@ -202,5 +202,7 @@ public final class ReflectUtil {
}
}
}
}
public
static
final
String
PROXY_PACKAGE
=
"sun.proxy"
;
// Note that bytecode instrumentation tools may exclude 'sun.*'
// classes but not generated proxy classes and so keep it in com.sun.*
public
static
final
String
PROXY_PACKAGE
=
"com.sun.proxy"
;
}
}
src/share/classes/sun/security/ssl/CipherBox.java
浏览文件 @
98c5c8c7
/*
/*
* Copyright (c) 1996, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 201
3
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -392,7 +392,8 @@ final class CipherBox {
...
@@ -392,7 +392,8 @@ final class CipherBox {
* uniformly use the bad_record_mac alert to hide the specific type of
* uniformly use the bad_record_mac alert to hide the specific type of
* the error.
* the error.
*/
*/
int
decrypt
(
byte
[]
buf
,
int
offset
,
int
len
)
throws
BadPaddingException
{
int
decrypt
(
byte
[]
buf
,
int
offset
,
int
len
,
int
tagLen
)
throws
BadPaddingException
{
if
(
cipher
==
null
)
{
if
(
cipher
==
null
)
{
return
len
;
return
len
;
}
}
...
@@ -416,9 +417,10 @@ final class CipherBox {
...
@@ -416,9 +417,10 @@ final class CipherBox {
System
.
out
);
System
.
out
);
}
catch
(
IOException
e
)
{
}
}
catch
(
IOException
e
)
{
}
}
}
if
(
blockSize
!=
0
)
{
if
(
blockSize
!=
0
)
{
newLen
=
removePadding
(
buf
,
offset
,
newLen
,
newLen
=
removePadding
(
blockSize
,
protocolVersion
);
buf
,
offset
,
newLen
,
tagLen
,
blockSize
,
protocolVersion
);
if
(
protocolVersion
.
v
>=
ProtocolVersion
.
TLS11
.
v
)
{
if
(
protocolVersion
.
v
>=
ProtocolVersion
.
TLS11
.
v
)
{
if
(
newLen
<
blockSize
)
{
if
(
newLen
<
blockSize
)
{
...
@@ -448,7 +450,7 @@ final class CipherBox {
...
@@ -448,7 +450,7 @@ final class CipherBox {
*
*
* @see decrypt(byte[], int, int)
* @see decrypt(byte[], int, int)
*/
*/
int
decrypt
(
ByteBuffer
bb
)
throws
BadPaddingException
{
int
decrypt
(
ByteBuffer
bb
,
int
tagLen
)
throws
BadPaddingException
{
int
len
=
bb
.
remaining
();
int
len
=
bb
.
remaining
();
...
@@ -471,7 +473,6 @@ final class CipherBox {
...
@@ -471,7 +473,6 @@ final class CipherBox {
}
}
if
(
debug
!=
null
&&
Debug
.
isOn
(
"plaintext"
))
{
if
(
debug
!=
null
&&
Debug
.
isOn
(
"plaintext"
))
{
bb
.
position
(
pos
);
try
{
try
{
HexDumpEncoder
hd
=
new
HexDumpEncoder
();
HexDumpEncoder
hd
=
new
HexDumpEncoder
();
...
@@ -479,7 +480,8 @@ final class CipherBox {
...
@@ -479,7 +480,8 @@ final class CipherBox {
"Padded plaintext after DECRYPTION: len = "
"Padded plaintext after DECRYPTION: len = "
+
newLen
);
+
newLen
);
hd
.
encodeBuffer
(
bb
,
System
.
out
);
hd
.
encodeBuffer
(
(
ByteBuffer
)
bb
.
duplicate
().
position
(
pos
),
System
.
out
);
}
catch
(
IOException
e
)
{
}
}
catch
(
IOException
e
)
{
}
}
}
...
@@ -488,7 +490,8 @@ final class CipherBox {
...
@@ -488,7 +490,8 @@ final class CipherBox {
*/
*/
if
(
blockSize
!=
0
)
{
if
(
blockSize
!=
0
)
{
bb
.
position
(
pos
);
bb
.
position
(
pos
);
newLen
=
removePadding
(
bb
,
blockSize
,
protocolVersion
);
newLen
=
removePadding
(
bb
,
tagLen
,
blockSize
,
protocolVersion
);
if
(
protocolVersion
.
v
>=
ProtocolVersion
.
TLS11
.
v
)
{
if
(
protocolVersion
.
v
>=
ProtocolVersion
.
TLS11
.
v
)
{
if
(
newLen
<
blockSize
)
{
if
(
newLen
<
blockSize
)
{
...
@@ -590,6 +593,65 @@ final class CipherBox {
...
@@ -590,6 +593,65 @@ final class CipherBox {
return
newlen
;
return
newlen
;
}
}
/*
* A constant-time check of the padding.
*
* NOTE that we are checking both the padding and the padLen bytes here.
*
* The caller MUST ensure that the len parameter is a positive number.
*/
private
static
int
[]
checkPadding
(
byte
[]
buf
,
int
offset
,
int
len
,
byte
pad
)
{
if
(
len
<=
0
)
{
throw
new
RuntimeException
(
"padding len must be positive"
);
}
// An array of hits is used to prevent Hotspot optimization for
// the purpose of a constant-time check.
int
[]
results
=
{
0
,
0
};
// {missed #, matched #}
for
(
int
i
=
0
;
i
<=
256
;)
{
for
(
int
j
=
0
;
j
<
len
&&
i
<=
256
;
j
++,
i
++)
{
// j <= i
if
(
buf
[
offset
+
j
]
!=
pad
)
{
results
[
0
]++;
// mismatched padding data
}
else
{
results
[
1
]++;
// matched padding data
}
}
}
return
results
;
}
/*
* A constant-time check of the padding.
*
* NOTE that we are checking both the padding and the padLen bytes here.
*
* The caller MUST ensure that the bb parameter has remaining.
*/
private
static
int
[]
checkPadding
(
ByteBuffer
bb
,
byte
pad
)
{
if
(!
bb
.
hasRemaining
())
{
throw
new
RuntimeException
(
"hasRemaining() must be positive"
);
}
// An array of hits is used to prevent Hotspot optimization for
// the purpose of a constant-time check.
int
[]
results
=
{
0
,
0
};
// {missed #, matched #}
bb
.
mark
();
for
(
int
i
=
0
;
i
<=
256
;
bb
.
reset
())
{
for
(;
bb
.
hasRemaining
()
&&
i
<=
256
;
i
++)
{
if
(
bb
.
get
()
!=
pad
)
{
results
[
0
]++;
// mismatched padding data
}
else
{
results
[
1
]++;
// matched padding data
}
}
}
return
results
;
}
/*
/*
* Typical TLS padding format for a 64 bit block cipher is as follows:
* Typical TLS padding format for a 64 bit block cipher is as follows:
...
@@ -602,86 +664,95 @@ final class CipherBox {
...
@@ -602,86 +664,95 @@ final class CipherBox {
* as it makes the data a multiple of the block size
* as it makes the data a multiple of the block size
*/
*/
private
static
int
removePadding
(
byte
[]
buf
,
int
offset
,
int
len
,
private
static
int
removePadding
(
byte
[]
buf
,
int
offset
,
int
len
,
int
blockSize
,
ProtocolVersion
protocolVersion
)
int
tagLen
,
int
blockSize
,
throws
BadPaddingException
{
ProtocolVersion
protocolVersion
)
throws
BadPaddingException
{
// last byte is length byte (i.e. actual padding length - 1)
// last byte is length byte (i.e. actual padding length - 1)
int
padOffset
=
offset
+
len
-
1
;
int
padOffset
=
offset
+
len
-
1
;
int
pad
=
buf
[
padOffset
]
&
0x0ff
;
int
padLen
=
buf
[
padOffset
]
&
0xFF
;
int
newLen
=
len
-
(
padLen
+
1
);
if
((
newLen
-
tagLen
)
<
0
)
{
// If the buffer is not long enough to contain the padding plus
// a MAC tag, do a dummy constant-time padding check.
//
// Note that it is a dummy check, so we won't care about what is
// the actual padding data.
checkPadding
(
buf
,
offset
,
len
,
(
byte
)(
padLen
&
0xFF
));
int
newlen
=
len
-
(
pad
+
1
);
throw
new
BadPaddingException
(
"Invalid Padding length: "
+
padLen
);
if
(
newlen
<
0
)
{
throw
new
BadPaddingException
(
"Padding length invalid: "
+
pad
);
}
}
// The padding data should be filled with the padding length value.
int
[]
results
=
checkPadding
(
buf
,
offset
+
newLen
,
padLen
+
1
,
(
byte
)(
padLen
&
0xFF
));
if
(
protocolVersion
.
v
>=
ProtocolVersion
.
TLS10
.
v
)
{
if
(
protocolVersion
.
v
>=
ProtocolVersion
.
TLS10
.
v
)
{
for
(
int
i
=
1
;
i
<=
pad
;
i
++)
{
if
(
results
[
0
]
!=
0
)
{
// padding data has invalid bytes
int
val
=
buf
[
padOffset
-
i
]
&
0xff
;
throw
new
BadPaddingException
(
"Invalid TLS padding data"
);
if
(
val
!=
pad
)
{
throw
new
BadPaddingException
(
"Invalid TLS padding: "
+
val
);
}
}
}
}
else
{
// SSLv3
}
else
{
// SSLv3
// SSLv3 requires 0 <= length byte < block size
// SSLv3 requires 0 <= length byte < block size
// some implementations do 1 <= length byte <= block size,
// some implementations do 1 <= length byte <= block size,
// so accept that as well
// so accept that as well
// v3 does not require any particular value for the other bytes
// v3 does not require any particular value for the other bytes
if
(
pad
>
blockSize
)
{
if
(
pad
Len
>
blockSize
)
{
throw
new
BadPaddingException
(
"Invalid SSLv3 padding
: "
+
pad
);
throw
new
BadPaddingException
(
"Invalid SSLv3 padding
"
);
}
}
}
}
return
new
l
en
;
return
new
L
en
;
}
}
/*
/*
* Position/limit is equal the removed padding.
* Position/limit is equal the removed padding.
*/
*/
private
static
int
removePadding
(
ByteBuffer
bb
,
private
static
int
removePadding
(
ByteBuffer
bb
,
int
blockSize
,
ProtocolVersion
protocolVersion
)
int
tagLen
,
int
blockSize
,
throws
BadPaddingException
{
ProtocolVersion
protocolVersion
)
throws
BadPaddingException
{
int
len
=
bb
.
remaining
();
int
len
=
bb
.
remaining
();
int
offset
=
bb
.
position
();
int
offset
=
bb
.
position
();
// last byte is length byte (i.e. actual padding length - 1)
// last byte is length byte (i.e. actual padding length - 1)
int
padOffset
=
offset
+
len
-
1
;
int
padOffset
=
offset
+
len
-
1
;
int
pad
=
bb
.
get
(
padOffset
)
&
0x0ff
;
int
padLen
=
bb
.
get
(
padOffset
)
&
0xFF
;
int
newLen
=
len
-
(
padLen
+
1
);
if
((
newLen
-
tagLen
)
<
0
)
{
// If the buffer is not long enough to contain the padding plus
// a MAC tag, do a dummy constant-time padding check.
//
// Note that it is a dummy check, so we won't care about what is
// the actual padding data.
checkPadding
(
bb
.
duplicate
(),
(
byte
)(
padLen
&
0xFF
));
int
newlen
=
len
-
(
pad
+
1
);
throw
new
BadPaddingException
(
"Invalid Padding length: "
+
padLen
);
if
(
newlen
<
0
)
{
throw
new
BadPaddingException
(
"Padding length invalid: "
+
pad
);
}
}
/
*
/
/ The padding data should be filled with the padding length value.
* We could zero the padding area, but not much useful
int
[]
results
=
checkPadding
(
* information there.
(
ByteBuffer
)
bb
.
duplicate
().
position
(
offset
+
newLen
),
*/
(
byte
)(
padLen
&
0xFF
));
if
(
protocolVersion
.
v
>=
ProtocolVersion
.
TLS10
.
v
)
{
if
(
protocolVersion
.
v
>=
ProtocolVersion
.
TLS10
.
v
)
{
bb
.
put
(
padOffset
,
(
byte
)
0
);
// zero the padding.
if
(
results
[
0
]
!=
0
)
{
// padding data has invalid bytes
for
(
int
i
=
1
;
i
<=
pad
;
i
++)
{
throw
new
BadPaddingException
(
"Invalid TLS padding data"
);
int
val
=
bb
.
get
(
padOffset
-
i
)
&
0xff
;
if
(
val
!=
pad
)
{
throw
new
BadPaddingException
(
"Invalid TLS padding: "
+
val
);
}
}
}
}
else
{
// SSLv3
}
else
{
// SSLv3
// SSLv3 requires 0 <= length byte < block size
// SSLv3 requires 0 <= length byte < block size
// some implementations do 1 <= length byte <= block size,
// some implementations do 1 <= length byte <= block size,
// so accept that as well
// so accept that as well
// v3 does not require any particular value for the other bytes
// v3 does not require any particular value for the other bytes
if
(
pad
>
blockSize
)
{
if
(
pad
Len
>
blockSize
)
{
throw
new
BadPaddingException
(
"Invalid SSLv3 padding
: "
+
pad
);
throw
new
BadPaddingException
(
"Invalid SSLv3 padding
"
);
}
}
}
}
/*
/*
* Reset buffer limit to remove padding.
* Reset buffer limit to remove padding.
*/
*/
bb
.
position
(
offset
+
new
l
en
);
bb
.
position
(
offset
+
new
L
en
);
bb
.
limit
(
offset
+
new
l
en
);
bb
.
limit
(
offset
+
new
L
en
);
return
new
l
en
;
return
new
L
en
;
}
}
/*
/*
...
@@ -708,4 +779,45 @@ final class CipherBox {
...
@@ -708,4 +779,45 @@ final class CipherBox {
boolean
isCBCMode
()
{
boolean
isCBCMode
()
{
return
isCBCMode
;
return
isCBCMode
;
}
}
/**
* Is the cipher null?
*
* @return true if the cipher is null, false otherwise.
*/
boolean
isNullCipher
()
{
return
cipher
==
null
;
}
/**
* Sanity check the length of a fragment before decryption.
*
* In CBC mode, check that the fragment length is one or multiple times
* of the block size of the cipher suite, and is at least one (one is the
* smallest size of padding in CBC mode) bigger than the tag size of the
* MAC algorithm except the explicit IV size for TLS 1.1 or later.
*
* In non-CBC mode, check that the fragment length is not less than the
* tag size of the MAC algorithm.
*
* @return true if the length of a fragment matches above requirements
*/
boolean
sanityCheck
(
int
tagLen
,
int
fragmentLen
)
{
if
(!
isCBCMode
)
{
return
fragmentLen
>=
tagLen
;
}
if
((
fragmentLen
%
blockSize
)
==
0
)
{
int
minimal
=
tagLen
+
1
;
minimal
=
(
minimal
>=
blockSize
)
?
minimal
:
blockSize
;
if
(
protocolVersion
.
v
>=
ProtocolVersion
.
TLS11
.
v
)
{
minimal
+=
blockSize
;
// plus the size of the explicit IV
}
return
(
fragmentLen
>=
minimal
);
}
return
false
;
}
}
}
src/share/classes/sun/security/ssl/CipherSuite.java
浏览文件 @
98c5c8c7
/*
/*
* Copyright (c) 2002, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 201
3
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -549,9 +549,18 @@ final class CipherSuite implements Comparable<CipherSuite> {
...
@@ -549,9 +549,18 @@ final class CipherSuite implements Comparable<CipherSuite> {
// size of the MAC value (and MAC key) in bytes
// size of the MAC value (and MAC key) in bytes
final
int
size
;
final
int
size
;
MacAlg
(
String
name
,
int
size
)
{
// block size of the underlying hash algorithm
final
int
hashBlockSize
;
// minimal padding size of the underlying hash algorithm
final
int
minimalPaddingSize
;
MacAlg
(
String
name
,
int
size
,
int
hashBlockSize
,
int
minimalPaddingSize
)
{
this
.
name
=
name
;
this
.
name
=
name
;
this
.
size
=
size
;
this
.
size
=
size
;
this
.
hashBlockSize
=
hashBlockSize
;
this
.
minimalPaddingSize
=
minimalPaddingSize
;
}
}
/**
/**
...
@@ -596,11 +605,11 @@ final class CipherSuite implements Comparable<CipherSuite> {
...
@@ -596,11 +605,11 @@ final class CipherSuite implements Comparable<CipherSuite> {
new
BulkCipher
(
CIPHER_AES
,
32
,
16
,
true
);
new
BulkCipher
(
CIPHER_AES
,
32
,
16
,
true
);
// MACs
// MACs
final
static
MacAlg
M_NULL
=
new
MacAlg
(
"NULL"
,
0
);
final
static
MacAlg
M_NULL
=
new
MacAlg
(
"NULL"
,
0
,
0
,
0
);
final
static
MacAlg
M_MD5
=
new
MacAlg
(
"MD5"
,
16
);
final
static
MacAlg
M_MD5
=
new
MacAlg
(
"MD5"
,
16
,
64
,
9
);
final
static
MacAlg
M_SHA
=
new
MacAlg
(
"SHA"
,
20
);
final
static
MacAlg
M_SHA
=
new
MacAlg
(
"SHA"
,
20
,
64
,
9
);
final
static
MacAlg
M_SHA256
=
new
MacAlg
(
"SHA256"
,
32
);
final
static
MacAlg
M_SHA256
=
new
MacAlg
(
"SHA256"
,
32
,
64
,
9
);
final
static
MacAlg
M_SHA384
=
new
MacAlg
(
"SHA384"
,
48
);
final
static
MacAlg
M_SHA384
=
new
MacAlg
(
"SHA384"
,
48
,
128
,
17
);
/**
/**
* PRFs (PseudoRandom Function) from TLS specifications.
* PRFs (PseudoRandom Function) from TLS specifications.
...
...
src/share/classes/sun/security/ssl/EngineInputRecord.java
浏览文件 @
98c5c8c7
/*
/*
* Copyright (c) 2003, 20
07
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 20
13
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -178,91 +178,169 @@ final class EngineInputRecord extends InputRecord {
...
@@ -178,91 +178,169 @@ final class EngineInputRecord extends InputRecord {
}
}
/*
/*
*
Verifies and removes the MAC value. Returns true if
*
Pass the data down if it's internally cached, otherwise
*
the MAC checks out OK
.
*
do it here
.
*
*
* On entry:
* If internal data, data is decrypted internally.
* position = beginning of app/MAC data
* limit = end of MAC data.
*
*
* On return:
* If external data(app), return a new ByteBuffer with data to
* position = beginning of app data
* process.
* limit = end of app data
*/
*/
boolean
checkMAC
(
MAC
signer
,
ByteBuffer
bb
)
{
ByteBuffer
decrypt
(
MAC
signer
,
CipherBox
box
,
ByteBuffer
bb
)
throws
BadPaddingException
{
if
(
internalData
)
{
if
(
internalData
)
{
return
checkMAC
(
signer
);
decrypt
(
signer
,
box
);
// MAC is checked during decryption
return
tmpBB
;
}
}
int
len
=
signer
.
MAClen
();
BadPaddingException
reservedBPE
=
null
;
if
(
len
==
0
)
{
// no mac
int
tagLen
=
signer
.
MAClen
();
return
true
;
int
cipheredLength
=
bb
.
remaining
();
if
(!
box
.
isNullCipher
())
{
// sanity check length of the ciphertext
if
(!
box
.
sanityCheck
(
tagLen
,
cipheredLength
))
{
throw
new
BadPaddingException
(
"ciphertext sanity check failed"
);
}
}
/*
try
{
* Grab the original limit
// Note that the CipherBox.decrypt() does not change
*/
// the capacity of the buffer.
int
lim
=
bb
.
limit
();
box
.
decrypt
(
bb
,
tagLen
);
}
catch
(
BadPaddingException
bpe
)
{
// RFC 2246 states that decryption_failed should be used
// for this purpose. However, that allows certain attacks,
// so we just send bad record MAC. We also need to make
// sure to always check the MAC to avoid a timing attack
// for the same issue. See paper by Vaudenay et al and the
// update in RFC 4346/5246.
//
// Failover to message authentication code checking.
reservedBPE
=
bpe
;
}
finally
{
bb
.
rewind
();
}
}
/*
if
(
tagLen
!=
0
)
{
* Delineate the area to apply a MAC on.
int
macOffset
=
bb
.
limit
()
-
tagLen
;
*/
int
macData
=
lim
-
len
;
// Note that although it is not necessary, we run the same MAC
bb
.
limit
(
macData
);
// computation and comparison on the payload for both stream
// cipher and CBC block cipher.
if
(
bb
.
remaining
()
<
tagLen
)
{
// negative data length, something is wrong
if
(
reservedBPE
==
null
)
{
reservedBPE
=
new
BadPaddingException
(
"bad record"
);
}
byte
[]
mac
=
signer
.
compute
(
contentType
(),
bb
);
// set offset of the dummy MAC
macOffset
=
cipheredLength
-
tagLen
;
bb
.
limit
(
cipheredLength
);
}
if
(
len
!=
mac
.
length
)
{
// Run MAC computation and comparison on the payload.
throw
new
RuntimeException
(
"Internal MAC error"
);
if
(
checkMacTags
(
contentType
(),
bb
,
signer
,
false
))
{
if
(
reservedBPE
==
null
)
{
reservedBPE
=
new
BadPaddingException
(
"bad record MAC"
);
}
}
// Run MAC computation and comparison on the remainder.
//
// It is only necessary for CBC block cipher. It is used to get a
// constant time of MAC computation and comparison on each record.
if
(
box
.
isCBCMode
())
{
int
remainingLen
=
calculateRemainingLen
(
signer
,
cipheredLength
,
macOffset
);
// NOTE: here we use the InputRecord.buf because I did not find
// an effective way to work on ByteBuffer when its capacity is
// less than remainingLen.
// NOTE: remainingLen may be bigger (less than 1 block of the
// hash algorithm of the MAC) than the cipheredLength. However,
// We won't need to worry about it because we always use a
// maximum buffer for every record. We need a change here if
// we use small buffer size in the future.
if
(
remainingLen
>
buf
.
length
)
{
// unlikely to happen, just a placehold
throw
new
RuntimeException
(
"Internal buffer capacity error"
);
}
// Won't need to worry about the result on the remainder. And
// then we won't need to worry about what's actual data to
// check MAC tag on. We start the check from the header of the
// buffer so that we don't need to construct a new byte buffer.
checkMacTags
(
contentType
(),
buf
,
0
,
remainingLen
,
signer
,
true
);
}
bb
.
limit
(
macOffset
);
}
// Is it a failover?
if
(
reservedBPE
!=
null
)
{
throw
reservedBPE
;
}
return
bb
.
slice
();
}
}
/*
/*
* Delineate the MAC values, position was already set
* Run MAC computation and comparison
* by doing the compute above.
*
*
* We could zero the MAC area, but not much useful information
* Please DON'T change the content of the ByteBuffer parameter!
* there anyway.
*/
*/
private
static
boolean
checkMacTags
(
byte
contentType
,
ByteBuffer
bb
,
MAC
signer
,
boolean
isSimulated
)
{
int
tagLen
=
signer
.
MAClen
();
int
lim
=
bb
.
limit
();
int
macData
=
lim
-
tagLen
;
bb
.
limit
(
macData
);
byte
[]
hash
=
signer
.
compute
(
contentType
,
bb
,
isSimulated
);
if
(
hash
==
null
||
tagLen
!=
hash
.
length
)
{
// Something is wrong with MAC implementation.
throw
new
RuntimeException
(
"Internal MAC error"
);
}
bb
.
position
(
macData
);
bb
.
position
(
macData
);
bb
.
limit
(
lim
);
bb
.
limit
(
lim
);
try
{
try
{
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
int
[]
results
=
compareMacTags
(
bb
,
hash
);
if
(
bb
.
get
()
!=
mac
[
i
])
{
// No BB.equals(byte []); !
return
(
results
[
0
]
!=
0
);
return
false
;
}
}
return
true
;
}
finally
{
}
finally
{
/*
* Position to the data.
*/
bb
.
rewind
();
bb
.
rewind
();
bb
.
limit
(
macData
);
bb
.
limit
(
macData
);
}
}
}
}
/*
/*
* Pass the data down if it's internally cached, otherwise
* A constant-time comparison of the MAC tags.
* do it here.
*
* If internal data, data is decrypted internally.
*
*
* If external data(app), return a new ByteBuffer with data to
* Please DON'T change the content of the ByteBuffer parameter!
* process.
*/
*/
ByteBuffer
decrypt
(
CipherBox
box
,
ByteBuffer
bb
)
private
static
int
[]
compareMacTags
(
ByteBuffer
bb
,
byte
[]
tag
)
{
throws
BadPaddingException
{
if
(
internalData
)
{
// An array of hits is used to prevent Hotspot optimization for
decrypt
(
box
);
// the purpose of a constant-time check.
return
tmpBB
;
int
[]
results
=
{
0
,
0
};
// {missed #, matched #}
}
box
.
decrypt
(
bb
);
// The caller ensures there are enough bytes available in the buffer.
bb
.
rewind
();
// So we won't need to check the remaining of the buffer.
for
(
int
i
=
0
;
i
<
tag
.
length
;
i
++)
{
if
(
bb
.
get
()
!=
tag
[
i
])
{
results
[
0
]++;
// mismatched bytes
}
else
{
results
[
1
]++;
// matched bytes
}
}
return
bb
.
slice
()
;
return
results
;
}
}
/*
/*
...
...
src/share/classes/sun/security/ssl/EngineOutputRecord.java
浏览文件 @
98c5c8c7
/*
/*
* Copyright (c) 2003, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
3
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -118,7 +118,7 @@ final class EngineOutputRecord extends OutputRecord {
...
@@ -118,7 +118,7 @@ final class EngineOutputRecord extends OutputRecord {
throws
IOException
{
throws
IOException
{
if
(
signer
.
MAClen
()
!=
0
)
{
if
(
signer
.
MAClen
()
!=
0
)
{
byte
[]
hash
=
signer
.
compute
(
contentType
(),
bb
);
byte
[]
hash
=
signer
.
compute
(
contentType
(),
bb
,
false
);
/*
/*
* position was advanced to limit in compute above.
* position was advanced to limit in compute above.
...
...
src/share/classes/sun/security/ssl/InputRecord.java
浏览文件 @
98c5c8c7
/*
/*
* Copyright (c) 1996, 20
08
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 20
13
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -133,43 +133,173 @@ class InputRecord extends ByteArrayInputStream implements Record {
...
@@ -133,43 +133,173 @@ class InputRecord extends ByteArrayInputStream implements Record {
return
handshakeHash
;
return
handshakeHash
;
}
}
/*
void
decrypt
(
MAC
signer
,
CipherBox
box
)
throws
BadPaddingException
{
* Verify and remove the MAC ... used for all records.
*/
BadPaddingException
reservedBPE
=
null
;
boolean
checkMAC
(
MAC
signer
)
{
int
tagLen
=
signer
.
MAClen
();
int
len
=
signer
.
MAClen
();
int
cipheredLength
=
count
-
headerSize
;
if
(
len
==
0
)
{
// no mac
return
true
;
if
(!
box
.
isNullCipher
())
{
// sanity check length of the ciphertext
if
(!
box
.
sanityCheck
(
tagLen
,
cipheredLength
))
{
throw
new
BadPaddingException
(
"ciphertext sanity check failed"
);
}
try
{
// Note that the CipherBox.decrypt() does not change
// the capacity of the buffer.
count
=
headerSize
+
box
.
decrypt
(
buf
,
headerSize
,
cipheredLength
,
tagLen
);
}
catch
(
BadPaddingException
bpe
)
{
// RFC 2246 states that decryption_failed should be used
// for this purpose. However, that allows certain attacks,
// so we just send bad record MAC. We also need to make
// sure to always check the MAC to avoid a timing attack
// for the same issue. See paper by Vaudenay et al and the
// update in RFC 4346/5246.
//
// Failover to message authentication code checking.
reservedBPE
=
bpe
;
}
}
if
(
tagLen
!=
0
)
{
int
macOffset
=
count
-
tagLen
;
int
contentLen
=
macOffset
-
headerSize
;
// Note that although it is not necessary, we run the same MAC
// computation and comparison on the payload for both stream
// cipher and CBC block cipher.
if
(
contentLen
<
0
)
{
// negative data length, something is wrong
if
(
reservedBPE
==
null
)
{
reservedBPE
=
new
BadPaddingException
(
"bad record"
);
}
// set offset of the dummy MAC
macOffset
=
headerSize
+
cipheredLength
-
tagLen
;
contentLen
=
macOffset
-
headerSize
;
}
count
-=
tagLen
;
// Set the count before any MAC checking
// exception occurs, so that the following
// process can read the actual decrypted
// content (minus the MAC) in the fragment
// if necessary.
// Run MAC computation and comparison on the payload.
if
(
checkMacTags
(
contentType
(),
buf
,
headerSize
,
contentLen
,
signer
,
false
))
{
if
(
reservedBPE
==
null
)
{
reservedBPE
=
new
BadPaddingException
(
"bad record MAC"
);
}
}
// Run MAC computation and comparison on the remainder.
//
// It is only necessary for CBC block cipher. It is used to get a
// constant time of MAC computation and comparison on each record.
if
(
box
.
isCBCMode
())
{
int
remainingLen
=
calculateRemainingLen
(
signer
,
cipheredLength
,
contentLen
);
// NOTE: remainingLen may be bigger (less than 1 block of the
// hash algorithm of the MAC) than the cipheredLength. However,
// We won't need to worry about it because we always use a
// maximum buffer for every record. We need a change here if
// we use small buffer size in the future.
if
(
remainingLen
>
buf
.
length
)
{
// unlikely to happen, just a placehold
throw
new
RuntimeException
(
"Internal buffer capacity error"
);
}
}
int
offset
=
count
-
len
;
// Won't need to worry about the result on the remainder. And
// then we won't need to worry about what's actual data to
// check MAC tag on. We start the check from the header of the
// buffer so that we don't need to construct a new byte buffer.
checkMacTags
(
contentType
(),
buf
,
0
,
remainingLen
,
signer
,
true
);
}
}
if
(
offset
<
headerSize
)
{
// Is it a failover?
// data length would be negative, something is wrong
if
(
reservedBPE
!=
null
)
{
return
false
;
throw
reservedBPE
;
}
}
}
byte
[]
mac
=
signer
.
compute
(
contentType
(),
buf
,
/*
headerSize
,
offset
-
headerSize
);
* Run MAC computation and comparison
*
* Please DON'T change the content of the byte buffer parameter!
*/
static
boolean
checkMacTags
(
byte
contentType
,
byte
[]
buffer
,
int
offset
,
int
contentLen
,
MAC
signer
,
boolean
isSimulated
)
{
if
(
len
!=
mac
.
length
)
{
int
tagLen
=
signer
.
MAClen
();
byte
[]
hash
=
signer
.
compute
(
contentType
,
buffer
,
offset
,
contentLen
,
isSimulated
);
if
(
hash
==
null
||
tagLen
!=
hash
.
length
)
{
// Something is wrong with MAC implementation.
throw
new
RuntimeException
(
"Internal MAC error"
);
throw
new
RuntimeException
(
"Internal MAC error"
);
}
}
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
int
[]
results
=
compareMacTags
(
buffer
,
offset
+
contentLen
,
hash
);
if
(
buf
[
offset
+
i
]
!=
mac
[
i
])
{
return
(
results
[
0
]
!=
0
);
return
false
;
}
}
/*
* A constant-time comparison of the MAC tags.
*
* Please DON'T change the content of the byte buffer parameter!
*/
private
static
int
[]
compareMacTags
(
byte
[]
buffer
,
int
offset
,
byte
[]
tag
)
{
// An array of hits is used to prevent Hotspot optimization for
// the purpose of a constant-time check.
int
[]
results
=
{
0
,
0
};
// {missed #, matched #}
// The caller ensures there are enough bytes available in the buffer.
// So we won't need to check the length of the buffer.
for
(
int
i
=
0
;
i
<
tag
.
length
;
i
++)
{
if
(
buffer
[
offset
+
i
]
!=
tag
[
i
])
{
results
[
0
]++;
// mismatched bytes
}
else
{
results
[
1
]++;
// matched bytes
}
}
count
-=
len
;
return
true
;
}
}
void
decrypt
(
CipherBox
box
)
throws
BadPaddingException
{
return
results
;
int
len
=
count
-
headerSize
;
count
=
headerSize
+
box
.
decrypt
(
buf
,
headerSize
,
len
);
}
}
/*
* Calculate the length of a dummy buffer to run MAC computation
* and comparison on the remainder.
*
* The caller MUST ensure that the fullLen is not less than usedLen.
*/
static
int
calculateRemainingLen
(
MAC
signer
,
int
fullLen
,
int
usedLen
)
{
int
blockLen
=
signer
.
hashBlockLen
();
int
minimalPaddingLen
=
signer
.
minimalPaddingLen
();
// (blockLen - minimalPaddingLen) is the maximum message size of
// the last block of hash function operation. See FIPS 180-4, or
// MD5 specification.
fullLen
+=
13
-
(
blockLen
-
minimalPaddingLen
);
usedLen
+=
13
-
(
blockLen
-
minimalPaddingLen
);
// Note: fullLen is always not less than usedLen, and blockLen
// is always bigger than minimalPaddingLen, so we don't worry
// about negative values. 0x01 is added to the result to ensure
// that the return value is positive. The extra one byte does
// not impact the overall MAC compression function evaluations.
return
0x01
+
(
int
)(
Math
.
ceil
(
fullLen
/(
1.0d
*
blockLen
))
-
Math
.
ceil
(
usedLen
/(
1.0d
*
blockLen
)))
*
signer
.
hashBlockLen
();
}
/*
/*
* Well ... hello_request messages are _never_ hashed since we can't
* Well ... hello_request messages are _never_ hashed since we can't
...
...
src/share/classes/sun/security/ssl/MAC.java
浏览文件 @
98c5c8c7
/*
/*
* Copyright (c) 1996, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 201
3
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -43,8 +43,8 @@ import static sun.security.ssl.CipherSuite.*;
...
@@ -43,8 +43,8 @@ import static sun.security.ssl.CipherSuite.*;
* provide integrity protection for SSL messages. The MAC is actually
* provide integrity protection for SSL messages. The MAC is actually
* one of several keyed hashes, as associated with the cipher suite and
* one of several keyed hashes, as associated with the cipher suite and
* protocol version. (SSL v3.0 uses one construct, TLS uses another.)
* protocol version. (SSL v3.0 uses one construct, TLS uses another.)
*
*
<P>
*
<P>
NOTE: MAC computation is the only place in the SSL protocol that the
* NOTE: MAC computation is the only place in the SSL protocol that the
* sequence number is used. It's also reset to zero with each change of
* sequence number is used. It's also reset to zero with each change of
* a cipher spec, so this is the only place this state is needed.
* a cipher spec, so this is the only place this state is needed.
*
*
...
@@ -58,6 +58,9 @@ final class MAC {
...
@@ -58,6 +58,9 @@ final class MAC {
// Value of the null MAC is fixed
// Value of the null MAC is fixed
private
static
final
byte
nullMAC
[]
=
new
byte
[
0
];
private
static
final
byte
nullMAC
[]
=
new
byte
[
0
];
// internal identifier for the MAC algorithm
private
final
MacAlg
macAlg
;
// stuff defined by the kind of MAC algorithm
// stuff defined by the kind of MAC algorithm
private
final
int
macSize
;
private
final
int
macSize
;
...
@@ -82,6 +85,7 @@ final class MAC {
...
@@ -82,6 +85,7 @@ final class MAC {
private
MAC
()
{
private
MAC
()
{
macSize
=
0
;
macSize
=
0
;
macAlg
=
M_NULL
;
mac
=
null
;
mac
=
null
;
block
=
null
;
block
=
null
;
}
}
...
@@ -91,6 +95,7 @@ final class MAC {
...
@@ -91,6 +95,7 @@ final class MAC {
*/
*/
MAC
(
MacAlg
macAlg
,
ProtocolVersion
protocolVersion
,
SecretKey
key
)
MAC
(
MacAlg
macAlg
,
ProtocolVersion
protocolVersion
,
SecretKey
key
)
throws
NoSuchAlgorithmException
,
InvalidKeyException
{
throws
NoSuchAlgorithmException
,
InvalidKeyException
{
this
.
macAlg
=
macAlg
;
this
.
macSize
=
macAlg
.
size
;
this
.
macSize
=
macAlg
.
size
;
String
algorithm
;
String
algorithm
;
...
@@ -127,6 +132,20 @@ final class MAC {
...
@@ -127,6 +132,20 @@ final class MAC {
return
macSize
;
return
macSize
;
}
}
/**
* Returns the hash function block length of the MAC alorithm.
*/
int
hashBlockLen
()
{
return
macAlg
.
hashBlockSize
;
}
/**
* Returns the hash function minimal padding length of the MAC alorithm.
*/
int
minimalPaddingLen
()
{
return
macAlg
.
minimalPaddingSize
;
}
/**
/**
* Computes and returns the MAC for the data in this byte array.
* Computes and returns the MAC for the data in this byte array.
*
*
...
@@ -134,9 +153,11 @@ final class MAC {
...
@@ -134,9 +153,11 @@ final class MAC {
* @param buf compressed record on which the MAC is computed
* @param buf compressed record on which the MAC is computed
* @param offset start of compressed record data
* @param offset start of compressed record data
* @param len the size of the compressed record
* @param len the size of the compressed record
* @param isSimulated if true, simulate the the MAC computation
*/
*/
final
byte
[]
compute
(
byte
type
,
byte
buf
[],
int
offset
,
int
len
)
{
final
byte
[]
compute
(
byte
type
,
byte
buf
[],
return
compute
(
type
,
null
,
buf
,
offset
,
len
);
int
offset
,
int
len
,
boolean
isSimulated
)
{
return
compute
(
type
,
null
,
buf
,
offset
,
len
,
isSimulated
);
}
}
/**
/**
...
@@ -149,9 +170,10 @@ final class MAC {
...
@@ -149,9 +170,10 @@ final class MAC {
* @param type record type
* @param type record type
* @param bb a ByteBuffer in which the position and limit
* @param bb a ByteBuffer in which the position and limit
* demarcate the data to be MAC'd.
* demarcate the data to be MAC'd.
* @param isSimulated if true, simulate the the MAC computation
*/
*/
final
byte
[]
compute
(
byte
type
,
ByteBuffer
bb
)
{
final
byte
[]
compute
(
byte
type
,
ByteBuffer
bb
,
boolean
isSimulated
)
{
return
compute
(
type
,
bb
,
null
,
0
,
bb
.
remaining
());
return
compute
(
type
,
bb
,
null
,
0
,
bb
.
remaining
()
,
isSimulated
);
}
}
/**
/**
...
@@ -204,18 +226,21 @@ final class MAC {
...
@@ -204,18 +226,21 @@ final class MAC {
* or buf/offset/len.
* or buf/offset/len.
*/
*/
private
byte
[]
compute
(
byte
type
,
ByteBuffer
bb
,
byte
[]
buf
,
private
byte
[]
compute
(
byte
type
,
ByteBuffer
bb
,
byte
[]
buf
,
int
offset
,
int
len
)
{
int
offset
,
int
len
,
boolean
isSimulated
)
{
if
(
macSize
==
0
)
{
if
(
macSize
==
0
)
{
return
nullMAC
;
return
nullMAC
;
}
}
// MUST NOT increase the sequence number for a simulated computation.
if
(!
isSimulated
)
{
block
[
BLOCK_OFFSET_TYPE
]
=
type
;
block
[
BLOCK_OFFSET_TYPE
]
=
type
;
block
[
block
.
length
-
2
]
=
(
byte
)(
len
>>
8
);
block
[
block
.
length
-
2
]
=
(
byte
)(
len
>>
8
);
block
[
block
.
length
-
1
]
=
(
byte
)(
len
);
block
[
block
.
length
-
1
]
=
(
byte
)(
len
);
mac
.
update
(
block
);
mac
.
update
(
block
);
incrementSequenceNumber
();
incrementSequenceNumber
();
}
// content
// content
if
(
bb
!=
null
)
{
if
(
bb
!=
null
)
{
...
...
src/share/classes/sun/security/ssl/OutputRecord.java
浏览文件 @
98c5c8c7
/*
/*
* Copyright (c) 1996, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 201
3
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -205,7 +205,7 @@ class OutputRecord extends ByteArrayOutputStream implements Record {
...
@@ -205,7 +205,7 @@ class OutputRecord extends ByteArrayOutputStream implements Record {
}
}
if
(
signer
.
MAClen
()
!=
0
)
{
if
(
signer
.
MAClen
()
!=
0
)
{
byte
[]
hash
=
signer
.
compute
(
contentType
,
buf
,
byte
[]
hash
=
signer
.
compute
(
contentType
,
buf
,
headerSize
,
count
-
headerSize
);
headerSize
,
count
-
headerSize
,
false
);
write
(
hash
);
write
(
hash
);
}
}
}
}
...
...
src/share/classes/sun/security/ssl/SSLEngineImpl.java
浏览文件 @
98c5c8c7
/*
/*
* Copyright (c) 2003, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
3
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -958,35 +958,15 @@ final public class SSLEngineImpl extends SSLEngine {
...
@@ -958,35 +958,15 @@ final public class SSLEngineImpl extends SSLEngine {
* throw a fatal alert if the integrity check fails.
* throw a fatal alert if the integrity check fails.
*/
*/
try
{
try
{
decryptedBB
=
inputRecord
.
decrypt
(
readCipher
,
readBB
);
decryptedBB
=
inputRecord
.
decrypt
(
read
MAC
,
read
Cipher
,
readBB
);
}
catch
(
BadPaddingException
e
)
{
}
catch
(
BadPaddingException
e
)
{
// RFC 2246 states that decryption_failed should be used
// for this purpose. However, that allows certain attacks,
// so we just send bad record MAC. We also need to make
// sure to always check the MAC to avoid a timing attack
// for the same issue. See paper by Vaudenay et al.
//
// rewind the BB if necessary.
readBB
.
rewind
();
inputRecord
.
checkMAC
(
readMAC
,
readBB
);
// use the same alert types as for MAC failure below
byte
alertType
=
(
inputRecord
.
contentType
()
==
byte
alertType
=
(
inputRecord
.
contentType
()
==
Record
.
ct_handshake
)
?
Record
.
ct_handshake
)
?
Alerts
.
alert_handshake_failure
:
Alerts
.
alert_handshake_failure
:
Alerts
.
alert_bad_record_mac
;
Alerts
.
alert_bad_record_mac
;
fatal
(
alertType
,
"Invalid padding"
,
e
);
fatal
(
alertType
,
e
.
getMessage
()
,
e
);
}
}
if
(!
inputRecord
.
checkMAC
(
readMAC
,
decryptedBB
))
{
if
(
inputRecord
.
contentType
()
==
Record
.
ct_handshake
)
{
fatal
(
Alerts
.
alert_handshake_failure
,
"bad handshake record MAC"
);
}
else
{
fatal
(
Alerts
.
alert_bad_record_mac
,
"bad record MAC"
);
}
}
// if (!inputRecord.decompress(c))
// if (!inputRecord.decompress(c))
// fatal(Alerts.alert_decompression_failure,
// fatal(Alerts.alert_decompression_failure,
...
...
src/share/classes/sun/security/ssl/SSLSocketImpl.java
浏览文件 @
98c5c8c7
/*
/*
* Copyright (c) 1996, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 201
3
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -986,29 +986,13 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl {
...
@@ -986,29 +986,13 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl {
* throw a fatal alert if the integrity check fails.
* throw a fatal alert if the integrity check fails.
*/
*/
try
{
try
{
r
.
decrypt
(
readCipher
);
r
.
decrypt
(
read
MAC
,
read
Cipher
);
}
catch
(
BadPaddingException
e
)
{
}
catch
(
BadPaddingException
e
)
{
// RFC 2246 states that decryption_failed should be used
// for this purpose. However, that allows certain attacks,
// so we just send bad record MAC. We also need to make
// sure to always check the MAC to avoid a timing attack
// for the same issue. See paper by Vaudenay et al.
r
.
checkMAC
(
readMAC
);
// use the same alert types as for MAC failure below
byte
alertType
=
(
r
.
contentType
()
==
Record
.
ct_handshake
)
byte
alertType
=
(
r
.
contentType
()
==
Record
.
ct_handshake
)
?
Alerts
.
alert_handshake_failure
?
Alerts
.
alert_handshake_failure
:
Alerts
.
alert_bad_record_mac
;
:
Alerts
.
alert_bad_record_mac
;
fatal
(
alertType
,
"Invalid padding"
,
e
);
fatal
(
alertType
,
e
.
getMessage
()
,
e
);
}
}
if
(!
r
.
checkMAC
(
readMAC
))
{
if
(
r
.
contentType
()
==
Record
.
ct_handshake
)
{
fatal
(
Alerts
.
alert_handshake_failure
,
"bad handshake record MAC"
);
}
else
{
fatal
(
Alerts
.
alert_bad_record_mac
,
"bad record MAC"
);
}
}
// if (!r.decompress(c))
// if (!r.decompress(c))
// fatal(Alerts.alert_decompression_failure,
// fatal(Alerts.alert_decompression_failure,
...
...
src/share/classes/sun/security/util/UntrustedCertificates.java
浏览文件 @
98c5c8c7
/*
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012,
2013,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -737,5 +737,111 @@ public final class UntrustedCertificates {
...
@@ -737,5 +737,111 @@ public final class UntrustedCertificates {
"B8WfedLHjFW/TMcnXlEWKz4=\n"
+
"B8WfedLHjFW/TMcnXlEWKz4=\n"
+
"-----END CERTIFICATE-----"
);
"-----END CERTIFICATE-----"
);
//
// Revoked DigiCert code signing certificates used to sign malware
//
// Subject: CN=Buster Paper Comercial Ltda,
// O=Buster Paper Comercial Ltda,
// L=S?o Jos? Dos Campos,
// ST=S?o Paulo,
// C=BR
// Issuer: CN=DigiCert Assured ID Code Signing CA-1,
// OU=www.digicert.com,
// O=DigiCert Inc,
// C=US
// Serial: 07:b4:4c:db:ff:fb:78:de:05:f4:26:16:72:a6:73:12
add
(
"buster-paper-comercial-ltda-72A67312"
,
"-----BEGIN CERTIFICATE-----\n"
+
"MIIGwzCCBaugAwIBAgIQB7RM2//7eN4F9CYWcqZzEjANBgkqhkiG9w0BAQUFADBv\n"
+
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
+
"d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv\n"
+
"ZGUgU2lnbmluZyBDQS0xMB4XDTEzMDExNzAwMDAwMFoXDTE0MDEyMjEyMDAwMFow\n"
+
"gY4xCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMR4wHAYDVQQHDBVT\n"
+
"w6NvIEpvc8OpIERvcyBDYW1wb3MxJDAiBgNVBAoTG0J1c3RlciBQYXBlciBDb21l\n"
+
"cmNpYWwgTHRkYTEkMCIGA1UEAxMbQnVzdGVyIFBhcGVyIENvbWVyY2lhbCBMdGRh\n"
+
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzO0l6jWIpEfO2oUpVHpL\n"
+
"HETj5lzivNb0S9jKHgGJax917czh81PnGTxwxFXd6gLJuy/XFHvmiSi8g8jzlymn\n"
+
"2Ji5zQ3CPaz7nomJokSUDlMVJ2qYWtctw4jrdjuI4qtn+koXXUFkWjkf8h8251I4\n"
+
"tUs7S49HE2Go5owCYP3byajj7fsFAYR/Xb7TdVtndkZsUB/YgOjHovyACjouaNCi\n"
+
"mDiRyQ6zLLjZGiyeD65Yiseuhp5b8/BL5h1p7w76QYMYMVQNAdtDKut2R8MBpuWf\n"
+
"Ny7Eoi0x/gm1p9X5Rcl5aN7K0G4UtTAJKbkuUfXddsyFoM0Nx8uo8SgNQ8Y/X5Jx\n"
+
"BwIDAQABo4IDOTCCAzUwHwYDVR0jBBgwFoAUe2jOKarAF75JeuHlP9an90WPNTIw\n"
+
"HQYDVR0OBBYEFFLZ3n5nt/Eer7n1bvtOqMb1qKO5MA4GA1UdDwEB/wQEAwIHgDAT\n"
+
"BgNVHSUEDDAKBggrBgEFBQcDAzBzBgNVHR8EbDBqMDOgMaAvhi1odHRwOi8vY3Js\n"
+
"My5kaWdpY2VydC5jb20vYXNzdXJlZC1jcy0yMDExYS5jcmwwM6AxoC+GLWh0dHA6\n"
+
"Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9hc3N1cmVkLWNzLTIwMTFhLmNybDCCAcQGA1Ud\n"
+
"IASCAbswggG3MIIBswYJYIZIAYb9bAMBMIIBpDA6BggrBgEFBQcCARYuaHR0cDov\n"
+
"L3d3dy5kaWdpY2VydC5jb20vc3NsLWNwcy1yZXBvc2l0b3J5Lmh0bTCCAWQGCCsG\n"
+
"AQUFBwICMIIBVh6CAVIAQQBuAHkAIAB1AHMAZQAgAG8AZgAgAHQAaABpAHMAIABD\n"
+
"AGUAcgB0AGkAZgBpAGMAYQB0AGUAIABjAG8AbgBzAHQAaQB0AHUAdABlAHMAIABh\n"
+
"AGMAYwBlAHAAdABhAG4AYwBlACAAbwBmACAAdABoAGUAIABEAGkAZwBpAEMAZQBy\n"
+
"AHQAIABDAFAALwBDAFAAUwAgAGEAbgBkACAAdABoAGUAIABSAGUAbAB5AGkAbgBn\n"
+
"ACAAUABhAHIAdAB5ACAAQQBnAHIAZQBlAG0AZQBuAHQAIAB3AGgAaQBjAGgAIABs\n"
+
"AGkAbQBpAHQAIABsAGkAYQBiAGkAbABpAHQAeQAgAGEAbgBkACAAYQByAGUAIABp\n"
+
"AG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGgAZQByAGUAaQBuACAAYgB5ACAAcgBl\n"
+
"AGYAZQByAGUAbgBjAGUALjCBggYIKwYBBQUHAQEEdjB0MCQGCCsGAQUFBzABhhho\n"
+
"dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wTAYIKwYBBQUHMAKGQGh0dHA6Ly9jYWNl\n"
+
"cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRENvZGVTaWduaW5nQ0Et\n"
+
"MS5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOCAQEAPTTQvpOIikXI\n"
+
"hTLnNbajaFRR5GhQpTzUNgBfF9VYSlNw/wMjpGsrh5RxaJCip52jbehmTgjMRhft\n"
+
"jRYyml44PAVsCcR9uEoDpCZYpI1fHI1R+F8jd1C9rqprbSwwOG4xlg4SmvTHYs6e\n"
+
"gBItQ/1p9XY+Sf4Wv1qOuOFL1qvV/5VyR2zdlOQCmKCeMgxt6a/tHLBDiAA67D44\n"
+
"/vfdoNJl0CU2It0PO60jdCPFNWIRcxL+OSDqAoePeUC7xQ+JsTEIxuUE8+d6w6fc\n"
+
"BV2mYb1flh22t46GLjh4gyo7xw3aL6L0L0jzlTT6IcEw6NIbaPbIKj/npQnHobYj\n"
+
"XMuKLxbh7g==\n"
+
"-----END CERTIFICATE-----"
);
// Subject: CN=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME,
// O=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME,
// L=S?o Paulo,
// ST=S?o Paulo,
// C=BR
// Issuer: CN=DigiCert Assured ID Code Signing CA-1,
// OU=www.digicert.com,
// O=DigiCert Inc,
// C=US
// Serial: 0a:38:9b:95:ee:73:6d:d1:3b:c0:ed:74:3f:d7:4d:2f
add
(
"buster-assistencia-tecnica-electronica-ltda-3FD74D2F"
,
"-----BEGIN CERTIFICATE-----\n"
+
"MIIG4DCCBcigAwIBAgIQCjible5zbdE7wO10P9dNLzANBgkqhkiG9w0BAQUFADBv\n"
+
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
+
"d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv\n"
+
"ZGUgU2lnbmluZyBDQS0xMB4XDTEyMTEwOTAwMDAwMFoXDTEzMTExNDEyMDAwMFow\n"
+
"gasxCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMRMwEQYDVQQHDApT\n"
+
"w6NvIFBhdWxvMTgwNgYDVQQKEy9CVVNURVIgQVNTSVNURU5DSUEgVEVDTklDQSBF\n"
+
"TEVUUk9OSUNBIExUREEgLSBNRTE4MDYGA1UEAxMvQlVTVEVSIEFTU0lTVEVOQ0lB\n"
+
"IFRFQ05JQ0EgRUxFVFJPTklDQSBMVERBIC0gTUUwggEiMA0GCSqGSIb3DQEBAQUA\n"
+
"A4IBDwAwggEKAoIBAQDAqNeEs5/B2CTXGjTOkUIdu6jV6qulOZwdw4sefHWYj1UR\n"
+
"4z6zPk9kjpUgbnb402RFq88QtfInwddZ/wXn9OxMtDd/3TnC7HrhNS7ga79ZFL2V\n"
+
"JnmzKHum2Yvh0q82QEJ9tHBR2X9VdKpUIH08Zs3k6cWWM1H0YX0cxA/HohhesQJW\n"
+
"kwJ3urOIJiH/HeByDk8a1NS8safcCxk5vxvW4WvCg43iT09LeHY5Aa8abKw8lqVb\n"
+
"0tD5ZSIjdmdj3TT1U37iAHLLRM2DXbxfdbhouUX1c5U1ZHAMA67HwjKiseOiDaHj\n"
+
"NUGbC37C+cgbc9VVM/cURD8WvS0Kj6fQv7F2QtJDAgMBAAGjggM5MIIDNTAfBgNV\n"
+
"HSMEGDAWgBR7aM4pqsAXvkl64eU/1qf3RY81MjAdBgNVHQ4EFgQU88EXKAyDsh30\n"
+
"o9+Gu9a4xUy+FSMwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMD\n"
+
"MHMGA1UdHwRsMGowM6AxoC+GLWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9hc3N1\n"
+
"cmVkLWNzLTIwMTFhLmNybDAzoDGgL4YtaHR0cDovL2NybDQuZGlnaWNlcnQuY29t\n"
+
"L2Fzc3VyZWQtY3MtMjAxMWEuY3JsMIIBxAYDVR0gBIIBuzCCAbcwggGzBglghkgB\n"
+
"hv1sAwEwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9z\n"
+
"c2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUHAgIwggFWHoIBUgBBAG4A\n"
+
"eQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQByAHQAaQBmAGkAYwBhAHQA\n"
+
"ZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBjAGUAcAB0AGEAbgBjAGUA\n"
+
"IABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAgAEMAUAAvAEMAUABTACAA\n"
+
"YQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQAGEAcgB0AHkAIABBAGcA\n"
+
"cgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBtAGkAdAAgAGwAaQBhAGIA\n"
+
"aQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBjAG8AcgBwAG8AcgBhAHQA\n"
+
"ZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBlAHIAZQBuAGMAZQAuMIGC\n"
+
"BggrBgEFBQcBAQR2MHQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0\n"
+
"LmNvbTBMBggrBgEFBQcwAoZAaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Rp\n"
+
"Z2lDZXJ0QXNzdXJlZElEQ29kZVNpZ25pbmdDQS0xLmNydDAMBgNVHRMBAf8EAjAA\n"
+
"MA0GCSqGSIb3DQEBBQUAA4IBAQAei1QmiXepje8OIfo/WonD4MIXgpPr2dfRaquQ\n"
+
"A8q63OpTRSveyqdQDCSPpDRF/nvO1Y30yksZvIH1tNBsW5LBdxAKN3lFdBlqBwtE\n"
+
"Q3jHc0KVVYRJ0FBaGE/PJHmRajscdAhYIcMPhTga0u0tDK+wOHEq3993dfl6yHjA\n"
+
"XHU2iW5pnk75ZoE39zALD5eKXT8ZXrET5c3XUFJKWA+XuGmdmyzqo0Au49PanBv9\n"
+
"UlZnabYfqoMArqMS0tGSX4cGgi9/2E+pHG9BX4sFW+ZDumroOA2pxyMWEKjxePEL\n"
+
"zCOfhbsRWdMLYepauaNZOIMZXmFwcrIl0TGMkTAtATz+XmZc\n"
+
"-----END CERTIFICATE-----"
);
}
}
}
}
src/share/lib/security/java.security-linux
浏览文件 @
98c5c8c7
...
@@ -151,8 +151,8 @@ package.access=sun.,\
...
@@ -151,8 +151,8 @@ package.access=sun.,\
com.sun.xml.internal.ws.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.,\
com.sun.imageio.,\
com.sun.istack.internal.,\
com.sun.istack.internal.,\
com.sun.jmx.
defaults.
,\
com.sun.jmx.,\
com.sun.
jmx.remote.util
.,\
com.sun.
proxy
.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.glassfish.external.,\
com.sun.org.glassfish.external.,\
...
@@ -175,8 +175,8 @@ package.definition=sun.,\
...
@@ -175,8 +175,8 @@ package.definition=sun.,\
com.sun.xml.internal.ws.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.,\
com.sun.imageio.,\
com.sun.istack.internal.,\
com.sun.istack.internal.,\
com.sun.jmx.
defaults.
,\
com.sun.jmx.,\
com.sun.
jmx.remote.util
.,\
com.sun.
proxy
.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.glassfish.external.,\
com.sun.org.glassfish.external.,\
...
...
src/share/lib/security/java.security-macosx
浏览文件 @
98c5c8c7
...
@@ -152,8 +152,8 @@ package.access=sun.,\
...
@@ -152,8 +152,8 @@ package.access=sun.,\
com.sun.xml.internal.ws.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.,\
com.sun.imageio.,\
com.sun.istack.internal.,\
com.sun.istack.internal.,\
com.sun.jmx.
defaults.
,\
com.sun.jmx.,\
com.sun.
jmx.remote.util
.,\
com.sun.
proxy
.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.glassfish.external.,\
com.sun.org.glassfish.external.,\
...
@@ -177,8 +177,8 @@ package.definition=sun.,\
...
@@ -177,8 +177,8 @@ package.definition=sun.,\
com.sun.xml.internal.ws.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.,\
com.sun.imageio.,\
com.sun.istack.internal.,\
com.sun.istack.internal.,\
com.sun.jmx.
defaults.
,\
com.sun.jmx.,\
com.sun.
jmx.remote.util
.,\
com.sun.
proxy
.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.glassfish.external.,\
com.sun.org.glassfish.external.,\
...
...
src/share/lib/security/java.security-solaris
浏览文件 @
98c5c8c7
...
@@ -153,8 +153,8 @@ package.access=sun.,\
...
@@ -153,8 +153,8 @@ package.access=sun.,\
com.sun.xml.internal.ws.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.,\
com.sun.imageio.,\
com.sun.istack.internal.,\
com.sun.istack.internal.,\
com.sun.jmx.
defaults.
,\
com.sun.jmx.,\
com.sun.
jmx.remote.util
.,\
com.sun.
proxy
.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.glassfish.external.,\
com.sun.org.glassfish.external.,\
...
@@ -177,8 +177,8 @@ package.definition=sun.,\
...
@@ -177,8 +177,8 @@ package.definition=sun.,\
com.sun.xml.internal.ws.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.,\
com.sun.imageio.,\
com.sun.istack.internal.,\
com.sun.istack.internal.,\
com.sun.jmx.
defaults.
,\
com.sun.jmx.,\
com.sun.
jmx.remote.util
.,\
com.sun.
proxy
.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.glassfish.external.,\
com.sun.org.glassfish.external.,\
...
...
src/share/lib/security/java.security-windows
浏览文件 @
98c5c8c7
...
@@ -152,8 +152,8 @@ package.access=sun.,\
...
@@ -152,8 +152,8 @@ package.access=sun.,\
com.sun.xml.internal.ws.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.,\
com.sun.imageio.,\
com.sun.istack.internal.,\
com.sun.istack.internal.,\
com.sun.jmx.
defaults.
,\
com.sun.jmx.,\
com.sun.
jmx.remote.util
.,\
com.sun.
proxy
.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.glassfish.external.,\
com.sun.org.glassfish.external.,\
...
@@ -176,8 +176,8 @@ package.definition=sun.,\
...
@@ -176,8 +176,8 @@ package.definition=sun.,\
com.sun.xml.internal.ws.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.,\
com.sun.imageio.,\
com.sun.istack.internal.,\
com.sun.istack.internal.,\
com.sun.jmx.
defaults.
,\
com.sun.jmx.,\
com.sun.
jmx.remote.util
.,\
com.sun.
proxy
.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xerces.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.apache.xalan.internal.utils.,\
com.sun.org.glassfish.external.,\
com.sun.org.glassfish.external.,\
...
...
test/javax/management/remote/mandatory/subjectDelegation/SubjectDelegation2Test.java
浏览文件 @
98c5c8c7
...
@@ -119,9 +119,6 @@ public class SubjectDelegation2Test {
...
@@ -119,9 +119,6 @@ public class SubjectDelegation2Test {
System
.
out
.
println
(
"Create SimpleStandard MBean"
);
System
.
out
.
println
(
"Create SimpleStandard MBean"
);
SimpleStandard
s
=
new
SimpleStandard
(
"monitorRole"
);
SimpleStandard
s
=
new
SimpleStandard
(
"monitorRole"
);
mbs
.
registerMBean
(
s
,
new
ObjectName
(
"MBeans:type=SimpleStandard"
));
mbs
.
registerMBean
(
s
,
new
ObjectName
(
"MBeans:type=SimpleStandard"
));
// Set Security Manager
//
System
.
setSecurityManager
(
new
SecurityManager
());
// Create Properties containing the username/password entries
// Create Properties containing the username/password entries
//
//
Properties
props
=
new
Properties
();
Properties
props
=
new
Properties
();
...
@@ -132,6 +129,9 @@ public class SubjectDelegation2Test {
...
@@ -132,6 +129,9 @@ public class SubjectDelegation2Test {
HashMap
env
=
new
HashMap
();
HashMap
env
=
new
HashMap
();
env
.
put
(
"jmx.remote.authenticator"
,
env
.
put
(
"jmx.remote.authenticator"
,
new
JMXPluggableAuthenticator
(
props
));
new
JMXPluggableAuthenticator
(
props
));
// Set Security Manager
//
System
.
setSecurityManager
(
new
SecurityManager
());
// Create an RMI connector server
// Create an RMI connector server
//
//
System
.
out
.
println
(
"Create an RMI connector server"
);
System
.
out
.
println
(
"Create an RMI connector server"
);
...
...
test/javax/management/remote/mandatory/subjectDelegation/SubjectDelegation3Test.java
浏览文件 @
98c5c8c7
...
@@ -120,9 +120,6 @@ public class SubjectDelegation3Test {
...
@@ -120,9 +120,6 @@ public class SubjectDelegation3Test {
System
.
out
.
println
(
"Create SimpleStandard MBean"
);
System
.
out
.
println
(
"Create SimpleStandard MBean"
);
SimpleStandard
s
=
new
SimpleStandard
(
"delegate"
);
SimpleStandard
s
=
new
SimpleStandard
(
"delegate"
);
mbs
.
registerMBean
(
s
,
new
ObjectName
(
"MBeans:type=SimpleStandard"
));
mbs
.
registerMBean
(
s
,
new
ObjectName
(
"MBeans:type=SimpleStandard"
));
// Set Security Manager
//
System
.
setSecurityManager
(
new
SecurityManager
());
// Create Properties containing the username/password entries
// Create Properties containing the username/password entries
//
//
Properties
props
=
new
Properties
();
Properties
props
=
new
Properties
();
...
@@ -133,6 +130,9 @@ public class SubjectDelegation3Test {
...
@@ -133,6 +130,9 @@ public class SubjectDelegation3Test {
HashMap
env
=
new
HashMap
();
HashMap
env
=
new
HashMap
();
env
.
put
(
"jmx.remote.authenticator"
,
env
.
put
(
"jmx.remote.authenticator"
,
new
JMXPluggableAuthenticator
(
props
));
new
JMXPluggableAuthenticator
(
props
));
// Set Security Manager
//
System
.
setSecurityManager
(
new
SecurityManager
());
// Create an RMI connector server
// Create an RMI connector server
//
//
System
.
out
.
println
(
"Create an RMI connector server"
);
System
.
out
.
println
(
"Create an RMI connector server"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录