Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/sun/security/tools/jarsigner/concise_jarsigner.sh
38854 views
#1# Copyright (c) 2009, 2020, Oracle and/or its affiliates. All rights reserved.2# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3#4# This code is free software; you can redistribute it and/or modify it5# under the terms of the GNU General Public License version 2 only, as6# published by the Free Software Foundation.7#8# This code is distributed in the hope that it will be useful, but WITHOUT9# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11# version 2 for more details (a copy is included in the LICENSE file that12# accompanied this code).13#14# You should have received a copy of the GNU General Public License version15# 2 along with this work; if not, write to the Free Software Foundation,16# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17#18# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19# or visit www.oracle.com if you need additional information or have any20# questions.21#2223# @test24# @bug 6802846 8172529 822775825# @summary jarsigner needs enhanced cert validation(options)26#27# @run shell/timeout=240 concise_jarsigner.sh28#2930if [ "${TESTJAVA}" = "" ] ; then31JAVAC_CMD=`which javac`32TESTJAVA=`dirname $JAVAC_CMD`/..33fi3435# set platform-dependent variables36OS=`uname -s`37case "$OS" in38Windows_* )39FS="\\"40;;41* )42FS="/"43;;44esac4546# Choose 2048-bit RSA to make sure it runs fine and fast on all platforms. In47# fact, every keyalg/keysize combination is OK for this test.4849TESTTOOLVMOPTS="$TESTTOOLVMOPTS -J-Duser.language=en -J-Duser.country=US"5051KS=js.ks52KT="$TESTJAVA${FS}bin${FS}keytool ${TESTTOOLVMOPTS} -storepass changeit -keypass changeit -keystore $KS -keyalg rsa -keysize 2048"53JAR="$TESTJAVA${FS}bin${FS}jar ${TESTTOOLVMOPTS}"54JARSIGNER="$TESTJAVA${FS}bin${FS}jarsigner ${TESTTOOLVMOPTS} -debug"55JAVAC="$TESTJAVA${FS}bin${FS}javac ${TESTTOOLVMOPTS} ${TESTJAVACOPTS}"5657rm $KS5859echo class A1 {} > A1.java60echo class A2 {} > A2.java61echo class A3 {} > A3.java62echo class A4 {} > A4.java63echo class A5 {} > A5.java64echo class A6 {} > A6.java6566$JAVAC A1.java A2.java A3.java A4.java A5.java A6.java67YEAR=`date +%Y`6869# ==========================================================70# First part: output format71# ==========================================================7273$KT -genkeypair -alias a1 -dname CN=a1 -validity 36674$KT -genkeypair -alias a2 -dname CN=a2 -validity 3667576# a.jar includes 8 unsigned, 2 signed by a1 and a2, 2 signed by a377$JAR cvf a.jar A1.class A2.class78$JARSIGNER -keystore $KS -storepass changeit a.jar a179$JAR uvf a.jar A3.class A4.class80$JARSIGNER -keystore $KS -storepass changeit a.jar a281$JAR uvf a.jar A5.class A6.class8283# Verify OK84$JARSIGNER -verify a.jar85[ $? = 0 ] || exit $LINENO8687# 4(chainNotValidated)+16(hasUnsignedEntry)88$JARSIGNER -verify a.jar -strict89[ $? = 20 ] || exit $LINENO9091# 16(hasUnsignedEntry)92$JARSIGNER -verify a.jar -strict -keystore $KS -storepass changeit93[ $? = 16 ] || exit $LINENO9495# 16(hasUnsignedEntry)+32(notSignedByAlias)96$JARSIGNER -verify a.jar a1 -strict -keystore $KS -storepass changeit97[ $? = 48 ] || exit $LINENO9899# 16(hasUnsignedEntry)100$JARSIGNER -verify a.jar a1 a2 -strict -keystore $KS -storepass changeit101[ $? = 16 ] || exit $LINENO102103# 12 entries all together104LINES=`$JARSIGNER -verify a.jar -verbose | grep $YEAR | wc -l`105[ $LINES = 12 ] || exit $LINENO106107# 12 entries all listed108LINES=`$JARSIGNER -verify a.jar -verbose:grouped | grep $YEAR | wc -l`109[ $LINES = 12 ] || exit $LINENO110111# 4 groups: MANIFST, unrelated, signed, unsigned112LINES=`$JARSIGNER -verify a.jar -verbose:summary | grep $YEAR | wc -l`113[ $LINES = 4 ] || exit $LINENO114115# still 4 groups, but MANIFEST group has no other file116LINES=`$JARSIGNER -verify a.jar -verbose:summary | grep "more)" | wc -l`117[ $LINES = 3 ] || exit $LINENO118119# 5 groups: MANIFEST, unrelated, signed by a1/a2, signed by a2, unsigned120LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep $YEAR | wc -l`121[ $LINES = 5 ] || exit $LINENO122123# 2 for MANIFEST, 2*2 for A1/A2, 2 for A3/A4124LINES=`$JARSIGNER -verify a.jar -verbose -certs | grep "\[certificate" | wc -l`125[ $LINES = 8 ] || exit $LINENO126127# a1,a2 for MANIFEST, a1,a2 for A1/A2, a2 for A3/A4128LINES=`$JARSIGNER -verify a.jar -verbose:grouped -certs | grep "\[certificate" | wc -l`129[ $LINES = 5 ] || exit $LINENO130131# a1,a2 for MANIFEST, a1,a2 for A1/A2, a2 for A3/A4132LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep "\[certificate" | wc -l`133[ $LINES = 5 ] || exit $LINENO134135# still 5 groups, but MANIFEST group has no other file136LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep "more)" | wc -l`137[ $LINES = 4 ] || exit $LINENO138139# ==========================================================140# Second part: exit code 2, 4, 8.141# 16 and 32 already covered in the first part142# ==========================================================143144$KT -genkeypair -alias ca -dname CN=ca -ext bc -validity 365145$KT -genkeypair -alias expired -dname CN=expired146$KT -certreq -alias expired | $KT -gencert -alias ca -startdate -10m | $KT -import -alias expired147$KT -genkeypair -alias notyetvalid -dname CN=notyetvalid148$KT -certreq -alias notyetvalid | $KT -gencert -alias ca -startdate +1m | $KT -import -alias notyetvalid149$KT -genkeypair -alias badku -dname CN=badku150$KT -certreq -alias badku | $KT -gencert -alias ca -ext KU=cRLSign -validity 365 | $KT -import -alias badku151$KT -genkeypair -alias badeku -dname CN=badeku152$KT -certreq -alias badeku | $KT -gencert -alias ca -ext EKU=sa -validity 365 | $KT -import -alias badeku153$KT -genkeypair -alias goodku -dname CN=goodku154$KT -certreq -alias goodku | $KT -gencert -alias ca -ext KU=dig -validity 365 | $KT -import -alias goodku155$KT -genkeypair -alias goodeku -dname CN=goodeku156$KT -certreq -alias goodeku | $KT -gencert -alias ca -ext EKU=codesign -validity 365 | $KT -import -alias goodeku157158$JARSIGNER -strict -keystore $KS -storepass changeit a.jar expired159[ $? = 4 ] || exit $LINENO160161$JARSIGNER -strict -keystore $KS -storepass changeit a.jar notyetvalid162[ $? = 4 ] || exit $LINENO163164$JARSIGNER -strict -keystore $KS -storepass changeit a.jar badku165[ $? = 8 ] || exit $LINENO166167$JARSIGNER -strict -keystore $KS -storepass changeit a.jar badeku168[ $? = 8 ] || exit $LINENO169170$JARSIGNER -strict -keystore $KS -storepass changeit a.jar goodku171[ $? = 0 ] || exit $LINENO172173$JARSIGNER -strict -keystore $KS -storepass changeit a.jar goodeku174[ $? = 0 ] || exit $LINENO175176# badchain signed by ca1, but ca1 is removed later177$KT -genkeypair -alias badchain -dname CN=badchain -validity 365178$KT -genkeypair -alias ca1 -dname CN=ca1 -ext bc -validity 365179$KT -certreq -alias badchain | $KT -gencert -alias ca1 -validity 365 | \180$KT -importcert -alias badchain181# save ca1.cert for easy replay182$KT -exportcert -file ca1.cert -alias ca1183$KT -delete -alias ca1184185$JARSIGNER -strict -keystore $KS -storepass changeit a.jar badchain186[ $? = 4 ] || exit $LINENO187188$JARSIGNER -verify a.jar189[ $? = 0 ] || exit $LINENO190191# ==========================================================192# Third part: -certchain test193# ==========================================================194195# altchain signed by ca2196$KT -genkeypair -alias altchain -dname CN=altchain -validity 365197$KT -genkeypair -alias ca2 -dname CN=ca2 -ext bc -validity 365198$KT -certreq -alias altchain | $KT -gencert -alias ca2 -validity 365 -rfc > certchain199$KT -exportcert -alias ca2 -rfc >> certchain200201# Self-signed cert does not work202$JARSIGNER -strict -keystore $KS -storepass changeit a.jar altchain203[ $? = 4 ] || exit $LINENO204205# -certchain works206$JARSIGNER -strict -keystore $KS -storepass changeit -certchain certchain a.jar altchain207[ $? = 0 ] || exit $LINENO208209# if ca2 is removed and cert is imported, -certchain won't work because this certificate210# entry is not trusted211# save ca2.cert for easy replay212$KT -exportcert -file ca2.cert -alias ca2213$KT -delete -alias ca2214$KT -importcert -file certchain -alias altchain -noprompt215$JARSIGNER -strict -keystore $KS -storepass changeit -certchain certchain a.jar altchain216[ $? = 4 ] || exit $LINENO217218$JARSIGNER -verify a.jar219[ $? = 0 ] || exit $LINENO220221# ==========================================================222# 8172529223# ==========================================================224225$KT -genkeypair -alias ee -dname CN=ee226$KT -genkeypair -alias caone -dname CN=caone -ext bc:c227$KT -genkeypair -alias catwo -dname CN=catwo -ext bc:c228229$KT -certreq -alias ee | $KT -gencert -alias catwo -rfc > ee.cert230$KT -certreq -alias catwo | $KT -gencert -alias caone -sigalg MD5withRSA -rfc > catwo.cert231232# This certchain contains a cross-signed weak catwo.cert233cat ee.cert catwo.cert | $KT -importcert -alias ee234235$JAR cvf a.jar A1.class236$JARSIGNER -strict -keystore $KS -storepass changeit a.jar ee237[ $? = 0 ] || exit $LINENO238$JARSIGNER -strict -keystore $KS -storepass changeit -verify a.jar239[ $? = 0 ] || exit $LINENO240241echo OK242exit 0243244245