Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
7d45c667
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看板
提交
7d45c667
编写于
11月 25, 2013
作者:
W
weijun
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8026067: Enhance signed jar verification
Reviewed-by: ddehaven, ahgross, mullan
上级
593603f9
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
50 addition
and
36 deletion
+50
-36
src/share/classes/java/util/jar/JarVerifier.java
src/share/classes/java/util/jar/JarVerifier.java
+3
-17
src/share/classes/sun/security/tools/jarsigner/Main.java
src/share/classes/sun/security/tools/jarsigner/Main.java
+1
-19
src/share/classes/sun/security/util/SignatureFileVerifier.java
...hare/classes/sun/security/util/SignatureFileVerifier.java
+46
-0
未找到文件。
src/share/classes/java/util/jar/JarVerifier.java
浏览文件 @
7d45c667
...
...
@@ -687,6 +687,8 @@ class JarVerifier {
}
else
{
matchUnsigned
=
true
;
}
}
else
{
matchUnsigned
=
true
;
}
}
...
...
@@ -789,23 +791,7 @@ class JarVerifier {
// true if file is part of the signature mechanism itself
static
boolean
isSigningRelated
(
String
name
)
{
name
=
name
.
toUpperCase
(
Locale
.
ENGLISH
);
if
(!
name
.
startsWith
(
"META-INF/"
))
{
return
false
;
}
name
=
name
.
substring
(
9
);
if
(
name
.
indexOf
(
'/'
)
!=
-
1
)
{
return
false
;
}
if
(
name
.
endsWith
(
".DSA"
)
||
name
.
endsWith
(
".RSA"
)
||
name
.
endsWith
(
".SF"
)
||
name
.
endsWith
(
".EC"
)
||
name
.
startsWith
(
"SIG-"
)
||
name
.
equals
(
"MANIFEST.MF"
))
{
return
true
;
}
return
false
;
return
SignatureFileVerifier
.
isSigningRelated
(
name
);
}
private
Enumeration
<
String
>
unsignedEntryNames
(
JarFile
jar
)
{
...
...
src/share/classes/sun/security/tools/jarsigner/Main.java
浏览文件 @
7d45c667
...
...
@@ -90,9 +90,6 @@ public class Main {
private
static
final
String
META_INF
=
"META-INF/"
;
// prefix for new signature-related files in META-INF directory
private
static
final
String
SIG_PREFIX
=
META_INF
+
"SIG-"
;
private
static
final
Class
<?>[]
PARAM_STRING
=
{
String
.
class
};
private
static
final
String
NONE
=
"NONE"
;
...
...
@@ -1522,22 +1519,7 @@ public class Main {
* . META-INF/*.EC
*/
private
boolean
signatureRelated
(
String
name
)
{
String
ucName
=
name
.
toUpperCase
(
Locale
.
ENGLISH
);
if
(
ucName
.
equals
(
JarFile
.
MANIFEST_NAME
)
||
ucName
.
equals
(
META_INF
)
||
(
ucName
.
startsWith
(
SIG_PREFIX
)
&&
ucName
.
indexOf
(
"/"
)
==
ucName
.
lastIndexOf
(
"/"
)))
{
return
true
;
}
if
(
ucName
.
startsWith
(
META_INF
)
&&
SignatureFileVerifier
.
isBlockOrSF
(
ucName
))
{
// .SF/.DSA/.RSA/.EC files in META-INF subdirs
// are not considered signature-related
return
(
ucName
.
indexOf
(
"/"
)
==
ucName
.
lastIndexOf
(
"/"
));
}
return
false
;
return
SignatureFileVerifier
.
isSigningRelated
(
name
);
}
Map
<
CodeSigner
,
String
>
cacheForSignerInfo
=
new
IdentityHashMap
<>();
...
...
src/share/classes/sun/security/util/SignatureFileVerifier.java
浏览文件 @
7d45c667
...
...
@@ -152,6 +152,52 @@ public class SignatureFileVerifier {
return
false
;
}
/**
* Yet another utility method used by JarVerifier and JarSigner
* to determine what files are signature related, which includes
* the MANIFEST, SF files, known signature block files, and other
* unknown signature related files (those starting with SIG- with
* an optional [A-Z0-9]{1,3} extension right inside META-INF).
*
* @param s file name
* @return true if the input file name is signature related
*/
public
static
boolean
isSigningRelated
(
String
name
)
{
name
=
name
.
toUpperCase
(
Locale
.
ENGLISH
);
if
(!
name
.
startsWith
(
"META-INF/"
))
{
return
false
;
}
name
=
name
.
substring
(
9
);
if
(
name
.
indexOf
(
'/'
)
!=
-
1
)
{
return
false
;
}
if
(
isBlockOrSF
(
name
)
||
name
.
equals
(
"MANIFEST.MF"
))
{
return
true
;
}
else
if
(
name
.
startsWith
(
"SIG-"
))
{
// check filename extension
// see http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Digital_Signatures
// for what filename extensions are legal
int
extIndex
=
name
.
lastIndexOf
(
'.'
);
if
(
extIndex
!=
-
1
)
{
String
ext
=
name
.
substring
(
extIndex
+
1
);
// validate length first
if
(
ext
.
length
()
>
3
||
ext
.
length
()
<
1
)
{
return
false
;
}
// then check chars, must be in [a-zA-Z0-9] per the jar spec
for
(
int
index
=
0
;
index
<
ext
.
length
();
index
++)
{
char
cc
=
ext
.
charAt
(
index
);
// chars are promoted to uppercase so skip lowercase checks
if
((
cc
<
'A'
||
cc
>
'Z'
)
&&
(
cc
<
'0'
||
cc
>
'9'
))
{
return
false
;
}
}
}
return
true
;
// no extension is OK
}
return
false
;
}
/** get digest from cache */
private
MessageDigest
getDigest
(
String
algorithm
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录