JavaTM Certification Path API $B%W%m%0%i%^!<%:%,%$%I(J

$BCx
$B:G=*99?7F|(J: 2002 $BG/(J 2 $B7n(J 8 $BF|(J

$B35MW(J

J2SE 1.4 Beta $B$+$i$NJQ99E@(J
$B $B$3$N%I%-%e%a%s%H$NBP>]FI$B4XO"%I%-%e%a%s%H(J
$B$O$8$a$K(J

$B%3%"%/%i%9$H%$%s%?%U%'!<%9(J

$B4pK\%/%i%9(J

Certification Path $B8!>Z%/%i%9(J

Certification Path $B9=C[%/%i%9(J

$B>ZL@=q(J/CRL $B%9%H%l!<%8%/%i%9(J

PKIX $B%/%i%9(J

$B%5!<%S%9%W%m%P%$%@$N

$BIUO?(J A: $BI8=`L>(J

$BIUO?(J B: $B!V(JSUN$B!W%W%m%P%$%@(J


J2SE 1.4 Beta $B$+$i$NJQ99E@(J

$B35MW(J

JavaTM Certification Path API $B$O!">ZL@=q%Q%9(J ($B!V>ZL@O":?!W$H$b8F$P$l$k(J) $B$r07$&$?$a$N%/%i%9$H%$%s%?%U%'!<%9$G9=@.$5$l$^$9!#(J $B>ZL@=q%Q%9$O!"=g=xIU$1$5$l$?>ZL@=q%j%9%H$G$9!#(J $B>ZL@=q%Q%9$O!"FCDj$N8!>Z5,B'$rK~$?$9>l9g$K!"8x3+80$+$i

$B$3$N(J API $B$O!">ZL@=q%Q%9$N:n@.!"9=C[!"8!>ZMQ$N%$%s%?%U%'!<%9$*$h$SCj>]%/%i%9$rDj5A$7$^$9!#$B!V(JJava $B0E9f2=%"!<%-%F%/%A%c%I%-%e%a%s%H!W(J$B$G@bL@$5$l$F$$$k(J$B0E9f2=%5!<%S%9%W%m%P%$%@%"!<%-%F%/%A%c(J$B$K4p$E$$$F$$$^$9!#(J

$B$^$?!"(JAPI $B$K$O!"(JPKIX $BI8=`$K=>$C$F(J X 509 $B>ZL@=q%Q%9$r9=C[$*$h$S8!>Z$9$k$?$a$N%"%k%4%j%:%`FCDj7?$N%/%i%9$,4^$^$l$^$9!#(J PKIX $BI8=`$O!"(JIETF PKIX $B%o!<%-%s%0%0%k!<%W(J$B$K$h$C$F3+H/$5$l$^$9!#(J

$B$3$N(J API $B$O!"(JJavaTM 2 SDK, Standard Edition (J2SDK), v 1.4 $B$K4^$^$l$F$*$j!"8=:_(J Java Community ProcessSM $B%W%m%0%i%`$K$h$j?35DCf$G$9(J (JavaTM Specification Request (JSR) 000055)$B!#(J JSR $B$*$h$S:G?7$N%9%F!<%?%9$K$D$$$F$N>pJs$O!"(JJSR 055 $B%[!<%`%Z!<%8(J$B$r;2>H$7$F$/$@$5$$!#(J

$B Certification Path API $B$N3+H/$K7H$o$C$?J}!9!"$*$h$SM-MQ$J%3%a%s%H$d5;=QE*$J%"%I%P%$%9$r$/$@$5$C$?J}!9$K46$B%(%-%9%Q!<%H%0%k!<%W$O!"(JJava Community Process $B$r;H$C$F(J API $B$r2~NI$7!"D4@0$r;\$9:n6H$N0lMc$rC4$$$^$7$?!#$3$N%0%k!<%W$N%a%s%P$O!"0J2<$NJ}!9$G$9!#(J
  • Peter Hesse$B!"(JCygnaCom Solutions$B!"(JAn Entrust Technologies
  • Sean Mullan$B!"(JSun Microsystems ($B;EMM%j!<%I(J)
  • Anthony Nadalin$B!"(JIBM
  • Bob Naugle$B!"(JBluestone Software
  • Hemma Prafullchandra$B!"(JVerisign
  • Ming Yung$B!"(JDSTC
Sun Microsystems $B$N(J Maxine Erlund$B!"(JSteve Hanna$B!"(JPhil Rosenzweig $B$*$h$S(J Bob Sproull $B$N3F;a$K$O!";XF3$HF6;!$rDs6!$7$F$$$?$@$-$^$7$?!#(J Sun Microsystems $B$N(J Java Security, Networking and Naming Group $B$N%a%s%P(J ($BFC$K(JSharon Liu$B!"(JJeff Nisewanger$B!"(JGary Ellison$B!"$*$h$S(J Andreas Sterbenz $B$N3F;a(J) $B$K$O!"5.=E$J%3%a%s%H$d%5%]!<%H$r$$$?$@$-$^$7$?!#(J $B$=$NB>!"5.=E$J%3%a%s%H$d%"%I%P%$%9$rB?$/$N5;=Q%a%s%P(J ($BFC$K(J Mary Dageforde$B!"(JEdward Dobner$B!"(JTom Gindin$B!"(JJan Luehe$B!"(JDavid Kuehr-McLaren$B!"(JParag Salvi$B!"(JAlexei Semidetnov$B!"$*$h$S(J Yanni Zhang $B$N3F;a(J) $B$+$i$$$?$@$-$^$7$?!#(J

$B$3$N%I%-%e%a%s%H$NBP>]FI $B$3$N%I%-%e%a%s%H$O!"r7o$N$$$:$l$+$K3:Ev$9$k!"7P83$"$k3+H/]$K$7$F$$$^$9!#(J
  1. $B>ZL@=q%Q%9$r9=C[$^$?$O8!>Z$9$k!"%;%-%e%j%F%#J]8n$5$l$?%"%W%j%1!<%7%g%s$r@_7W$9$k?M(J

  2. $B>ZL@=q%Q%9$r9=C[$^$?$O8!>Z$9$k$?$a$N%5!<%S%9%W%m%P%$%@

    $B4XO"%I%-%e%a%s%H(J

    $B$3$N%I%-%e%a%s%H$O!"FIhttp://java.sun.com/j2se/1.4/ja/docs/ja/guide/security/index.html $B$+$i%*%s%i%$%s$GF~
  3. X.509 $B>ZL@=q$H>ZL@=q$NC$7%j%9%H(J (CRL)

  4. Java $B0E9f2=%"!<%-%F%/%A%c(J

  5. Java $B0E9f2=%"!<%-%F%/%A%cMQ%W%m%P%$%@$N

    $B$O$8$a$K(J

    $B8x3+80%"%W%j%1!<%7%g%s$*$h$S%7%9%F%`$N%f!<%6$O!"ZL@=q$O!"$3$N?.Mj$r3NN)$9$k$N$K;HMQ$5$l$^$9!#(J $B8x3+80(J ($B$^$?$O%"%$%G%s%F%#%F%#(J) $B>ZL@=q(J $B$O!"8x3+80$N%"%$%G%s%F%#%F%#$X$N%P%$%s%G%#%s%0$G$9!#%"%$%G%s%F%#%F%#$O!"JL$N%(%s%F%#%F%#(J ($BB?$/$N>l9g(J$B>ZL@=qH/9T6I(J (CA) $B$H8F$P$l$k(J) $B$NHs8x3+80$G%G%8%?%k=pL>$5$l$^$9!#(J $B$3$N9`$N;D$j$NItJ,$G$O!"(JCA $B$H$$$&MQ8l$O!">ZL@=q$K=pL>$9$k%(%s%F%#%F%#$N0UL#$G;HMQ$5$l$^$9!#(J

    $B%f!<%6$O!"ZL@=q$K=pL>$7$?(J CA $B$N8x3+80$N?.Mj$G$-$k%3%T!<$r;}$C$F$$$J$$>l9g!"=pL>$7$F$$$k(J CA $B$rJ]>Z$9$kJL$N8x3+80>ZL@=q$,I,MW$G$9!#(J $B$3$NO@M}$O!">ZL@=q$NO":?(J ($B$^$?$O(J$B>ZL@=q%Q%9(J) $B$,(J$B?.Mj$G$-$k%"%s%+!<(J$B$^$?$O(J$B:G$b?.Mj$G$-$k(J CA $B$+$i8!=P$5$l$k$^$G!":F5"E*$K%?!<%2%C%H$N$B%(%s%I%(%s%F%#%F%#(J$B$H8F$P$l$k(J) $B$KE,MQ$5$l$^$9!#(J $BDL>o!"(J$B:G$b?.Mj$G$-$k(J CA $B$O!"%f!<%6$,D>@\?.Mj$9$k(J CA $B$K08$F$FH/9T$7$?>ZL@=q$K$h$C$F;XDj$5$l$^$9!#(J $B0lHL(J$B$K>ZL@=q%Q%9$O=g=xIU$1$5$l$?>ZL@=q$N%j%9%H$G!"DL>o$N>l9g!"%(%s%I%(%s%F%#%F%#$N8x3+80>ZL@=q$H(J 0 $B8D0J>e$NIU2CE*$J>ZL@=q$G9=@.$5$l$^$9!#(J $BDL>o!">ZL@=q%Q%9$K$O(J 1 $B$D0J>e$NId9f2=$,$"$j$^$9!#$3$l$K$h$j!">ZL@=q%Q%9$O!"0BA4$K%M%C%H%o!<%/$rDL$8$FEAAw$5$l$?$j!"JL$N%*%Z%l!<%F%#%s%0%7%9%F%`%"!<%-%F%/%A%c$XAw?.$5$l$?$j$7$^$9!#(J

    $B?^(J 1 $B$O!":G$b?.Mj$G$-$k(J CA $B$N8x3+80(J (CA 1) $B$+$i%?!<%2%C%H$NZL@=q%Q%9$r<($7$F$$$^$9!#(J $B>ZL@=q%Q%9$O!"(JCA 2 $B$H$$$&L>A0$NCf4V(J CA $B$r2p$7$F!"(JAlice $B$N8x3+80$H$N?.Mj$r3NN)$7$^$9!#(J




    $B?^(J 1: $B>ZL@=q%Q%9(J

    $B>ZL@=q%Q%9$O!"Z$9$kI,MW$,$"$j$^$9!#(J $B8!>Z$G$O!"=pL>$r8!>Z$7$?$j!"3F>ZL@=q$,C$5$l$F$$$J$$$3$H$r3NG'$7$?$j$9$k$J$I!">ZL@=q%Q%9$K4^$^$l$F$$$k>ZL@=q$KBP$9$k$5$^$6$^$J%A%'%C%/$r9T$$$^$9!#(J PKIX $BI8=`$O!"(JX.509 $B>ZL@=q$G9=@.$5$l$k>ZL@=q%Q%9$N8!>Z$K4X$9$k%"%k%4%j%:%`$rDj5A$7$^$9!#(J

    $B%f!<%6$O!":G$b?.Mj$G$-$k(J CA $B$+$iZL@=q%Q%9$r;}$C$F$$$J$$$3$H$,$"$j$^$9!#(J $B>ZL@=q%Q%9$r9=C[$^$?$O8!=P$9$k%5!<%S%9$NDs6!$O!"8x3+80$KBP1~$9$k%7%9%F%`$N=EMW$J5!G=$G$9!#(J RFC 2587 $B$O!"(JLDAP (Lightweight Directory Access Protocol) $B%9%-!<%^Dj5A$rDj5A$7$^$9!#(JLDAP $B%9%-!<%^Dj5A$K$h$j!"(JLDAP $B%G%#%l%/%H%j%5!<%S%9%W%m%H%3%k$r;H$C$?(J X.509 $B>ZL@=q%Q%9$N8!=P$,MF0W$K$J$j$^$9!#(J

    $B>ZL@=q%Q%9$N9=C[$*$h$S8!>Z$O!"(JSSL/TLS$B!"(JS/MIME$B!"(JIPSEC $B$J$I!"B?$/$NI8=`%;%-%e%j%F%#%W%m%H%3%k$N=EMW$J0lIt$G$9!#(J JavaTM Certification Path API $B$O!"$3$N5!G=$r%"%W%j%1!<%7%g%s$KE}9g$9$kI,MW$N$"$k3+H/ZL@=q%Q%9$N9=C[!"$^$?$O8!>Z%"%k%4%j%:%`MQ$K%5!<%S%9%W%m%P%$%@ZL@=q%Q%9$N:n@.!"9=C[!"$*$h$S8!>Z$N$?$a$KI8=`%"%k%4%j%:%`$K%"%/%;%9$9$kI,MW$N$"$k3+H/

$B%3%"%/%i%9$H%$%s%?%U%'!<%9(J

Java Certification Path API $B$N%3%"%/%i%9$O!"%"%k%4%j%:%`$*$h$SZL@=q%Q%9$N5!G=$r%5%]!<%H$9$k%$%s%?%U%'!<%9$*$h$S%/%i%9$G9=@.$5$l$F$$$^$9!#(J $B$^$?!"(JAPI $B$K$O!"(JPKIX $BI8=`$K=`5r$7$?!"%"%k%4%j%:%`$K0MB8$7$J$$%/%i%9$N%;%C%H$,4^$^$l$F$$$^$9!#(JPKIX $BI8=`$K$D$$$F$O!"(J$B!V(JPKIX $B%/%i%9!W(J$B%;%/%7%g%s$G@bL@$7$^$9!#(J API $B$O!">ZL@=q$r=hM}$9$k4{B8$N(J JavaTM 2 SDK, Standard Edition (J2SDK) java.security.cert $B%Q%C%1!<%8$K9=C[$5$l!"$=$N5!G=$r3HD%$7$^$9!#(J $B%3%"%/%i%9$O!"Z!"9=C[!"$*$h$S%9%H%l!<%8$H$$$&(J 4 $B$D$N%/%i%9%+%F%4%j$KJ,$1$k$3$H$,$G$-$^$9!#(J

$B

CertPath API $B$N%/%i%9$*$h$S%$%s%?%U%'!<%9$NBgH>$O!"%9%l%C%I$KBP$7$F0BA4$G$O$"$j$^$;$s!#(J $B$7$+$7!"$3$N%,%$%I$*$h$S(J API $B;EMM$G8@5Z$5$l$?Nc30$b$"$j$^$9!#(J $B%9%l%C%I$KBP$7$F0BA4$G$J$$C10l$N%*%V%8%'%/%H$KF1;~$K%"%/%;%9$9$kI,MW$N$"$kJ#?t$N%9%l%C%I$O!"8_$$$KF14|$7$FI,MW$J%m%C%/$r9T$&$b$N$H$7$^$9!#(J $BJ#?t$N%9%l%C%I$,$=$l$>$l8DJL$N%*%V%8%'%/%H$r=hM}$9$k>l9g!"$=$l$i$N%9%l%C%I$OF14|$9$kI,MW$O$"$j$^$;$s!#(J

$B4pK\$N>ZL@=q%Q%9%/%i%9(J

$B4pK\$N>ZL@=q%Q%9%/%i%9$O!">ZL@=q%Q%9$rId9f2=$*$h$SI=<($9$k4pK\E*$J5!G=$rDs6!$7$^$9!#(J Java Certification Path API $B$NCertPath $B$G$9!#$3$N%/%i%9$O!"$9$Y$F$N7?$N>ZL@=q%Q%9$G6&M-$5$l$kHFMQE*$JItJ,$r%+%W%;%k2=$7$^$9!#(J $B%"%W%j%1!<%7%g%s$O!"(JCertificateFactory $B%/%i%9$N%$%s%9%?%s%9$r;H$C$F(J CertPath $B%*%V%8%'%/%H$r:n@.$7$^$9!#(J

CertPath $B%/%i%9(J

CertPath $B%/%i%9$O!">ZL@=q%Q%9$NCj>]%/%i%9$G$9!#(J $B$9$Y$F$N>ZL@=q%Q%9%*%V%8%'%/%H$,6&M-$9$k5!G=$rDj5A$7$^$9!#(J $B$5$^$6$^$J>ZL@=q%Q%9$N7?$O!"$=$l$,0[$J$kFbMF$*$h$S=g=xIU$1%9%-!<%^$r;}$C$F$$$F$b!"(JCertPath $B%/%i%9$r%5%V%/%i%92=$9$k$3$H$K$h$C$FCertPath $B%*%V%8%'%/%H$O!"D>Ns2=2DG=!"ITJQ!"$+$D%9%l%C%I$KBP$7$F0BA4$G$9!#$5$i$K!"

$B$9$Y$F$N(J CertPath $B%*%V%8%'%/%H$O$^$?!"(JSerializable $B$G$9!#(J CertPath $B%*%V%8%'%/%H$O!"D>Ns2=Cf$K!"BeBX$N(J CertPathRep $B%*%V%8%'%/%H$K2rCertPath $B%*%V%8%'%/%H$rF1Ey$NI=8=$KD>Ns2=$G$-$^$9!#(J

CertPath $B%*%V%8%'%/%H$O!"(JCertificateFactory $B$r;H$C$F!"Id9f2=$5$l$?%P%$%HG[Ns$^$?$O(J Certificate $B$N%j%9%H$+$i@8@.$5$l$^$9!#(J $B0lJ}!"(JCertPathBuilder $B$O!":G$b?.Mj$G$-$k(J CA $B$+$iFCDj$NCertPath $B$rC5$9$?$a$K;HMQ$5$l$^$9!#(J CertPath $B%*%V%8%'%/%H$,:n@.$5$l$k$H!"$=$l$O(J CertPathValidator $B$N(J validate $B%a%=%C%I$KEO$5$l!"8!>Z$5$l$^$9!#(J $B$3$l$i$N35G0$N>\:Y$K$D$$$F$O!"B3$/%;%/%7%g%s$G@bL@$7$^$9!#(J

CertificateFactory $B%/%i%9(J

CertificateFactory $B%/%i%9$O!">ZL@=q%U%!%/%H%j$N5!G=$rDj5A$9$k(J$B%(%s%8%s%/%i%9(J$B$G$9!#(J $B$3$N%/%i%9$O!"(JJ2SDK, v 1.4 $B$h$jA0$N%j%j!<%9$G$O!"(JCertificate $B$*$h$S(J CRL $B%*%V%8%'%/%H$N@8@.$K;HMQ$5$l$F$$$^$7$?!#(J J2SDK, v1.4 $B$G$O!"%/%i%9$,3HD%$5$l!">ZL@=q%Q%9(J (CertPath) $B%*%V%8%'%/%H$N@8@.$K$b;HMQ$5$l$k$h$&$K$J$j$^$7$?!#(J CertificateFactory $B$r(J CertPathBuilder $B$H:.F1$7$J$$$G$/$@$5$$!#(J CertPathBuilder ($B8e=R(J) $B$O!">ZL@=q%Q%9$,B8:_$7$J$$$H$-$K!">ZL@=q%Q%9$N8!=P$^$?$OH/8+$K;HMQ$5$l$^$9!#(J $B$=$l$KBP$7$F(J CertificateFactory $B$O!">ZL@=q%Q%9$,$9$G$K8!=P$5$l$F$$$F!"Id9f2=$5$l$?%P%$%HG[Ns$^$?$O(J Certificate $B$NG[Ns$J$I!"0[$J$k7A<0$GB8:_$9$kFbMF$+$i8F$S=P$7B&$,(J CertPath $B%*%V%8%'%/%H$N%$%s%9%?%s%9$r@8@.$9$kI,MW$,$"$k$H$-$K;HMQ$5$l$^$9!#(J

CertificateFactory $B%*%V%8%'%/%H$N:n@.(J

CertificateFactory $B%*%V%8%'%/%H$N:n@.$K4X$9$k>\:Y$K$D$$$F$O!"!V(JJava $B0E9f2=%"!<%-%F%/%A%c!W$N(J$B!V(JCertificateFactory$B!W(J$B%;%/%7%g%s$r;2>H$7$F$/$@$5$$!#(J

CertPath $B%*%V%8%'%/%H$N@8@.(J

CertificateFactory $B$N%$%s%9%?%s%9$O!"(JCertificate $B%*%V%8%'%/%H$N(J$B%j%9%H(J$B!"$^$?$O(J CertPath $B$NId9f2=$5$l$?7A<0$r4^$`(J InputStream $B$+$i!"(J CertPath $B%*%V%8%'%/%H$r@8@.$7$^$9!#(J CertPath $B$HF1MM!"$=$l$>$l$N(J CertificateFactory $B$O!">ZL@=q%Q%9(J (PKCS#7 $B$J$I(J) $B$N%G%U%)%k%H$NId9f2=7A<0$r%5%]!<%H$7$^$9!#(J CertPath $B%*%V%8%'%/%H$r@8@.$7!"$=$N%*%V%8%'%/%H$rF~NO%9%H%j!<%`$+$i(J ($B%G%U%)%k%H$NId9f2=7A<0$G(J) $BFI$_9~$^$l$?%G!<%?$r;H$C$F=i4|2=$9$k$K$O!"(JgenerateCertPath $B%a%=%C%I$r;HMQ$7$^$9!#(J

    public final CertPath generateCertPath(InputStream inStream)

$BFCDj$NId9f2=7A<0$+$iFI$_9~$^$l$?%G!<%?$r;HMQ$9$k>l9g$O

    public final CertPath generateCertPath(InputStream inStream,
    					   String encoding)

$B%5%]!<%H$5$l$F$$$kId9f2=7A<0$rD4$Y$k$K$O!"(JgetCertPathEncodings $B%a%=%C%I$r;HMQ$7$^$9(J ($B%G%U%)%k%H$NId9f2=$,:G=i$KJV$5$l$k(J)$B!#(J

    public final Iterator getCertPathEncodings()

$B>ZL@=q%Q%9%*%V%8%'%/%H$r(J Certificate $B%*%V%8%'%/%H$N(J$B%j%9%H(J$B$+$i@8@.$9$k$K$O!"

    public final CertPath generateCertPath(List certificates)

CertificateFactory $B$O!"%U%!%/%H%j$HF1$87?$N(J Certificate $B$G9=@.$5$l$?(J CertPath $B%*%V%8%'%/%H$r>o$KJV$7$^$9!#(J $B$?$H$($P!"(JX.509 $B7?$N(J CertificateFactory $B$O!"(Jjava.security.cert.X509Certificate $B$N%$%s%9%?%s%9$G$"$k>ZL@=q$G9=@.$5$l$?(J CertPath $B%*%V%8%'%/%H$rJV$7$^$9!#(J

$BZL@=q1~Ez$+$i>ZL@=q%Q%9$r@8@.$9$kJ}K!$r<($7$F$$$^$9!#(J

    // open an input stream to the file
    FileInputStream fis = new FileInputStream(filename);
    // instantiate a CertificateFactory for X.509
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    // extract the certification path from
    // the PKCS7 SignedData structure
    CertPath cp = cf.generateCertPath(fis, "PKCS7");
    // print each certificate in the path
    List certs = cp.getCertificates();
    Iterator i = certs.iterator();
    while (i.hasNext()) {
        X509Certificate cert = (X509Certificate) i.next();
        System.out.println(cert);
    }
	
$BKeyStore $B$+$i>ZL@O":?$r%U%'%C%A$7$F!"(JCertificateFactory $B$r;H$C$F(J CertPath $B$KJQ49$9$kJL$N%3!<%INc$r<($7$^$9!#(J
    // instantiate a KeyStore with type JKS
    KeyStore ks = KeyStore.getInstance("JKS");
    // load the contents of the KeyStore
    ks.load(new FileInputStream("./keystore"),
    	"password".toCharArray());
    // fetch certificate chain stored with alias "sean"
    Certificate[] certArray = ks.getCertificateChain("sean");
    // convert chain to a List
    List certList = Arrays.asList(certArray);
    // instantiate a CertificateFactory for X.509
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    // extract the certification path from
    // the List of Certificates
    CertPath cp = cf.generateCertPath(certList);
	

generateCertificates $B$H$$$&L>A0$N(J CertificateFactory $B$K!"(JCertificate $B$N%7!<%1%s%9$r9=J82r@O$9$k4{B8$N%a%=%C%I$,$"$k$3$H$KCmL\$7$F$/$@$5$$!#(J $BJ#?t$N>ZL@=q$+$i$J$kId9f2=$G$O!"8_$$$K4XO"@-$,$J$$$H;W$o$l$k>ZL@=q$N%3%l%/%7%g%s$r2r@O$9$k>l9g$K!"(JgenerateCertificates $B$r;HMQ$7$^$9!#(J $B$=$l0J30$NId9f2=$G$O!"(JCertPath $B$r@8@.$7!"(JCertPathValidator ($B8e=R(J) $B$G8!>Z$9$k>l9g$K!"(JgenerateCertPath $B$r;HMQ$7$^$9!#(J

CertPathParameters $B%$%s%?%U%'!<%9(J

CertPathParameters $B%$%s%?%U%'!<%9$O!"FCDj$N>ZL@=q%Q%9%S%k%@$^$?$O8!>Z%"%k%4%j%:%`$G;HMQ$5$l$k0lO"$N%Q%i%a!<%?$NF)L@$JI=8=$G$9!#(J $B$3$N%$%s%?%U%'!<%9$NZL@=q%Q%9$N%Q%i%a!<%?$N;EMM$r%0%k!<%W2=$9$k$3$H(J ($B$*$h$S$=$l$i$N%Q%i%a!<%?$K0BA4$J7?$rDs6!$9$k$3$H(J) $B$G$9!#(J CertPathParameters $B%$%s%?%U%'!<%9$O!"(JCloneable $B%$%s%?%U%'!<%9$r3HD%$7!"Nc30$r%9%m!<$7$J$$(J clone() $B%a%=%C%I$rDj5A$7$^$9!#(J $B$3$N%$%s%?%U%'!<%9$N$9$Y$F$N8GDjObject.clone() $B%a%=%C%I$rCertPathParameters $B%*%V%8%'%/%H$rJ#@=$G$-$^$9!#(J

CertPathParameters $B%$%s%?%U%'!<%9$rCertPathValidator $B$*$h$S(J CertPathBuilder $B%/%i%9$N%a%=%C%I$K0z?t$H$7$FEO$5$l$^$9!#(J $B0lHL$K!"(JCertPathParameters $B%$%s%?%U%'!<%9$N8GDjZL@=q%Q%9$N9=C[$^$?$O8!>Z%"%k%4%j%:%`$K8GM-$NF~NO%Q%i%a!<%?$N%;%C%H$rJ];}$7$^$9!#(J $B$?$H$($P!"(JPKIXParameters $B%/%i%9$O!"(JPKIX $B>ZL@=q%Q%98!>Z%"%k%4%j%:%`$NF~NO%Q%i%a!<%?$N%;%C%H$rJ];}$9$k(J CertPathParameters $B%$%s%?%U%'!<%9$NZ=hM}$N%"%s%+!<$K$D$$$F?.Mj$9$k!":G$b?.Mj$G$-$k(J CA $B$N%;%C%H$,$"$j$^$9!#(J $B$3$N%Q%i%a!<%?$K$D$$$F$OFC$K!"(JPKIXParameters $B%/%i%9$r07$C$?%;%/%7%g%s$G>\$7$/@bL@$7$^$9!#(J

Certification Path $B8!>Z%/%i%9(J

Java Certification Path API $B$K$O!">ZL@=q%Q%9$r8!>Z$9$k%/%i%9$*$h$S%$%s%?%U%'!<%9$,4^$^$l$F$$$^$9!#(J $B%"%W%j%1!<%7%g%s$O!"(JCertPathValidator $B%/%i%9$N%$%s%9%?%s%9$r;H$C$F!"(JCertPath $B%*%V%8%'%/%H$r8!>Z$7$^$9!#(J $B@.8y$9$k$H!"(JCertPathValidatorResult $B%$%s%?%U%'!<%9$rZ%"%k%4%j%:%`$N7k2L$,JV$5$l$^$9!#(J

CertPathValidator $B%/%i%9(J

CertPathValidator $B%/%i%9$O!">ZL@=q%Q%9$N8!>Z$K;HMQ$5$l$k(J$B%(%s%8%s%/%i%9(J$B$G$9!#(J

CertPathValidator $B%*%V%8%'%/%H$N@8@.(J

$B$[$+$N%(%s%8%s%/%i%9$HF1MM$K!"FCDj$N8!>Z%"%k%4%j%:%`MQ$N(J CertPathValidator $B%*%V%8%'%/%H$rCertPathValidator $B%/%i%9$N(J getInstance static $B%U%!%/%H%j%a%=%C%I$N(J 1 $B$D$r8F$S=P$7$^$9!#(J

	public static CertPathValidator getInstance(String algorithm)
    	public static CertPathValidator getInstance(String algorithm,
						    String provider)
    	public static CertPathValidator getInstance(String algorithm,
						    Provider provider)
algorithm $B%Q%i%a!<%?$O!">ZL@=q%Q%98!>Z%"%k%4%j%:%`(J ($B!V(JPKIX$B!W$J$I(J) $B$NL>A0$G$9!#(J $BI8=`$N(J CertPathValidator $B%"%k%4%j%:%`L>$O!"(J$BIUO?(J A $B$N%j%9%H$K5-:\$5$l$F$$$^$9!#(J

$B>ZL@=q%Q%9$N8!>Z(J

CertPathValidator $B%*%V%8%'%/%H$,@8@.$5$l$k$H!"(Jvalidate $B%a%=%C%I$r8F$S=P$7$F!"8!>Z$9$k>ZL@=q%Q%9$*$h$S%"%k%4%j%:%`FCDj7?$N%Q%i%a!<%?%;%C%H$rEO$9$3$H$K$h$C$F!"%Q%9$r8!>Z$G$-$^$9!#(J

	public final CertPathValidatorResult
	    	validate(CertPath certPath, CertPathParameters params)
		throws CertPathValidatorException,
		       InvalidAlgorithmParameterException

$B8!>Z%"%k%4%j%:%`$,@.8y$9$k$H!"(JCertPathValidatorResult $B%$%s%?%U%'!<%9$rl9g$O!"(JCertPathValidatorException $B$,%9%m!<$5$l$^$9!#(J CertPathValidatorException $B$K$O!"(JCertPath $B$rJV$9%a%=%C%I$,4^$^$l$^$9!#$^$?!"I,MW$K1~$8$F!"%"%k%4%j%:%`$N<:GT$r0z$-5/$3$7$?>ZL@=q$N%$%s%G%C%/%9$d!"%(%i!<$N:,K\$H$J$kNc30$^$?$O860x$rJV$9%a%=%C%I$,4^$^$l$^$9!#(J

validate $B%a%=%C%I$KEO$5$l$k(J CertPath $B$*$h$S(J CertPathParameters $B$O!"8!>Z%"%k%4%j%:%`$K$h$C$F%5%]!<%H$5$l$?7?$G$"$kI,MW$,$"$j$^$9!#(J $B$=$&$G$J$$>l9g$O!"(JInvalidAlgorithmParameterException $B$,%9%m!<$5$l$^$9!#(J $B$?$H$($P!"(JPKIX $B%"%k%4%j%:%`$rCertPathValidator $B%$%s%9%?%s%9$O!"(JX.509 $B7?$N(J CertPath $B%*%V%8%'%/%H!"$*$h$S(J PKIXParameters $B$N%$%s%9%?%s%9$G$"$k(J CertPathParameters $B$r8!>Z$7$^$9!#(J

CertPathValidatorResult $B%$%s%?%U%'!<%9(J

CertPathValidatorResult $B%$%s%?%U%'!<%9$O!">ZL@=q%Q%98!>Z%"%k%4%j%:%`$N@.8y7k2L$^$?$O=PNO$NF)L@$JI=8=$G$9!#(J $B$3$N%$%s%?%U%'!<%9$NZ7k2L$r%0%k!<%W2=$9$k$3$H(J ($B$*$h$S$=$l$i$N8!>Z7k2L$K0BA4$J7?$rDs6!$9$k$3$H(J) $B$G$9!#(J CertPathParameters $B%$%s%?%U%'!<%9$HF1MM$K!"(JCertPathValidatorResult $B$O(J Cloneable $B$r3HD%$7!"Nc30$r%9%m!<$7$J$$(J clone() $B%a%=%C%I$rDj5A$7$^$9!#(J $B$3$l$K$h$j!"%"%W%j%1!<%7%g%s$O!"(JCertPathValidatorResult $B%*%V%8%'%/%H$rJ#@=$G$-$^$9!#(J

CertPathValidatorResult $B%$%s%?%U%'!<%9$rCertPathValidator $B$N(J validate $B%a%=%C%I$K$h$C$FJV$5$l$^$9(J ($B@.8y;~$N$_!#$=$&$G$J$$>l9g$O!"(JCertPathValidatorException $B$O%(%i!<$N5-=R$H$H$b$K%9%m!<$5$l$^$9(J)$B!#(J $B0lHL$K!"(JCertPathValidatorResult $B%$%s%?%U%'!<%9$N8GDjZL@=q%Q%9$N8!>Z%"%k%4%j%:%`$K8GM-$N=PNO%Q%i%a!<%?$N%;%C%H$rJ];}$7$^$9!#(J $B$?$H$($P!"(JPKIXCertPathValidatorResult $B%/%i%9$O!"(JPKIX $B>ZL@=q%Q%98!>Z%"%k%4%j%:%`$N=PNO%Q%i%a!<%?$N%;%C%H$rCertPathValidatorResult $B%$%s%?%U%'!<%9$NPKIXCertPathValidatorResult $B%/%i%9$r07$C$?%;%/%7%g%s$G>\$7$/@bL@$7$^$9!#(J

$BCertPathValidator $B$r:n@.$7!">ZL@=q%Q%9$N8!>Z$K;HMQ$9$kJ}K!$r<($7$^$9!#(J $B$3$NNc$O!"(Jvalidate $B%a%=%C%I$KEO$5$l$k(J CertPath $B$*$h$S(J CertPathParameters $B%*%V%8%'%/%H$,;vA0$K:n@.$5$l$F$$$k$3$H$rA0Ds$H$7$F$$$^$9!#$h$j>\$7$$Nc$O!"(JPKIX $B%/%i%9$r@bL@$7$?%;%/%7%g%s$K$"$j$^$9!#(J

    // create CertPathValidator that implements the "PKIX" algorithm
    CertPathValidator cpv = null;
    try {
        cpv = CertPathValidator.getInstance("PKIX");
    } catch (NoSuchAlgorithmException nsae) {
	System.err.println(nsae);
	System.exit(1);
    }
    // validate certification path ("cp") with specified parameters ("params")
    try {
        CertPathValidatorResult cpvResult = cpv.validate(cp, params);
    } catch (InvalidAlgorithmParameterException iape) {
	System.err.println("validation failed: " + iape);
	System.exit(1);
    } catch (CertPathValidatorException cpve) {
	System.err.println("validation failed: " + cpve);
	System.err.println("index of certificate that caused exception: "
		+ cpve.getIndex());
	System.exit(1);
    }

Certification Path $B9=C[%/%i%9(J

Java Certification Path API $B$K$O!">ZL@=q%Q%9$r9=C[$9$k(J ($B$^$?$O8!=P$9$k(J) $B$?$a$N%/%i%9$,4^$^$l$F$$$^$9!#(J $B%"%W%j%1!<%7%g%s$O!"(JCertPathBuilder $B%/%i%9$N%$%s%9%?%s%9$r;H$C$F!"(JCertPath $B%*%V%8%'%/%H$r9=C[$7$^$9!#(J $B@.8y$9$k$H!"(JCertPathBuilderResult $B%$%s%?%U%'!<%9$r

CertPathBuilder $B%/%i%9(J

CertPathBuilder $B%/%i%9$O!">ZL@=q%Q%9$N9=C[$K;HMQ$5$l$k(J$B%(%s%8%s%/%i%9(J$B$G$9!#(J

CertPathBuilder $B%*%V%8%'%/%H$N@8@.(J

$B$[$+$N%(%s%8%s%/%i%9$HF1MM$K!"FCDj$N9=C[%"%k%4%j%:%`MQ$N(J CertPathBuilder $B%*%V%8%'%/%H$rCertPathBuilder $B%/%i%9$N(J getInstance static $B%U%!%/%H%j%a%=%C%I$r8F$S=P$7$^$9!#(J

	public static CertPathBuilder getInstance(String algorithm)
	public static CertPathBuilder getInstance(String algorithm,
						  String provider)
    	public static CertPathBuilder getInstance(String algorithm,
					          Provider provider)
algorithm $B%Q%i%a!<%?$O!">ZL@=q%Q%99=C[%"%k%4%j%:%`(J ($B!V(JPKIX$B!W$J$I(J) $B$NL>A0$G$9!#(J $BI8=`$N(J CertPathBuilder $B%"%k%4%j%:%`L>$O!"(J$BIUO?(J A $B$N%j%9%H$K5-:\$5$l$F$$$^$9!#(J

$B>ZL@=q%Q%9$N9=C[(J

CertPathBuilder $B%*%V%8%'%/%H$,:n@.$5$l$k$H!"(Jbuild $B%a%=%C%I$r8F$S=P$7$F!"%"%k%4%j%:%`FCDj7?$N%Q%i%a!<%?;EMM$rEO$9$3$H$K$h$C$F!"%Q%9$r9=C[$G$-$^$9!#(J

	public final CertPathBuilderResult build(CertPathParameters params)
		throws CertPathBuilderException,
		       InvalidAlgorithmParameterException

$B9=C[%"%k%4%j%:%`$,@.8y$9$k$H!"(JCertPathBuilderResult $B%$%s%?%U%'!<%9$rl9g$O!"$?$H$($P!"4p$K$J$kNc30(J ($BB8:_$9$k>l9g(J) $B$H%(%i!<%a%C%;!<%8$J$I!"%(%i!<$K$D$$$F$N>pJs$r4^$`(J CertPathBuilderException $B$,%9%m!<$5$l$^$9!#(J

build $B%a%=%C%I$KEO$5$l$k(J CertPathParameters $B$O!"9=C[%"%k%4%j%:%`$K$h$C$F%5%]!<%H$5$l$?7?$G$"$kI,MW$,$"$j$^$9!#(J $B$=$&$G$J$$>l9g$O!"(JInvalidAlgorithmParameterException $B$,%9%m!<$5$l$^$9!#(J

CertPathBuilderResult $B%$%s%?%U%'!<%9(J

CertPathBuilderResult $B%$%s%?%U%'!<%9$O!">ZL@=q%Q%99=C[%"%k%4%j%:%`$N7k2L$^$?$O=PNO$NF)L@$JI=8=$G$9!#(J $B$3$N%$%s%?%U%'!<%9$K$O!"o$K9=C[$5$l$?>ZL@=q%Q%9$rJV$9%a%=%C%I$,4^$^$l$^$9!#(J

	public CertPath getCertPath()

CertPathBuilderResult $B%$%s%?%U%'!<%9$NL\E*$O!"$9$Y$F$N9=C[7k2L$r%0%k!<%W2=$9$k$3$H(J ($B$*$h$S$=$l$i$N9=C[7k2L$K0BA4$J7?$rDs6!$9$k$3$H(J) $B$G$9!#(J CertPathValidatorResult $B%$%s%?%U%'!<%9$HF1MM$K!"(JCertPathBuilderResult $B$O(J Cloneable $B$r3HD%$7!"Nc30$r%9%m!<$7$J$$(J clone() $B%a%=%C%I$rDj5A$7$^$9!#(J $B$3$l$K$h$j!"%"%W%j%1!<%7%g%s$O!"(JCertPathBuilderResult $B%*%V%8%'%/%H$rJ#@=$G$-$^$9!#(J

CertPathBuilderResult $B%$%s%?%U%'!<%9$rCertPathBuilder $B$N(J build $B%a%=%C%I$K$h$C$FJV$5$l$^$9!#(J

$BCertPathBuilder $B$r:n@.$7$F!">ZL@=q%Q%9$N9=C[$K;HMQ$9$kJ}K!$r<($7$^$9!#(J $B$3$NNc$O!"(Jbuild $B%a%=%C%I$KEO$5$l$k(J CertPathParameters $B%*%V%8%'%/%H$,;vA0$K:n@.$5$l$F$$$k$3$H$rA0Ds$H$7$F$$$^$9!#$h$j>\$7$$Nc$O!"(JPKIX $B%/%i%9$r@bL@$7$?%;%/%7%g%s$K$"$j$^$9!#(J

    // create CertPathBuilder that implements the "PKIX" algorithm
    CertPathBuilder cpb = null;
    try {
        cpb = CertPathBuilder.getInstance("PKIX");
    } catch (NoSuchAlgorithmException nsae) {
	System.err.println(nsae);
	System.exit(1);
    }
    // build certification path using specified parameters ("params")
    try {
        CertPathBuilderResult cpbResult = cpb.build(params);
        CertPath cp = cpbResult.getCertPath();
        System.out.println("build passed, path contents: " + cp);
    } catch (InvalidAlgorithmParameterException iape) {
	System.err.println("build failed: " + iape);
	System.exit(1);
    } catch (CertPathBuilderException cpbe) {
	System.err.println("build failed: " + cpbe);
	System.exit(1);
    }

$B>ZL@=q(J/CRL $B%9%H%l!<%8%/%i%9(J

Java Certification Path API $B$K$O!"%j%]%8%H%j$+$i>ZL@=q$*$h$S(J CRL $B$rCertStore $B%/%i%9$b4^$^$l$F$$$^$9!#(J $B$3$N%/%i%9$r;HMQ$9$k$H!"8F$S=P$7B&$O!"(JCertPathValidator $B$^$?$O(J CertPathBuilder $B$NZL@=q$*$h$S(J CRL $B$N8!=P$K;HMQ$9$k%j%]%8%H%j$r;XDj$G$-$^$9(J ($BNc$K$D$$$F$O!"(JPKIXParameters $B$N(JaddCertStores $B%a%=%C%I$r;2>H(J)$B!#(J

CertPathValidator $BCertStore $B%*%V%8%'%/%H$r;HMQ$7$F(J CRL $B$r%U%'%C%A$7!"C$7$N%A%'%C%/$r9T$$$^$9!#(J $BF1MM$K!"(JCertPathBuilder $BCertStore $B$r%3!<%k%P%C%/5!9=$H$7$F;HMQ$7$F>ZL@=q$r%U%'%C%A$7$^$9!#$^$?!"C$7$N%A%'%C%/$r9T$C$F$$$k>l9g$O(J CRL $B$r%U%'%C%A$7$^$9!#(J

CertStore $B%/%i%9(J

CertStore $B%/%i%9$O!">ZL@=q$*$h$S>ZL@=q$NC$7%j%9%H(J (CRL) $B$N%j%]%8%H%j$H$7$F5!G=$9$k(J$B%(%s%8%s%/%i%9(J $B$G$9!#(J $B$3$N%/%i%9$O!"(JCertPathBuilder $B$*$h$S(J CertPathValidator $B$NZL@=q$*$h$S(J CRL $B$N8!:w$N$?$a!"$^$?$OHFMQ$N>ZL@=q$*$h$S(J CRL $B$N

CertStore $B$O!"Hs8x3+80$*$h$S?.Mj$G$-$k>ZL@=q$N%-%c%C%7%e$X$N%"%/%;%9$rDs6!$9$k(J java.security.KeyStore $B%/%i%9$H$O0[$J$j!"Hs>o$KBg$-$/$J$k2DG=@-$,$"$k!"?.Mj$5$l$J$$>ZL@=q$*$h$S(J CRL $B$N%j%]%8%H%j$X$N%"%/%;%9$rDs6!$9$k$h$&$K@_7W$5$l$F$$$^$9!#(J $B$?$H$($P!"(JCertStore $B$N(J LDAP $Be$N%G%#%l%/%H%j$K3JG<$5$l$F$$$k>ZL@=q$^$?$O(J CRL $B$KBP$9$k%"%/%;%9$r!"(JLDAP $B%W%m%H%3%k$r;H$C$FDs6!$7$^$9!#(J

CertStore $B%*%V%8%'%/%H$N$9$Y$F$N(J public $B%a%=%C%I$O!"%9%l%C%I$KBP$7$F0BA4$G$9!#(J $B$D$^$j!"C10l$N(J ($B$^$?$OJ#?t$N(J) CertStore $B%*%V%8%'%/%H>e$G!"J#?t$N%9%l%C%I$,$3$l$i$N%a%=%C%I$rF1;~$K8F$S=P$7$F$b!"0-1F6A$O$"$j$^$;$s!#(J $B$3$l$K$h$j!"$?$H$($P(J CertPathBuilder $B$O!"(JCRL $B$r8!:w$7$J$,$i!"F1;~$KB>$N>ZL@=q$r8!:w$9$k$3$H$,$G$-$^$9!#(J

CertStore $B%*%V%8%'%/%H$N@8@.(J

$B$[$+$N%(%s%8%s%/%i%9$HF1MM$K!"FCDj$N%j%]%8%H%j7?MQ$N(J CertStore $B%*%V%8%'%/%H$rCertStore $B%/%i%9$G0J2<$N(J getInstance static $B%U%!%/%H%j%a%=%C%I$N$I$l$+$r8F$S=P$7$^$9!#(J

	public static CertStore getInstance(String type,
		CertStoreParameters params)
	public static CertStore getInstance(String type,
		CertStoreParameters params, String provider)
	public static CertStore getInstance(String type,
		CertStoreParameters params, Provider provider)
type $B%Q%i%a!<%?$O!">ZL@=q%j%]%8%H%j7?(J ($B!V(JLDAP$B!W$J$I(J) $B$NL>A0$G$9!#(J $BI8=`$N(J CertStore $B7?$O!"(J$BIUO?(J A $B$N%j%9%H$K5-:\$5$l$F$$$^$9!#(J

$B=i4|2=%Q%i%a!<%?(J (params) $B$O!"%j%]%8%H%j7?$K8GM-$N$b$N$G$9!#(J $B$?$H$($P!"%5!<%P%Y!<%9$N%j%]%8%H%j$N=i4|2=%Q%i%a!<%?$O!"%5!<%P$N%[%9%HL>$*$h$S%]!<%H$r4^$_$^$9!#(J $B%Q%i%a!<%?$,$3$N(J CertStore $B7?$K$D$$$FL58z$J>l9g!"(JInvalidAlgorithmParameterException $B$,%9%m!<$5$l$^$9!#(J getCertStoreParameters $B%a%=%C%I$O!"(JCertStore $B$N=i4|2=$K;HMQ$5$l$?(J CertStoreParameters $B$rJV$7$^$9!#(J

	public final CertStoreParameters getCertStoreParameters()

$B>ZL@=q$N

CertStore $B%*%V%8%'%/%H$r@8@.$9$k$H!"(JgetCertificates $B%a%=%C%I$r;H$C$F%j%]%8%H%j$+$i>ZL@=q$rCertSelector $B%*%V%8%'%/%H(J ($B>\:Y$O8e=R(J) $B$r0z?t$H$7$FZL@=q$,JV$5$l$k$+$r7hDj$9$k0lO"$NA*Br>r7o$r;XDj$7$^$9!#(J

	public final Collection getCertificates(CertSelector selector)
		throws CertStoreException

$B$3$N%a%=%C%I$O!"A*Br>r7o$rK~$?$9(J java.security.cert.Certificate $B%*%V%8%'%/%H$N(J Collection $B$rJV$7$^$9!#(J $B>r7o$,K~$?$9$b$N$,$J$$>l9g$O!"6u$N(J Collection $B$,JV$5$l$^$9!#(J $B%j%b!<%H%j%]%8%H%j$H$NDL?.>c32$J$I!"M=4|$7$J$$%(%i!<>uBV$,@8$8$?>l9g$O!"DL>o!"(JCertStoreException $B$,%9%m!<$5$l$^$9!#(J

$B$"$kCertStore $Br7o$rK~$?$9>ZL@=q$^$?$O(J CRL $B$r%j%]%8%H%jA4BN$G8!:w$G$-$^$;$s!#(J $B$3$l$i$N%$%s%9%?%s%9$G$O!"(JCertStore $BZL@=q$*$h$S(J CRL $B$r8!:w$9$k%;%l%/%?$G;XDj$5$l$?>pJs$r;HMQ$7$^$9!#(J $B$?$H$($P!"(JLDAP CertStore $B$O!"%G%#%l%/%H%jFb$N$9$Y$F$N%(%s%H%j$r8!:w$7$J$$>l9g$,$"$j$^$9!#(J $B$=$NBe$o$j$K!"C5$7$F$$$k>ZL@=q$r4^$s$G$$$k2DG=@-$N$"$k%(%s%H%j$@$1$r8!:w$7$^$9!#(J LDAP CertStore $B$,$I$N%(%s%H%j$r8!:w$9$Y$-$+$rH=CG$9$k$?$a$N==J,$J>pJs$r(J CertSelector $B$,Ds6!$7$J$$>l9g!"(JLDAP CertStore $B$O(J CertStoreException $B$r%9%m!<$7$^$9!#(J

CRL $B$N

getCRLs $B%a%=%C%I$r;H$C$F%j%]%8%H%j$+$i(J CRL $B$rCRLSelector $B%*%V%8%'%/%H(J ($B>\:Y$O8e=R(J) $B$r0z?t$H$7$Fr7o$r;XDj$7$^$9!#(J

	public final Collection getCRLs(CRLSelector selector)
		throws CertStoreException

$B$3$N%a%=%C%I$O!"A*Br>r7o$rK~$?$9(J java.security.cert.CRL $B%*%V%8%'%/%H$N(J Collection $B$rJV$7$^$9!#(J $B>r7o$,K~$?$9$b$N$,$J$$>l9g$O!"6u$N(J Collection $B$,JV$5$l$^$9!#(J

CertStoreParameters $B%$%s%?%U%'!<%9(J

CertStoreParameters $B%$%s%?%U%'!<%9$O!"FCDj$N(J CertStore $B$G;HMQ$5$l$k%Q%i%a!<%?$N%;%C%H$NF)L@$JI=8=$G$9!#(J $B$3$N%$%s%?%U%'!<%9$NZL@=q%9%H%l!<%8$N%Q%i%a!<%?$N;EMM$r%0%k!<%W2=$9$k$3$H(J ($B$*$h$S$=$l$i$N%Q%i%a!<%?$K0BA4$J7?$rDs6!$9$k$3$H(J) $B$G$9!#(J CertStoreParameters $B%$%s%?%U%'!<%9$O!"(JCloneable $B%$%s%?%U%'!<%9$r3HD%$7!"Nc30$r%9%m!<$7$J$$(J clone $B%a%=%C%I$rDj5A$7$^$9!#(J $B$3$N%$%s%?%U%'!<%9$NObject.clone() $B%a%=%C%I$rCertStoreParameters $B%*%V%8%'%/%H$rJ#@=$G$-$^$9!#(J

CertStoreParameters $B%$%s%?%U%'!<%9$rCertStore $B%/%i%9$N(J getInstance $B%a%=%C%I$K0z?t$H$7$FEO$5$l$^$9!#(J CertStoreParameters $B%$%s%?%U%'!<%9$rLDAPCertStoreParameters $B$*$h$S(J CollectionCertStoreParameters $B%/%i%9!#(J

LDAPCertStoreParameters $B%/%i%9(J

LDAPCertStoreParameters $B%/%i%9$O!"(JCertStoreParameters $B%$%s%?%U%'!<%9$NZL@=q$*$h$S(J CRL $B$r(J LDAP $B7?$N(J CertStore $B$+$i

$B$3$N%/%i%9$N>\:Y$K$D$$$F$O!"(JLDAPCertStoreParameters $B$N(JAPI $B%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(J

CollectionCertStoreParameters $B%/%i%9(J

CollectionCertStoreParameters $B%/%i%9$O!"(JCertStoreParameters $B%$%s%?%U%'!<%9$NZL@=q$*$h$S(J CRL $B$r(J Collection $B7?$N(J CertStore $B$+$i

$B$3$N%/%i%9$N>\:Y$K$D$$$F$O!"(JCollectionCertStoreParameters $B$N(J API $B%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(J

CertSelector $B$*$h$S(J CRLSelector $B%$%s%?%U%'!<%9(J

CertSelector $B$*$h$S(J CRLSelector $B%$%s%?%U%'!<%9$O!">ZL@=q$*$h$S(J CRL $B$N%3%l%/%7%g%s$^$?$OBg$-$J%0%k!<%W$+$i!">ZL@=q$*$h$S(J CRL $B$rA*Br$9$k$?$a$N0lO"$N>r7o$N;EMM$G$9!#(J $B%$%s%?%U%'!<%9$O%0%k!<%W2=$5$l!"$9$Y$F$N%;%l%/%?$N;EMM$K7?$N0BA4@-$rDs6!$7$^$9!#(J $B3F%;%l%/%?%$%s%?%U%'!<%9$O!"(JCloneable $B$r3HD%$7!"Nc30$r%9%m!<$7$J$$(J clone() $B%a%=%C%I$rDj5A$7$^$9!#(J $B$3$l$K$h$j!"%"%W%j%1!<%7%g%s$O!"$I$N(J CertSelector $B$^$?$O(J CRLSelector $B%*%V%8%'%/%H$bJ#@=$G$-$^$9!#(J

CertSelector $B$*$h$S(J CRLSelector $B%$%s%?%U%'!<%9$O!"$=$l$>$l(J match $B$H$$$&L>A0$N%a%=%C%I$rDj5A$7$^$9!#(J match $B%a%=%C%I$O!"(JCertificate $B$^$?$O(J CRL $B%*%V%8%'%/%H$r0z?t$H$7$Fr7o$rK~$?$9>l9g!"(Jtrue $B$rJV$7$^$9!#(J $B$=$&$G$J$$>l9g$O!"(Jfalse $B$rJV$7$^$9!#(J CertSelector $B%$%s%?%U%'!<%9$N(J match $B%a%=%C%I$O!"

	public boolean match(Certificate cert)

CRLSelector $B%$%s%?%U%'!<%9$K$D$$$F$O!"

	public boolean match(CRL crl)

$B0lHL$K!"$3$l$i$N%$%s%?%U%'!<%9$rCertStore $B%/%i%9$N(J getCertificates $B$*$h$S(J getCRLs $B%a%=%C%I$K%Q%i%a!<%?$H$7$FEO$5$l$^$9!#(J $B$3$l$i$N%a%=%C%I$O!";XDj$5$l$?A*Br>r7o$rK~$?$9(J CertStore $B%j%]%8%H%j$+$i!"(JCertificate $B$^$?$O(J CRL $B$N(J Collection $B$rJV$7$^$9!#(J $B$^$?!"(JCertSelector $B$O!">ZL@=q%Q%9$N%?!<%2%C%H$^$?$O%(%s%I%(%s%F%#%F%#>ZL@=q$G!"8!>Z$N@)Ls$r;XDj$9$k$?$a$K$b;HMQ$5$l$^$9(J (PKIXParameters.setTargetCertConstraints $B%a%=%C%I$NNc$r;2>H(J)$B!#(J

X509CertSelector $B%/%i%9(J

X509CertSelector $B%/%i%9$O!"(JX.509 $B>ZL@=q$rA*Br$9$k$?$a$N0lO"$N>r7o$rDj5A$9$k(J CertSelector $B%$%s%?%U%'!<%9$NX509Certificate $B%*%V%8%'%/%H$O!"(Jmatch $B%a%=%C%I$K$h$C$FA*Br$5$l$k$K$O!";XDj$5$l$?>r7o$N$9$Y$F(J$B$rK~$?$9I,MW$,$"$j$^$9!#(J $B$3$NA*Br>r7o$O!"(JCertPathBuilder $BZL@=q%Q%9$r9=C[$9$k:]$K!"@x:_E*$J>ZL@=q$r8!=P$9$k$?$a$K;HMQ$9$k$h$&@_7W$5$l$F$$$^$9!#(J

$B$?$H$($P!"(JX509CertSelector $B$N(J setSubject $B%a%=%C%I$r;HMQ$9$k$H!"(JPKIX CertPathBuilder $B$O!"ItJ,E*$K40@.$5$l$?O":?$NCf$G!"@h9T$9$k(J X509Certificate $B$NH/9T$H0lCW$7$J$$(J X509Certificate $B$r%U%#%k%?$K$+$1$k$3$H$,$G$-$^$9!#(J X509CertSelector $B%*%V%8%'%/%H$G!"$3$N>r7o$H$H$b$K$=$NB>$N>r7o$r@_Dj$9$k$3$H$K$h$j!"(JCertPathBuilder $B$O!"L54X78$J>ZL@=q$rGK4~$7$F!"(JCertPathParameters $B%*%V%8%'%/%H$G;XDj$7$?MW7o$rK~$?$9(J X.509 $B>ZL@=q%Q%9$r$h$j4JC1$KC5$9$3$H$,$G$-$^$9!#(J

$B$3$3$G@bL@$7$?(J X.509 $B>ZL@=q$N3HD%5!G=$NDj5A$K$D$$$F$O!"(J http://www.ietf.org/rfc/rfc2459.txt $B$r;2>H$7$F$/$@$5$$!#(J

X509CertSelector $B%*%V%8%'%/%H$N@8@.(J

X509CertSelector $B%*%V%8%'%/%H$O!"

	public X509CertSelector()

$B:G=i$O!">r7o$O2?$b@_Dj$5$l$F$$$^$;$s(J ($B$I$N(J X509Certificate $B$b0lCW(J)$B!#(J

$BA*Br>r7o$N@_Dj(J

$B8F$S=P$7B&$O!"A*Br>r7o$r;HMQ$7$F(J X.509 $B>ZL@=q$N0[$J$k%3%s%]!<%M%s%H$r>H9g$9$k$3$H$,$G$-$^$9!#(J $B$3$3$G$O!"A*Br>r7o$r@_Dj$9$k$$$/$D$+$N%a%=%C%I$K$D$$$F@bL@$7$^$9!#(J $B$=$NB>$N%a%=%C%I$N>\:Y$K$D$$$F$O!"(JX509CertSelector $B$N(J API $B%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(J

setIssuer $B%a%=%C%I$O!"H/9Tr7o$r@_Dj$7$^$9!#(J

	public void setIssuer(String issuerDN)
	public void setIssuer(byte[] issuerDN)

$B;XDj$5$l$?<1JLL>(J (RFC 2253 String $B$^$?$O(J ASN.1 DER $BId9f2=7A<0(J) $B$O!">ZL@=q$K$"$kH/9T$HI,$:0lCW$9$kI,MW$,$"$j$^$9!#(J null $B$N>l9g!"H/9T$OLd$o$l$^$;$s!#(J

$BF1MM$K!"(JsetSubject $B%a%=%C%I$Or7o$r@_Dj$7$^$9!#(J

	public void setSubject(String subjectDN)
	public void setSubject(byte[] subjectDN)

$B;XDj$5$l$?<1JLL>(J (RFC 2253 String $B$^$?$O(J ASN.1 DER $BId9f2=7A<0(J) $B$O!">ZL@=q$K$"$k$HI,$:0lCW$9$kI,MW$,$"$j$^$9!#(J null $B$N>l9g!"$OLd$o$l$^$;$s!#(J

setSerialNumber $B%a%=%C%I$O!"(JserialNumber $B$N>r7o$r@_Dj$7$^$9!#(J

	public void setSerialNumber(BigInteger serial)

$B;XDj$5$l$?%7%j%"%kHV9f$O!">ZL@=q$K$"$k>ZL@=q%7%j%"%kHV9f$HI,$:0lCW$9$kI,MW$,$"$j$^$9!#(J null $B$N>l9g!">ZL@=q%7%j%"%kHV9f$OLd$o$l$^$;$s!#(J

setAuthorityKeyIdentifier $B%a%=%C%I$O!"(JauthorityKeyIdentifier $B$N>r7o$r@_Dj$7$^$9!#(J

	public void setAuthorityKeyIdentifier(byte[] authorityKeyID)

$B>ZL@=q$K$O!";XDj$5$l$?CM$H0lCW$9$k(J Authority Key Identifier $B3HD%5!G=$,4^$^$l$F$$$kI,MW$,$"$j$^$9!#(J null $B$N>l9g!"(JauthorityKeyIdentifier $B>r7o$K4X$9$k3NG'$O9T$o$l$^$;$s!#(J

setCertificateValid $B%a%=%C%I$O!"(JcertificateValid $B$N>r7o$r@_Dj$7$^$9!#(J

	public void setCertificateValid(Date certValid)

$B;XDj$5$l$?F|IU$O!">ZL@=q$N>ZL@=qM-8z4|4VFb$K<}$^$kI,MW$,$"$j$^$9!#(J null $B$N>l9g!"$I$NF|IU$bM-8z$G$9!#(J

setKeyUsage $B%a%=%C%I$O!"(JkeyUsage $B$N>r7o$r@_Dj$7$^$9!#(J

	public void setKeyUsage(boolean[] keyUsage)

$B>ZL@=q$N(J Key Usage Extension $B$O!";XDj$5$l$?(J KeyUsage $B$NCM(J (true $B$K@_Dj$5$l$F$$$kCM(J) $B$r5v2D$9$kI,MW$,$"$j$^$9!#(J null $B$N>l9g!"(JkeyUsage $B$N3NG'$O9T$o$l$^$;$s!#(J

$BA*Br>r7o$N

$B3FA*Br>r7o$N8=:_$NCM$O!"3:Ev$9$k(J get $B%a%=%C%I$r;H$C$F\:Y$O!"(JX509CertSelector $B$N(J API $B%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(J

$BNc(J

$B$3$3$G$O!"(JX509CertSelector $B%/%i%9$r;H$C$F(J LDAP CertStore $B$+$i(J X.509 $B>ZL@=q$re$2$^$9!#(J

$B$O$8$a$K!"(JLDAP $B%5!<%P$N%[%9%HL>$*$h$S%]!<%H$r4^$`(J CertStore $B%*%V%8%'%/%H$N=i4|2=$K;HMQ$9$k(J LDAPCertStoreParameters $B%*%V%8%'%/%H$r@8@.$7$^$9!#(J

	LDAPCertStoreParameters lcsp = new
		LDAPCertStoreParameters("ldap.sun.com", 389);

$BCertStore $B%*%V%8%'%/%H$r@8@.$7!"LDAPCertStoreParameters $B%*%V%8%'%/%H$rEO$7$^$9!#(J

	CertStore cs = CertStore.getInstance("LDAP", lcsp);

$B$3$N8F$S=P$7$O!"(JRFC 2587 $B$GDj5A$5$l$?%9%-!<%^$r;H$C$F!">ZL@=q$*$h$S(J CRL $B$r(J LDAP $B%j%]%8%H%j$+$iCertStore $B%*%V%8%'%/%H$r@8@.$7$^$9!#(J

$BZL@=q$r$9$Y$FX509CertSelector $B$r3NN)$7$^$9!#$3$N>ZL@=q$O!"(J1) $B%G%8%?%k=pL>$r5v2D$9$k80$NMxMQK!!"$*$h$S(J 2) $BFCDj$NEE;R%a!<%k%"%I%l%9$H$H$b$K$r;}$DFCDj$N

	X509CertSelector xcs = new X509CertSelector();
	// select only unexpired certificates
	xcs.setCertificateValid(new Date());
	// select only certificates issued to
	// 'CN=alice, O=xyz, C=us'
	xcs.setSubject("CN=alice, O=xyz, C=us");
	// select only end-entity certificates
	xcs.setBasicConstraints(-2);
	// select only certificates with a digitalSignature
	// keyUsage bit set (set the first entry in the
	// boolean array to true)
	boolean[] keyUsage = {true};
	xcs.setKeyUsage(keyUsage);
	// select only certificates with a subjectAltName of
	// 'alice@xyz.com' (1 is the integer value of
	// an RFC822Name)
	xcs.addSubjectAlternativeName(1, "alice@xyz.com");

$BCertStore $B%*%V%8%'%/%H$N(J getCertificates $B%a%=%C%I$K%;%l%/%?$rEO$7$^$9!#(J

	Collection certs = cs.getCertificates(xcs);

PKIX CertPathBuilder $B$O!"@x:_E*$J>ZL@=q$N8!=P$*$h$S%=!<%H$rMF0W$K$9$k$?$a!"F1MM$N%3!<%I$r;HMQ$7$F!"8!>Z@)Ls$^$?$O$=$NB>$N>r7o$rK~$?$5$J$$@x:_E*$J>ZL@=q$rGK4~$9$k$3$H$,$"$j$^$9!#(J

X509CRLSelector $B%/%i%9(J

X509CRLSelector $B%/%i%9$O!"(JX.509 CRL $B$rA*Br$9$k0lO"$N>r7o$rDj5A$9$k(J CRLSelector $B%$%s%?%U%'!<%9$NX509CRL $B%*%V%8%'%/%H$O!"(Jmatch $B%a%=%C%I$K$h$C$FA*Br$5$l$k$K$O!";XDj$5$l$?>r7o$N$9$Y$F(J$B$rK~$?$9I,MW$,$"$j$^$9!#(J $BA*Br>r7o$O!"%j%]%8%H%j$+$i(J CRL $B$rCertPathValidator $B$^$?$O(J CertPathBuilder $BZL@=q%Q%9$K$"$k>ZL@=q$NC$7>u67$r3NG'$9$k$?$a$KLrN)$D$h$&@_7W$5$l$F$$$^$9!#(J

$B$?$H$($P!"(JX509CRLSelector $B$N(J setDateAndTime $B%a%=%C%I$r;HMQ$9$k$H!"(JPKIX CertPathValidator $B$O!";X<($5$l$?;~9o$N8e$KH/9T$5$l$?!"$^$?$O;X<($5$l$?;~9o$NA0$K4|8B$,@Z$l$k(J X509CRL $B$r%U%#%k%?$K$+$1$k$3$H$,$G$-$^$9!#(J X509CRLSelector $B%*%V%8%'%/%H$G!"$3$N>r7o$H$H$b$K$=$NB>$N>r7o$r@_Dj$9$k$3$H$K$h$j!"(JCertPathValidator $B$O!"L54X78$J(J CRL $B$rGK4~$7$F!">ZL@=q$,C$5$l$F$$$k$+$I$&$+$r$h$j4JC1$K%A%'%C%/$9$k$3$H$,$G$-$^$9!#(J

$B$3$3$G@bL@$7$?(J X.509 CRL $B%U%#!<%k%I$*$h$S3HD%5!G=$NDj5A$K$D$$$F$O!"(Jhttp://www.ietf.org/rfc/rfc2459.txt $B$r;2>H$7$F$/$@$5$$!#(J

X509CRLSelector $B%*%V%8%'%/%H$N@8@.(J

X509CRLSelector $B%*%V%8%'%/%H$O!"

	public X509CRLSelector()

$B:G=i!">r7o$O2?$b@_Dj$5$l$F$$$^$;$s(J ($B$I$N(J X509CRL $B$b0lCW(J)$B!#(J

$BA*Br>r7o$N@_Dj(J

$B8F$S=P$7B&$O!"A*Br>r7o$r;HMQ$7$F(J X.509 CRL $B$N0[$J$k%3%s%]!<%M%s%H$r>H9g$9$k$3$H$,$G$-$^$9!#(J $B$3$3$G$O!"A*Br>r7o$r@_Dj$9$k$[$H$s$I$N%a%=%C%I$K$D$$$F@bL@$7$^$9!#(J $B;D$j$N%a%=%C%I$N>\:Y$K$D$$$F$O!"(JX509CRLSelector $B$N(J API $B%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(J

setIssuerNames $B%a%=%C%I$O!"(JissuerNames $B$N>r7o$r@_Dj$7$^$9!#(J

	public void setIssuerNames(Collection names)

CRL $B$K$"$kH/9T$O!";XDj$5$l$?<1JLL>$N>/$J$/$H$b(J 1 $B$D$H0lCW$9$kI,MW$,$"$j$^$9!#(J names $B0z?t$N3F%(%s%H%j$O!"(JString $B$^$?$O%P%$%HG[Ns(J ($B$=$l$>$l!"(JRFC 2253 $B$^$?$O(J ASN.1 DER $BId9f2=7A<0$NL>A0$rI=$9(J) $B$N$I$A$i$+$G$9!#(J null $B$N>l9g!"H/9T$OLd$o$l$^$;$s!#(J

setMinCRLNumber $B$*$h$S(J setMaxCRLNumber $B%a%=%C%I$O!"(JminCRLNumber $B$*$h$S(J maxCRLN $B$N>r7o$r@_Dj$7$^$9!#(J

	public void setMinCRLNumber(BigInteger minCRL)
	public void setMaxCRLNumber(BigInteger maxCRL)

CRL $B$K$O!"(JCRL Number $B3HD%5!G=$,I,MW$G$9!#$3$N3HD%5!G=$O!"(JsetMinCRLNumber $B%a%=%C%I$,8F$S=P$5$l$?>l9g$K;XDj$5$l$?CM0J>e$K$J$j!"(JsetMaxCRLNumber $B%a%=%C%I$,8F$S=P$5$l$?>l9g$K;XDj$5$l$?CM0J2<$K$J$kCM$r;}$A$^$9!#(J $B$3$l$i$N%a%=%C%I$N(J 1 $B$D$KEO$5$l$?CM$,(J null $B$N>l9g!"BP1~$9$k%A%'%C%/$O9T$o$l$^$;$s!#(J

setDateAndTime $B%a%=%C%I$O!"(JdateAndTime $B$N>r7o$r@_Dj$7$^$9!#(J

	public void setDateAndTime(Date dateAndTime)

$B;XDj$5$l$?F|IU$O!"(JCRL $B$N(J thisUpdate $B%3%s%]!<%M%s%H$NCM$HF1$8$+!"$^$?$O$=$l$h$j8e$G!"$5$i$K(J nextUpdate $B%3%s%]!<%M%s%H$NCM$h$jA0$G$"$kI,MW$,$"$j$^$9!#(J null $B$N>l9g!"(JdateAndTime $B$N%A%'%C%/$O9T$o$l$^$;$s!#(J

setCertificateChecking $B%a%=%C%I$O!"C$7>u67$,%A%'%C%/$5$l$F$$$k>ZL@=q$r@_Dj$7$^$9!#(J

	public void setCertificateChecking(X509Certificate cert)

$B$3$l$O!">r7o$G$O$"$j$^$;$s!#(J $BFCDj$N>ZL@=q$NC$7$r%A%'%C%/$9$k:]$K!"(JCertStore $B$,4XO"$9$k(J CRL $B$r8!:w$9$k$N$KLrN)$D%*%W%7%g%s>pJs$G$9!#(J null $B$,;XDj$5$l$?>l9g!"$3$N$h$&$J%*%W%7%g%s>pJs$ODs6!$5$l$^$;$s!#(J $B%"%W%j%1!<%7%g%s$O!"FCDj$N>ZL@=q$NC$7$r%A%'%C%/$9$k:]!">o$K$3$N%a%=%C%I$r8F$S=P$7!"(JCertStore $B$,@5$7$$(J CRL $B$r8!:w$7$FL54X78$J(J CRL $B$r%U%#%k%?$9$k$3$H$,$G$-$k$h$&!"$h$jB?$/$N>pJs$rDs6!$9$kI,MW$,$"$j$^$9!#(J

$BA*Br>r7o$N

$B3FA*Br>r7o$N8=:_$NCM$O!"3:Ev$9$k(J get $B%a%=%C%I$r;H$C$F\:Y$K$D$$$F$O!"(JX509CRLSelector $B$N(J API $B%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(J

$BNc(J

CRL $B$r(J LDAP $B%j%]%8%H%j$+$iX509CRLSelector $B$N@8@.J}K!$O!"(JX509CertSelector $B$NNc$HF1MM$G$9!#(J $BFCDj$N(J CA $B$K$h$C$FH/9T$5$l!":G>.$N(J CRL $BHV9f$r;}$D!"8=:_$N(J ($B8=:_$NF|IU$*$h$S;~9o(J) CRL $B$9$Y$F$rDj$7$^$9!#(J $B$^$:!"(JX509CRLSelector $B%*%V%8%'%/%H$r@8@.$7!"E,Ev$J%a%=%C%I$r8F$S=P$7$FA*Br>r7o$r@_Dj$7$^$9!#(J

	X509CRLSelector xcrls = new X509CRLSelector();
	// select CRLs satisfying current date and time
	xcrls.setDateAndTime(new Date());
	// select CRLs issued by 'O=xyz, C=us'
	xcrls.addIssuerName("O=xyz, C=us");
	// select only CRLs with a CRL number at least '2'
	xcrls.setMinCRLNumber(new BigInteger("2"));

$BX509CertSelector $B$NNc$G@8@.$5$l$?(J CertStore $B%*%V%8%'%/%H$N(J getCRLs $B%a%=%C%I$K%;%l%/%?$rEO$7$^$9!#(J

	Collection crls = cs.getCRLs(xcrls);

PKIX $B%/%i%9(J

Java Certification Path API $B$K$O!"(Jhttp://www.ietf.org/internet-drafts/draft-ietf-pkix-new-part1-08.txt $B$GDj5A$5$l$F$$$k(J PKIX $B>ZL@=q%Q%98!>Z%"%k%4%j%:%`$G;HMQ$9$k$?$a$K%b%G%k2=$5$l$?!"%"%k%4%j%:%`FCDj7?$N%/%i%9$N%;%C%H$b4^$^$l$^$9!#(J $B$3$l$O(J RFC 2459 $B$K4p$E$$$?;EMM$N(J 9 $BHVL\$N%I%i%U%H$G$9!#$3$N;EMM$,40@.$9$k$H!"(JRFC 2459 $B$O;HMQ$5$l$J$/$J$j$^$9!#(J

TrustAnchor $B%/%i%9(J

$B$3$N%/%i%9$O!"(JX.509 $B>ZL@=q%Q%9$N8!>Z$G?.Mj$G$-$k%"%s%+!<$H$7$F;HMQ$5$l$k!V:G$b?.Mj$G$-$k(J CA$B!W$rI=$7$^$9!#(J $B:G$b?.Mj$G$-$k(J CA $B$K$O!"(JCA $B$N8x3+80!"(JCA $B$NL>A0!"$*$h$S$3$N80$r;H$C$F8!>Z$5$l$k%Q%9$N%;%C%H$KE,MQ$5$l$k@)Ls$,4^$^$l$^$9!#(J $B$3$l$i$N%Q%i%a!<%?$O!"?.Mj$G$-$k(J X509Certificate $B$N7A<0$G!"$^$?$O8DJL$N%Q%i%a!<%?$H$7$F;XDj$G$-$^$9!#(J

$B$9$Y$F$N(J TrustAnchor $B%*%V%8%'%/%H$O!"ITJQ$G!"%9%l%C%I$KBP$7$F0BA4$G$9!#(J $B$D$^$j!"C10l$N(J ($B$^$?$OJ#?t$N(J) TrustAnchor $B%*%V%8%'%/%H>e$G!"$3$N%/%i%9$KDj5A$5$l$?%a%=%C%I$rJ#?t$N%9%l%C%I$,F1;~$K8F$S=P$7$F$b!"0-1F6A$O$"$j$^$;$s!#(J TrustAnchor $B%*%V%8%'%/%H$O!"ITJQ$+$D%9%l%C%I$KBP$7$F0BA4$G$J$1$l$P$J$i$J$$$N$G!"%"%/%;%9$ND4@0$r0U<1$9$k$3$H$J$/!"%*%V%8%'%/%H$r$5$^$6$^$J%3!<%I$KEO$9$3$H$,$G$-$^$9!#(J

$B$3$N%/%i%9$O(J PKIX $B%/%i%9$H$7$F@bL@$5$l$F$$$^$9$,!"$=$NB>$N(J X.509 $B>ZL@=q%Q%9$N8!>Z%"%k%4%j%:%`$G;HMQ$5$l$k$3$H$b$"$j$^$9!#(J

TrustAnchor $B%*%V%8%'%/%H$N@8@.(J

TrustAnchor $B%*%V%8%'%/%H$r=i4|2=$9$k$K$O!"8F$S=P$7B&$O!"?.Mj$G$-$k(J X509Certificate $B$^$?$O8x3+80$H<1JLL>$N%Z%"$H$7$F!"!V:G$b?.Mj$G$-$k(J CA$B!W$r;XDj$9$kI,MW$,$"$j$^$9!#(J $B$^$?!"8F$S=P$7B&$O%*%W%7%g%s$G!"=i4|2=$N:]$K8!>Z%"%k%4%j%:%`$,?.Mj$G$-$k%"%s%+!<$KE,MQ$9$kL>A0$N@)Ls$r;XDj$9$k$3$H$b$G$-$^$9!#(J PKIX $B%"%k%4%j%:%`$G$O!"?.Mj$G$-$k%"%s%+!<$KE,MQ$9$kL>A0$N@)Ls$r%5%]!<%H$9$kI,MW$,$J$$$?$a!"(JPKIX CertPathValidator $B$^$?$O(J CertPathBuilder $B$O!"$3$N%Q%i%a!<%?$r%5%]!<%H$9$k$3$H$J$/Nc30$r%9%m!<$9$k$3$H$b$G$-$^$9!#(J $BTrustAnchor $B%*%V%8%'%/%H$r@8@.$7$^$9!#(J

	public TrustAnchor(X509Certificate trustedCert,
		byte[] nameConstraints)
	public TrustAnchor(String caName, PublicKey pubKey,
		byte[] nameConstraints)

nameConstraints $B%Q%i%a!<%?$O!"(JNameConstraints $B3HD%5!G=$N(J ASN.1 DER $BId9f2=$r4^$`%P%$%HG[Ns$H$7$F;XDj$5$l$^$9!#(J $BL>A0$N@)Ls$,I|9f2=$G$-$J$$(J ($B@5$7$/=q<0@_Dj$5$l$J$$(J) $B>l9g!"(JIllegalArgumentException $B$,%9%m!<$5$l$^$9!#(J

$B%Q%i%a!<%?CM$N

$B public final X509Certificate getTrustedCert() public final String getCAName() public final PublicKey getCAPublicKey() public final byte[] getNameConstraints() $B?.Mj$G$-$k%"%s%+!<$,8x3+80$HL>A0$N%Z%"$H$7$F;XDj$5$l$F$$$k>l9g!"(JgetTrustedCert $B%a%=%C%I$O(J null $B$rJV$7$^$9!#(J $BF1MM$K!"?.Mj$G$-$k%"%s%+!<$,(J X509Certificate $B$H$7$F;XDj$5$l$F$$$k>l9g!"(JgetCAName $B$*$h$S(J getCAPublicKey $B%a%=%C%I$O(J null $B$rJV$7$^$9!#(J

PKIXParameters $B%/%i%9(J

CertPathParameters $B%$%s%?%U%'!<%9$rZL@=q%Q%9$N8!>Z%"%k%4%j%:%`$K$h$jDj5A$5$l$?F~NO%Q%i%a!<%?$N%;%C%H$r;XDj$7$^$9!#(J $B$^$?!"$$$/$D$+$NM-MQ$JDI2C%Q%i%a!<%?$b4^$s$G$$$^$9!#(J

X.509 CertPath $B%*%V%8%'%/%H$*$h$S(J PKIXParameters $B%*%V%8%'%/%H$O!"(JPKIX $B%"%k%4%j%:%`$rCertPathValidator $B%$%s%9%?%s%9$N(J validate $B%a%=%C%I$K0z?t$H$7$FEO$5$l$^$9!#(J CertPathValidator $B$O!"%Q%i%a!<%?$r;H$C$F!"(JPKIX $B>ZL@=q%Q%9$N8!>Z%"%k%4%j%:%`$r=i4|2=$7$^$9!#(J

PKIXParameters $B%*%V%8%'%/%H$N@8@.(J

PKIXParameters $B%*%V%8%'%/%H$N%$%s%9%?%s%9$r@8@.$9$k$K$O!"8F$S=P$7B&$O!"(JPKIX $B8!>Z%"%k%4%j%:%`$K$h$kDj5A$K=>$C$F!V:G$b?.Mj$G$-$k(J CA$B!W$r;XDj$9$kI,MW$,$"$j$^$9!#(J $B:G$b?.Mj$G$-$k(J CA $B$O!" public PKIXParameters(Set trustAnchors) throws InvalidAlgorithmParameterException public PKIXParameters(KeyStore keystore) throws KeyStoreException, InvalidAlgorithmParameterException

$B:G=i$N%3%s%9%H%i%/%?$r;HMQ$9$k$H!"8F$S=P$7B&$O!":G$b?.Mj$G$-$k(J CA $B$r(J TrustAnchor $B%*%V%8%'%/%H$N(J$B%;%C%H(J$B$H$7$F;XDj$G$-$^$9!#(J $BBe$o$j$K!"8F$S=P$7B&$O(J 2 $BHVL\$N%3%s%9%H%i%/%?$r;H$C$F!"?.Mj$G$-$k>ZL@=q$N%(%s%H%j$r4^$`(J KeyStore $B%$%s%9%?%s%9$r;XDj$G$-$^$9!#$=$N3F%(%s%H%j$O!":G$b?.Mj$G$-$k(J CA $B$H$_$J$5$l$^$9!#(J

$B%Q%i%a!<%?CM$N@_Dj(J

PKIXParameters $B%*%V%8%'%/%H$r:n@.$9$k$H!"8F$S=P$7B&$O!"$5$^$6$^$J%Q%i%a!<%?$r@_Dj$9$k(J ($B$^$?$O8=:_$NCM$rCV$-49$($k(J) $B$3$H$,$G$-$^$9!#(J $B$3$3$G$O!"%Q%i%a!<%?$r@_Dj$9$k$?$a$N$$$/$D$+$N%a%=%C%I$K$D$$$F@bL@$7$^$9!#(J $B$=$NB>$N%a%=%C%I$N>\:Y$K$D$$$F$O!"(JPKIXParameters $B$N(J API $B%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(J

setInitialPolicies $B%a%=%C%I$O!"(JPKIX $B8!>Z%"%k%4%j%:%`$K$h$C$F;XDj$5$l$?$H$*$j$K!"=i4|%]%j%7!<<1JL;R$r@_Dj$7$^$9!#(J Set $B$NMWAG$O!"(JString $B$H$7$FI=8=$5$l$?%*%V%8%'%/%H<1JL;R(J (OID) $B$G$9!#(J initialPolicies $B%Q%i%a!<%?$,(J null $B$G$"$k$+!"$^$?$O@_Dj$5$l$F$$$J$$>l9g!"$I$N%]%j%7!<$b

	public void setInitialPolicies(Set initialPolicies)

setDate $B%a%=%C%I$O!"%Q%9$NBEEv@-$rH=Dj$9$k$?$a$N;~4V$r@_Dj$7$^$9!#(J date $B%Q%i%a!<%?$,@_Dj$5$l$F$$$J$$$+!"$^$?$O(J null $B$G$"$k>l9g!"8=:_$NF|IU$,;HMQ$5$l$^$9!#(J

	public void setDate(Date date)

setPolicyMappingInhibited $B%a%=%C%I$O!"%]%j%7!<%^%C%T%s%06X;_%U%i%0$NCM$r@_Dj$7$^$9!#(J $B;XDj$5$l$F$$$J$$>l9g!"%U%i%0$N%G%U%)%k%HCM$O(J false $B$G$9!#(J

	public void setPolicyMappingInhibited(boolean val)

setExplicitPolicyRequired $B%a%=%C%I$O!"L@<(E*$J%]%j%7!l9g!"%U%i%0$N%G%U%)%k%HCM$O(J false $B$G$9!#(J

	public void setExplicitPolicyRequired(boolean val)

setAnyPolicyInhibited $B%a%=%C%I$O!"%]%j%7!<6X;_%U%i%0$NCM$r@_Dj$7$^$9!#(J $B;XDj$5$l$F$$$J$$>l9g!"%U%i%0$N%G%U%)%k%HCM$O(J false $B$G$9!#(J

	public void setAnyPolicyInhibited(boolean val)

setTargetCertConstraints $B%a%=%C%I$r;HMQ$9$k$H!"8F$S=P$7B&$O!"%?!<%2%C%H$^$?$O%(%s%I%(%s%F%#%F%#$N>ZL@=q$K@)Ls$r@_Dj$G$-$^$9!#(J $B$?$H$($P!"8F$S=P$7B&$O!"%?!<%2%C%H$N>ZL@=q$KFCDj$N$r4^$`$h$&;XDj$G$-$^$9!#(J $B@)Ls$O!"(JCertSelector $B%*%V%8%'%/%H$H$7$F;XDj$5$l$^$9!#(J selector $B%Q%i%a!<%?$,(J null $B$G$"$k$+!"$^$?$O@_Dj$5$l$F$$$J$$>l9g!"%?!<%2%C%H$N>ZL@=q$K@)Ls$ODj5A$5$l$^$;$s!#(J

	public void setTargetCertConstraints(CertSelector selector)

setCertStores $B%a%=%C%I$r;HMQ$9$k$H!"8F$S=P$7B&$O!"(JCertPathValidator $B$N(J PKIX $BZMQ$N(J CRL $B$r8!:w$9$k$?$a$K;HMQ$9$k(J CertStore $B%*%V%8%'%/%H$N(J List $B$r;XDj$G$-$^$9!#(J $B$3$l$K$h$j!"(JCRL $B$N0LCV$r;XDj$9$k3HD%2DG=$J5!9=$,Ds6!$5$l$^$9!#(J setCertStores $B%a%=%C%I$O!"(JCertStore $B%*%V%8%'%/%H$N(J List $B$r%Q%i%a!<%?$H$7$FCertStore $B$O!"8e$N%(%s%H%j$KM%@h$7$^$9!#(J

	public void setCertStores(List stores)

setCertPathCheckers $B%a%=%C%I$r;HMQ$9$k$H!"8F$S=P$7B&$O!"ZL@=q%Q%9$N%A%'%C%+$r@8@.$9$k$3$H$K$h$C$F(J PKIX $B8!>Z%"%k%4%j%:%`$r3HD%$G$-$^$9!#(J $B$?$H$($P!"$3$N5!9=$O!"Hs8x3+>ZL@=q$N3HD%>pJs$r=hM}$9$k$?$a$K;HMQ$5$l$^$9!#(J setCertPathCheckers $B%a%=%C%I$O!"(JPKIXCertPathChecker $B%*%V%8%'%/%H(J ($B8e=R(J) $B$N%j%9%H$r%Q%i%a!<%?$H$7$F

	public void setCertPathCheckers(List checkers)

setRevocationEnabled $B%a%=%C%I$r;HMQ$9$k$H!"8F$S=P$7B&$OC$7$N%A%'%C%/$rL58z$K$9$k$3$H$,$G$-$^$9!#(J $BC$7$N%A%'%C%/$O!"(JPKIX $B8!>Z%"%k%4%j%:%`$KI,MW$J%A%'%C%/$J$N$G!"%G%U%)%k%H$G$OM-8z$K$J$C$F$$$^$9!#(J $B$?$@$7!"(JPKIX $B$G$O!"C$7$N%A%'%C%/J}K!$ODj5A$7$^$;$s!#(J $B$?$H$($P!"C$7%A%'%C%/5!9=$,E,Ev$G$J$$>l9g$K!"$=$l$rL58z$K$G$-$^$9!#(J $B$=$N8e$G!"(JsetCertPathCheckers $B%a%=%C%I$r8F$S=P$7!"Be$o$j$H$J$k5!9=$rPKIXCertPathChecker $B$KEO$9$3$H$K$h$j!"JL$NC$7%A%'%C%/5!9=$r;XDj$G$-$^$9!#(J

	public void setRevocationEnabled(boolean val)

setPolicyQualifiersRejected $B%a%=%C%I$r;HMQ$9$k$H!"8F$S=P$7B&$O!"%]%j%7!<=$>~;R$N=hM}$rM-8z$^$?$OL58z$K@_Dj$G$-$^$9!#(J PKIXParameters $B%*%V%8%'%/%H$,@8@.$5$l$k$H!"$3$N%U%i%0$O(J true $B$K@_Dj$5$l$^$9!#(J $B$3$N@_Dj$O!"%]%j%7!<=$>~;R$r=hM}$9$k$?$a$N:G$b0lHLE*$J(J ($B$+$D4JC1$J(J) $BJ}K!$rH?1G$7$^$9!#(J $B$h$jJ#;($J%]%j%7!<$r;HMQ$9$k%"%W%j%1!<%7%g%s$G$O!"$3$N%U%i%0$r(J false $B$K@_Dj$9$kI,MW$,$"$j$^$9!#(J

	public void setPolicyQualifiersRejected(boolean qualifiersRejected)

$B%Q%i%a!<%?CM$N

$B3F%Q%i%a!<%?$N8=:_$NCM$O!"3:Ev$9$k(J get $B%a%=%C%I$r;H$C$F\:Y$K$D$$$F$O!"(JPKIXParameters $B$N(J API $B%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(J

PKIXCertPathValidatorResult $B%/%i%9(J

$B$3$N%/%i%9(J (CertPathValidatorResult $B%$%s%?%U%'!<%9$rZL@=q%Q%98!>Z%"%k%4%j%:%`$N7k2L$rI=$7$^$9!#M-8z$J%]%j%7!<%D%j!<$*$h$S8!>Z%"%k%4%j%:%`$K$h$C$F@8@.$5$l$?getPolicyTree() $B$*$h$S(J getPublicKey()) $B$r;}$A$^$9!#(J PKIXCertPathValidatorResult $B$N%$%s%9%?%s%9$O!"(JPKIX $B%"%k%4%j%:%`$rCertPathValidator $B%*%V%8%'%/%H$N(J validate $B%a%=%C%I$K$h$C$FJV$5$l$^$9!#(J

$B$3$N%/%i%9$N>\:Y$K$D$$$F$O!"(JPKIXCertPathValidatorResult $B$N(J API $B%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(J

PolicyNode $B%$%s%?%U%'!<%9$*$h$S(J PolicyQualifierInfo $B%/%i%9(J

PKIX $B8!>Z%"%k%4%j%:%`$O!">ZL@=q%]%j%7!<=hM}$K4XO"$N$"$k$$$/$D$+$N=PNO$rDj5A$7$^$9!#(J $B$[$H$s$I$N%"%W%j%1!<%7%g%s$O!"$3$l$i$N=PNO$r;HMQ$9$kI,MW$O$"$j$^$;$s$,!"(JPKIX $B8!>Z$rPolicyNode $B%$%s%?%U%'!<%9$O!"(JPKIX $B>ZL@=q%Q%98!>Z$,@5>o$KPKIXCertPathValidatorResult $B$N(J getPolicyTree $B%a%=%C%I$r;H$C$F!"M-8z$J%]%j%7!<%D%j!<$N%k!<%H$r\:Y$K$D$$$F$O!"(J$B!V(JPKIX Certificate and CRL profile$B!W(J$B$r;2>H$7$F$/$@$5$$!#(J

PolicyNode $B$N(J getPolicyQualifiers $B%a%=%C%I$O!"(JPolicyQualifierInfo $B%*%V%8%'%/%H$N(J Set $B$rJV$7$^$9!#$=$N3F%*%V%8%'%/%H$O!"$3$N%]%j%7!<$,E,MQ$5$l$kE,@Z$J>ZL@=q$N(J Certificate Policies $B3HD%>pJs$K4^$^$l$k%]%j%7!<=$>~;R$rI=$7$^$9!#(J

$B$[$H$s$I$N%"%W%j%1!<%7%g%s$G$O!"M-8z$J%]%j%7!<%D%j!<$*$h$S%]%j%7!<=$>~;R$rD4$Y$kI,MW$O$"$j$^$;$s!#(J PKIXParameters $B$G%]%j%7!<4XO"$N%Q%i%a!<%?$r@_Dj$9$k$3$H$K$h$j!"%"%W%j%1!<%7%g%s$N%]%j%7!<=hM}L\I8$r~;R$r=hM}$9$k%"%W%j%1!<%7%g%s$KMxMQ$G$-$^$9!#(J

$B$3$l$i$N%/%i%9$N>\:Y$K$D$$$F$O!"(J PolicyNode $B$*$h$S(J PolicyQualifierInfo $B$N(J API $B%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(J

PKIX $B%"%k%4%j%:%`$r;H$C$?>ZL@=q%Q%9$N8!>ZNc(J

$B$3$3$G$O!"(JPKIX $B8!>Z%"%k%4%j%:%`$r;H$C$?>ZL@=q%Q%9$N8!>Z$NNc$re$2$^$9!#(J $BNc$G$O!"$[$H$s$I$NNc30=hM}$rL5;k$7!"?.Mj$G$-$k%"%s%+!<$N>ZL@=q%Q%9$*$h$S8x3+80$,$9$G$K:n@.$5$l$F$$$k$b$N$H2>Dj$7$^$9!#(J

$B$^$:!"CertPathValidator $B$r@8@.$7$^$9!#(J

    CertPathValidator cpv = CertPathValidator.getInstance("PKIX");

$BTrustAnchor $B%*%V%8%'%/%H$r@8@.$7$^$9!#(J $B$3$N%*%V%8%'%/%H$O!">ZL@=q%Q%9$N8!>Z$K%"%s%+!<$H$7$F;HMQ$5$l$^$9!#(J $B$3$NNc$G$O!":G$b?.Mj$G$-$k(J CA $B$O8x3+80$*$h$SL>A0(J ($BL>A0@)Ls$OE,MQ$5$l$:!"(Jnull $B$H$7$F;XDj$5$l$k(J) $B$H$7$F;XDj$5$l$^$9!#(J

    TrustAnchor anchor = new TrustAnchor("O=xyz,C=us", pubkey, null);

$BPKIXParameters $B%*%V%8%'%/%H$r@8@.$7$^$9!#(J $B$3$l$r;H$C$F!"(JPKIX $B%"%k%4%j%:%`$G;HMQ$5$l$k%Q%i%a!<%?$r0\?"$7$^$9!#$3$NNc$G$O!"%3%s%9%H%i%/%?$K!"A0$NTrustAnchor $B$r(J 1 $B$D$@$14^$`(J Set $B$rEO$7$^$9!#(J

    PKIXParameters params = new PKIXParameters(Collections.singleton(anchor));

$BZ%"%k%4%j%:%`$K$h$j;HMQ$5$l$k@)Ls$^$?$O$=$NB>$N%Q%i%a!<%?$r;}$D!"%Q%i%a!<%?%*%V%8%'%/%H$r@8@.$7$^$9!#(J $B$3$NNc$G$O!"(JexplicitPolicyRequired $B%U%i%0$rM-8z$K$7!"=i4|%]%j%7!<(J OID $B$N%;%C%H(J ($B%;%C%H$NFbMF$O<($5$l$J$$(J) $B$r;XDj$7$^$9!#(J

    // set other PKIX parameters here
    params.setExplicitPolicyRequired(true);
    params.setInitialPolicies(policyIds);

$B:G8e$NZL@=q%Q%9$N8!>Z$G$9!#(J

    try {
        PKIXCertPathValidatorResult result =
            (PKIXCertPathValidatorResult) cpv.validate(certPath, params);
        PolicyNode policyTree = result.getPolicyTree();
        PublicKey subjectPublicKey = result.getPublicKey();
    } catch (CertPathValidatorException cpve) {
        System.out.println("Validation failure, cert["
            + cpve.getIndex() + "] :" + cpve.getMessage());
    }

$B8!>Z%"%k%4%j%:%`$,@.8y$7$?$i!"$=$N8!>Z%"%k%4%j%:%`$G@8@.$5$l$?%]%j%7!<%D%j!<$*$h$SPKIXCertPathValidatorResult $B$N(J getPolicyTree $B$*$h$S(J getPublicKey $B%a%=%C%I$r;H$C$F$B$=$&$G$J$$>l9g$O!"(JCertPathValidatorException $B$,%9%m!<$5$l$k$?$a!"8F$S=P$7B&$ONc30$r%-%c%C%A$7$F!"%(%i!<%a%C%;!<%8$d>c32$r0z$-5/$3$7$?>ZL@=q$N%$%s%G%C%/%9$J$I!">c32$N$$$/$D$+$N>\:Y$K$D$$$FI=<($G$-$^$9!#(J

PKIXBuilderParameters $B%/%i%9(J

PKIXParameters $B%/%i%9$r3HD%$9$k$3$N%/%i%9$O!"(JPKIX $B>ZL@=q%Q%9$N8!>Z%"%k%4%j%:%`$K=>$C$F8!>Z$5$l$k>ZL@=q%Q%9$r9=C[$9$k(J CertPathBuilder $B$K;HMQ$5$l$k%Q%i%a!<%?$N%;%C%H$r;XDj$7$^$9!#(J

PKIXBuilderParameters $B%*%V%8%'%/%H$O!"(JPKIX $B%"%k%4%j%:%`$rCertPathBuilder $B%$%s%9%?%s%9$N(J build $B%a%=%C%I$K0z?t$H$7$FEO$5$l$^$9!#(J $B$9$Y$F$N(J PKIX CertPathBuilder $B$O!"(JPKIX $B>ZL@=q%Q%9$N8!>Z%"%k%4%j%:%`$K=>$C$F8!>Z$5$l$F$$$k>ZL@=q%Q%9$rJV$9I,MW$,$"$j$^$9(J$B!#(J

PKIX CertPathBuilder $B$,9=C[$5$l$?%Q%9$N8!>Z$K;HMQ$9$k5!9=$,!"\:Y$G$"$k$3$H$KCmL\$7$F$/$@$5$$!#(J $B$?$H$($P!"Z$r9T$C$?%Q%9$r9=C[$7!"CertPathValidator $B$N%$%s%9%?%s%9$r;H$C$F%Q%9$r40A4$K8!>Z$7$^$9!#$h$j8zN(E*$JZ$7!"8!>Z$N>c32$^$?$O9T$-5M$^$j$,H/@8$7$?>l9g$K$O!"A0$NCJ3,$KLa$j$^$9!#(J

PKIXBuilderParameters $B%*%V%8%'%/%H$N@8@.(J

PKIXBuilderParameters $B%*%V%8%'%/%H$N@8@.$O!"(JPKIXParameters $B%*%V%8%'%/%H$N@8@.$HF1MM$G$9!#(J $B$?$@$7!"(JPKIXBuilderParameters $B%*%V%8%'%/%H$r@8@.$9$k$H$-$K!"8F$S=P$7B&$O!"%?!<%2%C%H$^$?$O%(%s%I%(%s%F%#%F%#$N>ZL@=q$K@)Ls$r;XDj$9$kI,MW$,$"$j$^$9(J$B!#(J $B$3$l$i$N@)Ls$O!"%?!<%2%C%H$N>ZL@=q$rC5$9$N$K==J,$J>pJs$r(J CertPathBuilder $B$KDs6!$9$kI,MW$,$"$j$^$9!#(J $B@)Ls$O!"(JCertSelector $B%*%V%8%'%/%H$H$7$F;XDj$5$l$^$9!#(J $BPKIXBuilderParameters $B%*%V%8%'%/%H$r@8@.$7$^$9!#(J

	public PKIXBuilderParameters(Set trustAnchors,
		CertSelector targetConstraints)
		throws InvalidAlgorithmParameterException
	public PKIXBuilderParameters(KeyStore keystore,
		CertSelector targetConstraints)
		throws KeyStoreException, InvalidAlgorithmParameterException

$B%Q%i%a!<%?CM$N

PKIXBuilderParameters $B%/%i%9$O!"(JPKIXParameters $B%/%i%9$G@_Dj$G$-$k$9$Y$F$N%Q%i%a!<%?$r7Q>5$7$^$9!#(J $B$5$i$K!"(JsetMaxPathLength $B%a%=%C%I$r8F$S=P$7$F!">ZL@=q%Q%9Fb$N:GBg?t$N>ZL@=q$K@)8B$r@_Dj$9$k$3$H$b$G$-$^$9!#(J

	public void setMaxPathLength(int maxPathLength)

maxPathLength $B%Q%i%a!<%?$O!">ZL@=q%Q%9$KB8:_$G$-$kHs<+F0H/9T$NCf4V>ZL@=q$N:GBg?t$r;XDj$7$^$9!#(J PKIX $B%"%k%4%j%:%`$rCertPathBuilder $B%$%s%9%?%s%9$G$O!";XDj$5$l$?D9$5$h$j$bD9$$%Q%9$r9=C[$9$k$3$H$O$G$-$^$;$s!#(J $BCM$,(J 0 $B$N>l9g!"%Q%9$OC10l$N>ZL@=q$@$1$r4^$`$3$H$,$G$-$^$9!#(J $BCM$,(J $BK(J $B$N>l9g!"%Q%9$ND9$5$O@)Ls$re8B$O$J$$(J)$B!#(J $B:GBg%Q%9D9$r;XDj$7$J$+$C$?>l9g!"%G%U%)%k%H$N(J 5 $B$K$J$j$^$9!#$3$N%a%=%C%I$O!"8F$S=P$7B&$NMW5a$rK~$?$9$+$I$&$+$K$+$+$o$j$J$/!"(JCertPathBuilder $B$,D9$$%Q%9$r9=C[$9$k$N$K%j%=!<%9$*$h$S;~4V$rHq$d$5$J$$$h$&$K$9$k$?$a$KJXMx$G$9!#(J

$B%Q%9Fb$N(J CA $B>ZL@=q$K(J Basic Constraints $B3HD%5!G=$,4^$^$l$F$$$k>l9g!"7k2L$,$h$jC;$$>ZL@=q%Q%9$N;~$O!">o$K3HD%5!G=$N(J pathLenConstraint $B%3%s%]!<%M%s%H$NCM$G(J maxPathLength $B%Q%i%a!<%?$NCM$r%*!<%P!<%i%$%I$7$^$9!#(J $B$^$?!"BP1~$9$k(J getMaxPathLength $B%a%=%C%I$K$h$j!"$3$N%Q%i%a!<%?$r public int getMaxPathLength()

$B$^$?!"(JPKIXParameters $B%/%i%9$+$i7Q>5$5$l$?(J setCertStores $B%a%=%C%I$O!"DL>o!"(JCertPathBuilder $B$N(J PKIX $BZ$9$k$?$a$N(J CRL $B$N8!:w$@$1$G$J$/!"%Q%9$r9=C[$9$k$?$a$N>ZL@=q$N8!:w$K$b;HMQ$5$l$^$9!#(J $B$3$l$K$h$j!">ZL@=q$*$h$S(J CRL $B$N0LCV$r;XDj$9$k3HD%2DG=$J5!9=$,Ds6!$5$l$^$9!#(J

PKIXCertPathBuilderResult $B%/%i%9(J

$B$3$N%/%i%9(J (PKIXCertPathValidatorResult $B%/%i%9$r3HD%$7(J CertPathBuilderResult $B%$%s%?%U%'!<%9$rZL@=q%Q%99=C[%"%k%4%j%:%`$N7k2L$,@.8y$G$"$k$3$H$r<($7$^$9!#(JPKIX $B%"%k%4%j%:%`$rCertPathBuilder $B%*%V%8%'%/%H$N(J build $B%a%=%C%I$K$h$j!"(JPKIXCertPathBuilderResult $B$N%$%s%9%?%s%9$,JV$5$l$^$9!#(J

PKIXCertPathBuilderResult $B%$%s%9%?%s%9$N(J getCertPath $B%a%=%C%I$O!">o$K(J PKIX $B>ZL@=q%Q%9$N8!>Z%"%k%4%j%:%`$r;H$C$F8!>Z$5$l$?(J CertPath $B%*%V%8%'%/%H$rJV$7$^$9!#(J $BJV$5$l$?(J CertPath $B%*%V%8%'%/%H$K$O!"%Q%9$N8GDj$K;HMQ$5$l$F$$$?:G$b?.Mj$G$-$k(J CA $B>ZL@=q$,4^$^$l$^$;$s!#(J $BBe$o$j$K!"(JgetTrustAnchor $B%a%=%C%I$r;H$C$F!":G$b?.Mj$G$-$k(J CA $B$N(J Certificate $B$r

$B$3$N%/%i%9$N>\:Y$K$D$$$F$O!"(JPKIXCertPathBuilderResult $B$N(J API $B%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#(J

PKIX $B%"%k%4%j%:%`$r;H$C$?>ZL@=q%Q%9$N9=C[Nc(J

$B$3$l$O!"(JPKIX $B%"%k%4%j%:%`$K=>$C$F8!>Z$5$l$k>ZL@=q%Q%9$N9=C[Nc$G$9!#(J $BNc30=hM}!"$*$h$S(J CertStore $B$N@8@.MQ$K?.Mj$G$-$k%"%s%+!<$*$h$S>ZL@=q$N@8@.$9$k>l9g$J$I!"=|30$5$l$F$$$k>\:Y$b$"$j$^$9!#(J

$B$^$:!"CertPathBuilder $B$r@8@.$7$^$9!#(J

    CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX");

$B$3$N8F$S=P$7$O!"(JPKIX $B%"%k%4%j%:%`$K=>$C$F8!>Z$5$l$k%Q%9$rJV$9(J CertPathBuilder $B%*%V%8%'%/%H$r@8@.$7$^$9!#(J

$BPKIXBuilderParameters $B%*%V%8%'%/%H$r@8@.$7$^$9!#(J $B$3$l$O!"(JCertPathBuilder $B$K$h$j;HMQ$5$l$k(J PKIX $B%Q%i%a!<%?$N@8@.$K;HMQ$5$l$^$9!#(J

    // Create parameters object, passing it a Set of
    // trust anchors for anchoring the path
    // and a target subject DN.
    X509CertSelector targetConstraints = new X509CertSelector();
    targetConstraints.setSubject("CN=alice,O=xyz,C=us");
    PKIXBuilderParameters params =
        new PKIXBuilderParameters(trustAnchors, targetConstraints);

$BCertPathBuilder $B$,>ZL@=q$*$h$S(J CRL $B$N8!:w$K;HMQ$9$k(J CertStore $B$r;XDj$7$^$9!#(J $B$3$NNc$G$O!">ZL@=q$*$h$S(J CRL $B$r;HMQ$7$F(J Collection CertStore $B$r@8@.$7$^$9!#(J

    CollectionCertStoreParameters ccsp =
	new CollectionCertStoreParameters(certsAndCrls);
    CertStore store = CertStore.getInstance("Collection", ccsp);
    params.addCertStore(store);

$BZL@=q%Q%9$r9=C[$7$^$9!#(J

    try {
        PKIXCertPathBuilderResult result =
	    (PKIXCertPathBuilderResult) cpb.build(params);
        CertPath cp = result.getCertPath();
    } catch (CertPathBuilderException cpbe) {
	System.out.println("build failed: " + cpbe.getMessage());
    }

CertPathBuilder $B$O!";XDj$5$l$?%Q%i%a!<%?$rK~$?$9%Q%9$r9=C[$G$-$J$$>l9g!"(JCertPathBuilderException $B$r%9%m!<$7$^$9!#(J $B$=$&$G$J$$>l9g!"8!>Z$5$l$?>ZL@=q%Q%9$O!"(JgetCertPath $B%a%=%C%I$r;H$C$F(JPKIXCertPathBuilderResult $B$+$i


PKIXCertPathChecker $B%/%i%9(J

$B$3$3$G$O!"%f!<%6$,(J PIKX CertPathValidator $B$^$?$O(J CertPathBuilder $B

PKIXCertPathChecker $B%/%i%9$O!"(JX.509 $B>ZL@=q$G(J 1 $B$D0J>e$N%A%'%C%/$rCertPathValidator $B$^$?$O(J CertPathBuilder $Bl9g!"(JPKIXCertPathChecker $B%/%i%9$N8GDjPKIXCertPathChecker $B

PKIXParameters $B%/%i%9$N(J setCertPathCheckers $B%a%=%C%I$r;HMQ$9$k$H!"%f!<%6$O(J PKIXCertPathChecker $B%*%V%8%'%/%H$N(J List $B$r(J PKIX CertPathValidator $B$^$?$O(J CertPathBuilder $BPKIXCertPathChecker $B%*%V%8%'%/%H$O!"(JPKIX CertPathValidator $B$^$?$O(J CertPathBuilder $BZL@=q$4$H$K!"=g

PKIXCertPathChecker $B%*%V%8%'%/%H$N@8@.$*$h$S;HMQ(J

PKIXCertPathChecker $B%/%i%9$K$O!"(Jpublic $B%3%s%9%H%i%/%?$O$"$j$^$;$s!#(J PKIXCertPathChecker $B$N%$%s%9%?%s%9$N@8@.$OZL@=q$NC$7>uBV$N%A%'%C%/$K(J OCSP $B$r;HMQ$9$k(J PKIXCertPathChecker $B$*$h$S%]!<%H$rMW5a$G$-$^$9!#(J

	PKIXCertPathChecker checker = new OCSPChecker("ocsp.sun.com", 1321);

$B%A%'%C%+$N%$%s%9%?%s%9$,@8@.$5$l$k$H!"(JPKIXParameters $B%/%i%9$N(J addCertPathChecker $B%a%=%C%I$r;H$C$F!"%Q%i%a!<%?$H$7$FDI2C$G$-$^$9!#(J

	params.addCertPathChecker(checker);

$B$^$?!"%A%'%C%+$N(J List $B$O!"(JPKIXParameters $B%/%i%9$N(J setCertPathCheckers $B%a%=%C%I$r;H$C$FDI2C$G$-$^$9!#(J

PKIXCertPathChecker $B%*%V%8%'%/%H$N

PKIXCertPathChecker $B%/%i%9$O!"Cj>]%/%i%9$G$9!#(J $B$3$N%/%i%9$K$O(J 4 $B$D$N%a%=%C%I(J (check$B!"(JgetSupportedExtensions$B!"(Jinit$B!"$*$h$S(J isForwardCheckingSupported) $B$,$"$j!"$9$Y$F$N8GDj%5%V%/%i%9$O$3$l$i$r

PKIXCertPathChecker $B$Nl9g$HJ#;($J>l9g$,$"$j$^$9!#(J PKIXCertPathChecker $BuBV$N$J$$>l9g$H>uBV$N$"$k>l9g$,$"$j$^$9!#(J $B>uBV$N$J$$check $B%a%=%C%I$NO"B3$9$k8F$S=P$7$N4V$G!">uBV$,0];}$5$l$^$;$s!#(J $B$?$H$($P!"FCDj$N%]%j%7!<=$>~;R$r4^$`3F>ZL@=q$r3NG'$9$k(J PKIXCertPathChecker $B$O!">uBV$,$"$j$^$;$s!#(J $B$=$l$KBP$7$F!">uBV$N$"$kcheck $B%a%=%C%I$NO"B3$9$k8F$S=P$7$N4V$G!">uBV$r0];}$7$^$9!#(J $BDL>o!">uBV$N$"$kcheck $B%a%=%C%I$O!">ZL@=q%Q%9Fb$N0JA0$N>ZL@=q$NFbMF$K0MB8$7$^$9!#(J $B$?$H$($P!"3HD%>pJs$r=hM}$9$k(J PKIXCertPathChecker $B$O!">uBV$,$"$j$^$9!#(J

$B$^$?!"(JPKIXCertPathChecker $B$KDs6!$5$l$k(J ($BEO$5$l$k(J) $B%5!<%S%9%W%m%P%$%@ZL@=q$N=g=x$O!"uBV$,$"$k>l9g$OFC$K=EMW$G$9!#(J $B%5!<%S%9%W%m%P%$%@$,;HMQ$9$k%"%k%4%j%:%`$K$h$C$F$O!">ZL@=q$O!"!V5U!WJ}8~$^$?$O!V=g!WJ}8~$KEO$5$l$^$9!#(J $B5UJ}8~$H$O!">ZL@=q$,:G$b?.Mj$G$-$k(J CA ($BB8:_$9$k>l9g(J) $B$+$i%?!<%2%C%H$NZL@=q$,%?!<%2%C%H$NPKIXCertPathChecker $BZL@=q$N=hM}J}K!$rM}2r$G$-$k$h$&$K$9$k$?$a!"=g=x$rCN$i$;$kI,MW$,$"$j$^$9!#(J

PKIXCertPathChecker $B%*%V%8%'%/%H$N=i4|2=(J

init $B%a%=%C%I$O!"%A%'%C%+$NFbIt>uBV$r=i4|2=$7$^$9!#(J

	public abstract void init(boolean forward)

$B$9$Y$F$N>uBV$,$"$kuBV$r%/%j%"$^$?$O=i4|2=$9$kI,MW$,$"$j$^$9!#(J $B$3$&$9$l$P!"%5!<%S%9%W%m%P%$%@uBV$N%A%'%C%+$r8F$S=P$9$3$H$,$G$-$^$;$s!#(J $B$^$?!">uBV$N$"$k%A%'%C%+$O!"%$%s%9%?%s%9$r:FEY@8@.$7$J$/$F$b!"0J9_$NA`:n$G$=$l$r:FMxMQ$G$-$^$9!#(J forward $B%Q%i%a!<%?$O!"(JPKIXCertPathChecker $B$KEO$5$l$k>ZL@=q$N=g=x$r<($7$^$9!#(J forward $B$,(J true $B$G$"$k>l9g!">ZL@=q$O%?!<%2%C%H$+$i?.Mj$G$-$k%"%s%+!<$KEO$5$l!"(Jfalse $B$N>l9g!"?.Mj$G$-$k%"%s%+!<$+$i%?!<%2%C%H$KEO$5$l$^$9!#(J

$B=gJ}8~$N%A%'%C%/(J

isForwardCheckingSupported $B%a%=%C%I$O!"(JPKIXCertPathChecker $B$,=gJ}8~$N%A%'%C%/$r%5%]!<%H$9$k$+$I$&$+$r<($9(J boolean $B$rJV$7$^$9!#(J

	public abstract boolean isForwardCheckingSupported()

$B$9$Y$F$N(J PKIXCertPathChecker $B$B!#(J PKIXCertPathChecker $B$B!#(J

$B=gJ}8~$N%A%'%C%/$r%5%]!<%H$9$k$H!"%Q%9$,9=C[;~$K%A%'%C%/$5$l$k$N$G!"=gJ}8~$K9=C[$9$k(J CertPathBuilder $B$N8zN($,8~>e$7$^$9!#(J $B$?$@$7!">uBV$N$"$k(J PKIXCertPathChecker $B$G$O!"=gJ}8~%A%'%C%/$N%5%]!<%H$,Fq$7$$$+!"$^$?$OIT2DG=$J>l9g$,$"$j$^$9!#(J

$B%5%]!<%H$5$l$k3HD%>pJs(J

getSupportedExtensions $B%a%=%C%I$O!"(JPKIXCertPathChecker $BpJs$NITJQ$N(J OID String $B$N(J Set $B$rJV$7$^$9!#(J

	public abstract Set getSupportedExtensions()

$B3HD%>pJs$,=hM}$5$l$J$$>l9g!"%a%=%C%I$O(J null $B$rJV$9I,MW$,$"$j$^$9!#(J $B$9$Y$F$Ncheck $B%a%=%C%I$,=hM}$9$k(J OID String $B$N(J Set $B$rJV$9I,MW$,$"$j$^$9!#(J

CertPathBuilder $B$O!"$3$N>pJs$r;H$C$F!"=gJ}8~$N%A%'%C%/$r%5%]!<%H$7$J$$(J PKIXCertPathChecker $B$G=gJ}8~$N9=C[$rpJs$r4^$`>ZL@=q$r<1JL$9$k$3$H$,$G$-$^$9!#(J

$B%A%'%C%/$N

$BZL@=q$KBP$9$k%A%'%C%/$r

	public abstract void
	        check(Certificate cert, Collection unresolvedCritExts)
        	throws CertPathValidatorException

unresolvedCritExts $B%Q%i%a!<%?$K$O!"(JOID $B$N%3%l%/%7%g%s$,(J String $B$H$7$F4^$^$l$F$$$^$9!#(J $B$3$l$i$N(J OID $B$O!"$^$@>ZL@=q%Q%9$N8!>Z%"%k%4%j%:%`$G2rZL@=qFb$N=EMW$J3HD%>pJs$N%;%C%H$rI=$7$^$9!#(J check $B%a%=%C%I$N8GDjunresolvedCrit.Exts $B%Q%i%a!<%?$+$i=hM}$9$k$9$Y$F$N=EMW$J3HD%>pJs$r:o=|$9$kI,MW$,$"$j$^$9!#(J

$B>ZL@=q$,3NG'$K9g3J$7$J$$>l9g!"(JCertPathValidatorException $B$,%9%m!<$5$l$kI,MW$,$"$j$^$9!#(J

PKIXCertPathChecker $B$NJ#@=(J

PKIXCertPathChecker $B%/%i%9$O!"(JCloneable $B%$%s%?%U%'!<%9$ruBV$N$"$k(J PKIXCertPathChecker $Bclone $B%a%=%C%I$r%*!<%P!<%i%$%I$9$kI,MW$,$"$j$^$9!#(J clone $B%a%=%C%I$N%G%U%)%k%H$NObject.clone $B%a%=%C%I$r8F$S=P$7$^$9!#$3$N%a%=%C%I$O!"85$N%*%V%8%'%/%H$N$9$Y$F$N%U%#!<%k%I$r?7$7$$%*%V%8%'%/%H$K%3%T!<$9$k$3$H$K$h$j!"4JC1$JJ#@=$ruBV$N$J$$clone $B%a%=%C%I$r%*!<%P!<%i%$%I$7$^$;$s!#(J $B$?$@$7!"$9$Y$F$N>uBV$N$"$kclone $B%a%=%C%I$,@5$7$$$3$H$r3NG'$7!"I,MW$K1~$8$F$=$l$r%*!<%P!<%i%$%I$9$kI,MW$,$"$j$^$9!#(J $B$?$H$($P!"G[NsFb$N>uBV$r3JG<$9$k(J PKIXCertPathChecker $B$O!"G[Ns$r;2>H$9$k$@$1$G$O$J$/!"G[Ns$N%3%T!<$r:n@.$9$k$?$a!"(Jclone $B%a%=%C%I$r%*!<%P!<%i%$%I$9$kI,MW$,$"$j$^$9!#(J

PKIXCertPathChecker $B%*%V%8%'%/%H$,(J Cloneable $B$G$"$kM}M3$O!"@x:_E*$J>ZL@=q%Q%9$,9T$-5M$^$C$?$j!">c32%]%$%s%H$KE~C#$7$?>l9g!"(JCertPathBuilder $Bl9g!"Z>uBV$rI|85$9$k$3$H$,$G$-$^$9!#(J

$BNc(J

$B$3$l$O!">uBV$N$J$$(J PKIXCertPathChecker $BpJs$,>ZL@=q$KB8:_$9$k$+$I$&$+$r%A%'%C%/$7!"$$$/$D$+$N5,B'$K=>$C$F=hM}$7$^$9!#(J

	import java.security.cert.Certificate;
	import java.security.cert.X509Certificate;
	import java.util.Collection;
	import java.util.Collections;
	import java.util.Set;
	import java.security.cert.PKIXCertPathChecker;
	import java.security.cert.CertPathValidatorException;

	public class MyChecker extends PKIXCertPathChecker {
	    private static Set supportedExtensions =
	        Collections.singleton("2.16.840.1.113730.1.1");

	    /*
 	     * Initialize checker
	     */
	    public void init(boolean forward)
		throws CertPathValidatorException {
		// nothing to initialize
	    }

	    public Set getSupportedExtensions() {
		return supportedExtensions;
	    }

	    public boolean isForwardCheckingSupported() {
		return true;
	    }

	    /*
	     * Check certificate for presence of Netscape's
	     * private extension
	     * with OID "2.16.840.1.113730.1.1"
	     */
	    public void check(Certificate cert,
			      Collection unresolvedCritExts)
		throws CertPathValidatorException
	    {
		X509Certificate xcert = (X509Certificate) cert;
	        byte[] ext =
		    xcert.getExtensionValue("2.16.840.1.113730.1.1");
		if (ext == null)
		    return;

		//
	        // process private extension according to some
		// rules - if check fails, throw a
		// CertPathValidatorException ...
		// {insert code here}

		// remove extension from collection of unresolved
		// extensions (if it exists)
		if (unresolvedCritExts != null)
		    unresolvedCritExts.remove("2.16.840.1.113730.1.1");
	    }
	}

PKIX $B%5!<%S%9%W%m%P%$%@

$B3F(J PKIXCertPathChecker $B%*%V%8%'%/%H$O!"9=C[$^$?$O8!>Z%"%k%4%j%:%`$r3+;O$9$kA0$K!"%5!<%S%9%W%m%P%$%@

	List checkers = params.getCertPathCheckers();
	ListIterator li = checkers.listIterator();
	while (li.hasNext()) {
	    PKIXCertPathChecker checker = (PKIXCertPathChecker) li.next();
	    checker.init(false);
	}

$B8!>Z$9$k>ZL@=q$4$H$K!"%5!<%S%9%W%m%P%$%@PKIXCertPathChecker $B%*%V%8%'%/%H$N(J check $B%a%=%C%I$r=g$K8F$S=P$7!">ZL@=q$*$h$S;D$j$N2rpJs$KEO$7$^$9!#(J

	ListIterator li = checkers.listIterator();
	while (li.hasNext()) {
	    PKIXCertPathChecker checker = (PKIXCertPathChecker) li.next();
	    checker.check(cert, unresolvedCritExts);
	}

check $B$N$I$l$+$,(J CertPathValidatorException $B$r%9%m!<$9$k>l9g!"(JCertPathValidator $BZCertPathBuilder $Bc32$r5-O?$7!"0z$-B3$-$=$NB>$N@x:_E*$J%Q%9$rC5$9>l9g$,$"$j$^$9!#(J $B%5!<%S%9%W%m%P%$%@check $B$,@.8y$7$?>l9g!"2rpJs$r%A%'%C%/$7$^$9!#$=$&$G$J$$>l9g!"<:GT$7$?8!>Z$K$D$$$F8!F$$9$kI,MW$,$"$j$^$9!#(J $BNc$r<($7$^$9!#(J

	if (unresolvedCritExts != null &&
	    !unresolvedCritExts.isEmpty())
	{
            // note that a CertPathBuilder may have an enclosing
            // try block to catch the exception below and continue on error
	    throw new CertPathValidatorException
		("Unrecognized Critical Extension");
	}

$BA0$N%;%/%7%g%s$G@bL@$7$?$h$&$K!"ZL@=q%Q%9$,9T$-5M$^$C$?$j!">c32%]%$%s%H$K$*$h$s$@>l9g$O!"La$kI,MW$,$"$j$^$9!#(J $B$3$3$GLa$k$H$$$&$N$O!"%Q%9Fb$N0JA0$N>ZL@=q$KLa$j!"$=$NB>$N@x:_E*$J%Q%9$rC5$9$3$H$r0UL#$7$^$9!#(J CertPathBuilder $BZ$9$k>l9g!"3F(J PKIXCertPathChecker $B$N0JA0$N>uBV$rI|85$9$kI,MW$,$"$j$^$9!#(J$B$3$l$r9T$&$K$O!"3F>ZL@=q$,=hM}$5$l$kA0$K!"(JPKIXCertPathChecker $B%*%V%8%'%/%H$rJ#@=$7$^$9!#Nc$r

	/* clone checkers */
	List newList = new ArrayList(checkers);
	ListIterator li = newList.listIterator();
	while (li.hasNext()) {
	    PKIXCertPathChecker checker = (PKIXCertPathChecker) li.next();
	    li.set(checker.clone());
	}

$B%5!<%S%9%W%m%P%$%@$N

$B$3$N%;%/%7%g%s$O!">ZL@=q%Q%9%5!<%S%9e5i%W%m%0%i%^$rBP>]$H$7$F$$$^$9!#(J $B$3$N%;%/%7%g%s$N5-=R$O!"(J$B!V(JJava $B0E9f2=%"!<%-%F%/%A%cMQ%W%m%P%$%@$N$B$r$9$G$KFI$s$G$$$k$3$H$rA0Ds$H$7$F$$$^$9!#(J

Java Certification Path API $B$G$O!"

  • CertPathValidator - $B>ZL@=q%Q%9$N8!>Z$K;HMQ$5$l$k(J

  • CertPathBuilder - $B>ZL@=q%Q%9$N9=C[$K;HMQ$5$l$k(J

  • CertStore - $B%j%]%8%H%j$+$i>ZL@=q$*$h$S(J CRL $B$r

$B$5$i$K!"4{B8$N(J CertificateFactory $B%(%s%8%s%/%i%9$O!"(JJ2SDK, v1.4 $B$G3HD%$5$l$F$*$j!">ZL@=q%Q%9$N@8@.$r%5%]!<%H$7$^$9!#(J

$B%(%s%8%s%/%i%9$,Ds6!$9$k%"%W%j%1!<%7%g%s%$%s%?%U%'!<%9$O!"!V(JService Provider Interface (SPI)$B!W$H$7$FA0$O!"BP1~$9$k%(%s%8%s%/%i%9L>$N$"$H$K!V(JSpi$B!W$rDI2C$7$?L>A0$K$J$j$^$9!#(J $B$?$H$($P!"(JCertPathValidator $B%(%s%8%s%/%i%9$KBP1~$9$k(J SPI $B%/%i%9$O!"(JCertPathValidatorSpi $B%/%i%9$G$9!#(J $B3F(J SPI $B%/%i%9$O!"Cj>]%/%i%9$G$9!#(J $B8D!9$N%"%k%4%j%:%`$^$?$O7?$K$D$$$F!"FCDj$N7?$N%5!<%S%9$N]%a%=%C%I$NCertStore $B%/%i%9$O!">ZL@=q$*$h$S(J CRL $B$r%j%]%8%H%j$+$iCertStoreSpi $B%5%V%/%i%9$GDs6!$5$l$kZL@=q%j%]%8%H%j$N$?$a$N

$B%W%m%P%$%@$N

$B3+H/$B!V(JJava $B0E9f2=%"!<%-%F%/%A%cMQ%W%m%P%$%@$N$B%I%-%e%a%s%H(J$B$K<($5$l$?%9%F%C%W(J$B$K=>$&I,MW$,$"$j$^$9!#(J $B$3$3$G$O!"FCDj$N%9%F%C%W$rJdB-$9$k$$$/$D$+$NIU2CE*$J5,B'$K$D$$$F@bL@$7$^$9!#(J

    $B%9%F%C%W(J 3: $B%W%m%P%$%@$N%5%V%/%i%9$G$"$k!V%^%9%?!<%/%i%9!W$N5-=R(J

    $BZL@=q%Q%9%5!<%S%9MQ$KDj5A$9$kI,MW$,$"$j$^$9!#>ZL@=q%Q%9%5!<%S%9$G$O!"%"%k%4%j%:%`L>$O(J algName $B$KCV$-49$($i$l!"(Jcertstore $B7?$O(J storeType $B$KCV$-49$($i$l$^$9!#(J

    • CertPathValidator.algName

    • CertPathBuilder.algName

    • CertStore.storeType

    algName $B$*$h$S(J storeType $B$KDj5A$5$l$kI8=`L>$K$D$$$F$O!"(J$BIUO?(J A $B$r;2>H$7$F$/$@$5$$!#(J $B3F%W%m%Q%F%#$NCM$O!";XDj$5$l$?%"%k%4%j%:%`$r~L>!"!"$^$?$O(J certstore $B7?$G$"$kI,MW$,$"$j$^$9!#(J $B$D$^$j!"%/%i%9L>$N8e$K%T%j%*%I$H%Q%C%1!<%8L>$,5-=R$5$l$F$$$J$1$l$P$J$j$^$;$s!#(J $B$?$H$($P!"%W%m%P%$%@$O!"CertPathValidator.PKIX $B%W%m%Q%F%#$r@_Dj$7!"CM!V(Jsun.security.provider.certpath.PKIXCertPathValidator$B!W$rJ];}$7$^$9!#(J

    put("CertPathValidator.PKIX", "sun.security.provider.certpath.PKIXCertPathValidator")

    $B$5$i$K!"%5!<%S%9B0@-$r>ZL@=q%Q%9%5!<%S%9MQ$KDj5A$9$k$3$H$,$G$-$^$9!#(J $B$3$l$i$NB0@-$O!"%5!<%S%9%W%m%P%$%@$rA*Br$9$k$?$a$N%U%#%k%?$H$7$F;HMQ$G$-$^$9!#(J $BI8=`$N%5!<%S%9B0@-$NDj5A$K$D$$$F$O!"IUO?(J A $B$r;2>H$7$F$/$@$5$$!#(J $B$?$H$($P!"%W%m%P%$%@$,(J ValidationAlgorithm $B%5!<%S%9B0@-$r(J PKIX $B8!>Z%"%k%4%j%:%`$rDj5A$9$k;EMM$^$?$O(J RFC $B$NL>A0$K@_Dj$7$F$$$k>l9g$,$"$j$^$9!#(J

    put("CertPathValidator.PKIX ValidationAlgorithm", "RFC2459");

    $B%9%F%C%W(J 8: $B%W%m%P%$%@$*$h$S$=$N%5%]!<%HBP>]%5!<%S%9$N%I%-%e%a%s%H2=(J

    $B>ZL@=q%Q%9%5!<%S%9%W%m%P%$%@$O!"(JSPI $B$4$H$KpJs$r%I%-%e%a%s%H2=$9$kI,MW$,$"$j$^$9!#(J

      $B>ZL@=q%U%!%/%H%j(J

      $B%W%m%P%$%@$O!"%U%!%/%H%j$,:n@.$G$-$k>ZL@=q%Q%9$NZL@=q$N%P!<%8%g%sHV9f(J) $B$r%I%-%e%a%s%H2=$9$kI,MW$,$"$j$^$9!#(J $B%W%m%P%$%@$O!"FbMF$@$1$G$J$/!">ZL@=q%Q%9$N>ZL@=q$N=g=x$r5-=R$9$kI,MW$,$"$j$^$9!#(J

      $B%W%m%P%$%@$O!"%5%]!<%H$5$l$F$$$kId9f2=7A<0$N%j%9%H$r%I%-%e%a%s%H2=$9$kI,MW$,$"$j$^$9!#(J $B%/%i%$%"%s%H$O(J getCertPathEncodings $B%a%=%C%I$r8F$S=P$7$FId9f2=7A<0$rMW5a$G$-$k$N$G!"5;=QE*$K$O$3$N:n6H$OI,MW$"$j$^$;$s!#(J $B$?$@$7!"%I%-%e%a%s%H$K$O3FId9f2=7A<0$K$D$$$F>\:Y$K5-=R$7!"3:Ev$9$k>l9g$O!"I8=`$K$D$$$F8@5Z$9$kI,MW$,$"$j$^$9!#(J

      $B>ZL@=q%Q%9$N8!>Z(J

      $B%W%m%P%$%@$O!"8!>Z$9$k>ZL@=q%Q%9$NCertPathValidator $BpJs$r%I%-%e%a%s%H2=$9$kI,MW$,$"$j$^$9!#(J $BFC$K!"(JPKIX CertPathValidator $BpJs$r%I%-%e%a%s%H2=$9$kI,MW$,$"$j$^$9!#(J

      • $B=`5r$7$?(J RFC $B$^$?$O;EMM(J
      • $B>ZL@=q$,C$5$l$F$$$J$$$3$H$r%A%'%C%/$9$k$?$a$K;HMQ$9$k5!9=(J
      • $BG'<1$9$k%*%W%7%g%s$N>ZL@=q$^$?$O(J CRL $B3HD%5!G=!"$*$h$S$=$l$i$r=hM}$9$kJ}K!(J

      $B>ZL@=q%Q%9$N9=C[(J

      $B%W%m%P%$%@$O!":n@.$9$k>ZL@=q%Q%9$NZ$5$l$F$$$k$+$I$&$+$J$I!"(JCertPathBuilder $BpJs$r%I%-%e%a%s%H2=$9$kI,MW$,$"$j$^$9!#(J $BFC$K!"(J PKIX CertPathBuilder $BpJs$r%I%-%e%a%s%H2=$9$kI,MW$,$"$j$^$9!#(J

      • $B=`5r$7$?(J RFC $B$^$?$O;EMM(J
      • $B>ZL@=q$,C$5$l$F$$$J$$$3$H$r%A%'%C%/$9$k$?$a$K;HMQ$9$k5!9=(J
      • $BG'<1$9$k%*%W%7%g%s$N>ZL@=q$^$?$O(J CRL $B3HD%5!G=!"$*$h$S$=$l$i$r=hM}$9$kJ}K!(J
      • $B>ZL@=q%Q%9$N8!:w$K;HMQ$9$k%"%k%4%j%:%`$N>\:Y!#(J $BNc(J: $B?<$5M%@h!"I}M%@h!"=gJ}8~(J ($B$D$^$j!"%?!<%2%C%H$+$i?.Mj$G$-$k%"%s%+!<$X(J)$B!"5UJ}8~(J ($B$D$^$j!"?.Mj$G$-$k%"%s%+!<$+$i%?!<%2%C%H$X(J)
      • $B@x:_E*$J>ZL@=q$NA*Br$*$h$S%=!<%H$K;HMQ$5$l$k%"%k%4%j%:%`!#(J $B$?$H$($P!"%Q%9Fb$KZL@=q$N8uJd$K$J$j$&$k(J 2 $B$D$N>ZL@=q$,$"$k>l9g!"0lJ}$r@h$KA*Br$9$k$?$a$K$I$N>r7o$r;HMQ$9$k$+!#(J $B>ZL@=q$N5qH]$K$I$N>r7o$r;HMQ$9$k$+(J
      • $B3:Ev$9$k>l9g!"JL$N%Q%9$KLa$k!"$^$?$OJL$N%Q%9$r9=C[$9$k:]$K;HMQ$9$k%"%k%4%j%:%`(J ($B$D$^$j!"@x:_E*$J%Q%9$,@)Ls$KE,9g$7$J$$>l9g(J)
      • $B%F%9%H:Q$_$N(J CertStore $BCertStore $B7?$G$bF0:n$9$k$h$&$K@_7W$5$l$F$$$kI,MW$,$"$k$,!"$=$l$G$b$J$*$3$N>pJs$,LrN)$D$3$H$,$"$k(J

      $B$9$Y$F$N(J CertPathBuilder $BpJs$X$N%"%/%;%9J}K!$N>\:Y$K$D$$$F$O!"%I%-%e%a%s%H2=$5$l$F$$$kI,MW$,$"$j$^$9!#(J

      $B>ZL@=q(J/CRL $B%9%H%"(J

      $B%W%m%P%$%@$O!"(JCertStore $B$K$h$C$FZL@=q$*$h$S(J CRL $B$N

      $B$^$?!"%W%m%P%$%@$O!"(JCertStore $BpJs(J ($B;HMQ$5$l$k%W%m%H%3%k$^$?$O%5%]!<%H$5$l$k7A<0$J$I(J) $B$r%I%-%e%a%s%H2=$9$kI,MW$,$"$j$^$9!#(J $B$?$H$($P!"(JLDAP CertStore $BZL@=q$*$h$S(J CRL $B$N8!:w$K;HMQ$5$l$k$N$+$r5-=R$9$kI,MW$,$"$j$^$9!#(J $B$^$?!"r7o(J) $B$r%I%-%e%a%s%H2=$9$kI,MW$,$"$j$^$9!#(J

      $BZL@=q$*$h$S(J CRL $B$rJV$9>l9g!"%=!<%H%"%k%4%j%:%`$r5-=R$9$kI,MW$,$"$j$^$9!#(J $B$^$?!"
      $B:G8e$K!"ZL@=q$*$h$S(J CRL $B$N8!:w$K!"(JCertSelector $B$^$?$O(J CRLSelector $B%*%V%8%'%/%H$N>pJs$r;HMQ$9$k$+$I$&$+!"$*$h$S$=$NJ}K!$r%I%-%e%a%s%H2=$9$kI,MW$,$"$j$^$9!#(J

$B%5!<%S%9$NAj8_0MB8@-(J

$B$3$3$G$O!">ZL@=q%Q%9%5!<%S%9

    $B>ZL@=q%Q%9$N8!>Z$*$h$S=pL>%"%k%4%j%:%`(J

    CertPathValidator $BZL@=q$N%G%8%?%k=pL>$r8!>Z$9$k$?$a!"=pL>%"%k%4%j%:%`$N;HMQ$rMW5a$9$k>l9g$,$"$j$^$9!#(J PKIXParameters $B%/%i%9$N(J setSigProvider $B%a%=%C%I$K$h$j!"%f!<%6$OFCDj$N(J Signature $B%W%m%P%$%@$r;XDj$G$-$^$9!#(J

    $B>ZL@=q%Q%9$N9=C[$*$h$S>ZL@=q%U%!%/%H%j(J

    CertPathBuilder $BZL@=q$N%j%9%H$+$i>ZL@=q%Q%9$r@8@.$9$k$?$a!"(JCertificateFactory $B$r;HMQ$9$k>l9g$,$"$j$^$9!#(J

    CertStores $B$*$h$S>ZL@=q%U%!%/%H%j(J

    CertStore $BZL@=q$*$h$S(J CRL $B$rId9f2=$+$i@8@.$9$k$?$a!"(JCertificateFactory $B$r;HMQ$9$k$3$H$,$"$j$^$9!#(J $B$?$H$($P!"(JLDAP CertStore $BCertificateFactory $B$r;HMQ$7$F!"(JASN.1 $BId9f2=7A<0$+$i(J X.509 $B>ZL@=q$*$h$S(J CRL $B$r@8@.$7$^$9!#(J  

$B>ZL@=q%Q%9%Q%i%a!<%?;EMM$N%$%s%?%U%'!<%9(J

Certification Path API $B$K$O!"%Q%i%a!<%?$NF)2aE*$J(J$B;EMM$rI=$9(J CertPathParameters $B$*$h$S(J CertStoreParameters $B$H$$$&(J 2 $B$D$N%$%s%?%U%'!<%9$,4^$^$l$F$$$^$9!#(J

CertPathParameters $B%$%s%?%U%'!<%9$N(J 2 $B$D$NPKIXParameters $B$*$h$S(J PKIXBuilderParameters $B%/%i%9$,4^$^$l$F$$$^$9!#(J PKIX $B>ZL@=q%Q%9$N8!>Z$*$h$S%"%k%4%j%:%`%Q%i%a!<%?$r;H$C$F:n6H$9$k>l9g!"$3$l$i$N%/%i%9$rMxMQ$G$-$^$9!#(J $B%"%k%4%j%:%`$4$H$K%Q%i%a!<%?$,I,MW$J>l9g$O!"$=$N%"%k%4%j%:%`$KFH<+$N(J CertPathParameters $B

CertStoreParameters $B%$%s%?%U%'!<%9$K$O!"(JLDAPCertStoreParameters $B$*$h$S(J CollectionCertStoreParameters $B%/%i%9$H$$$&(J 2 $B$D$NCertStore $Bl9g$O!"$=$N7?$NFH<+$N(J CertStoreParameters $BCertPathParameters $B$*$h$S(J CertStoreParameters $B%$%s%?%U%'!<%9$O!"$=$l$>$lclone $B%a%=%C%I$rDj5A$7$^$9!#(J $BI8=`E*$Jl9g$bF1MM(J) $B$7$^$9!#(J $B$?$@$7!"$3$l$O!"(JCertStoreParameters $B$Nclone $B$N@u$$%3%T!<CertStoreParameters $B$K4^$^$l$k%Q%i%a!<%?$N;2>H$r0];}$9$kI,MW$,$"$k%"%W%j%1!<%7%g%s$KE,$7$F$$$^$9!#(J $B$?$H$($P!"(JCertStore.getInstance $B$O;XDj$5$l$?(J CertStoreParamter $B$NJ#@=$r:n@.$9$k$N$G!"%"%W%j%1!<%7%g%s$O%,%Y!<%8%3%l%/%7%g%s5!9=$rBT$D$N$G$O$J$/!"(Jclone $B$N@u$$%3%T!<$r;H$C$FFCDj$N(J CertStore $B=i4|2=%Q%i%a!<%?$N%j%=!<%9$X$N;2>H$r0];}$7!"8e$G%j%j!<%9$9$k$3$H$,$G$-$^$9!#(J CertStore $B$,$=$NB>$N%9%l%C%I$K$h$C$F;HMQ$5$l$F$$$k$3$H$,$"$k$N$G!"$3$NA`:n$O:Y?4$NCm0U$rJ'$C$F9T$&I,MW$,$"$j$^$9!#(J

$B>ZL@=q%Q%9$N7k2L$N;EMM%$%s%?%U%'!<%9(J

Certification Path API $B$K$O!"7k2L$NF)2aE*$J(J$B;EMM$rI=$9(J CertPathValidatorResult $B$*$h$S(J CertPathBuilderResult $B$H$$$&(J 2 $B$D$N%$%s%?%U%'!<%9$,4^$^$l$^$9!#(J

$B3F%$%s%?%U%'!<%9$N$l(J PKIXCertPathValidatorResult $B$*$h$S(J PKIXCertPathBuilderResult $B%/%i%9$,4^$^$l$^$9!#(J PKIX $B>ZL@=q%Q%9%5!<%S%9%W%m%P%$%@$rl9g!"$3$l$i$N%/%i%9$r;HMQ$9$k$3$H$,$G$-$^$9!#(J $BJL$N%"%k%4%j%:%`$G>ZL@=q%Q%9$N7k2L$,I,MW$J>l9g$O!"$=$N%"%k%4%j%:%`$KFH<+$N(J CertPathValidatorResult $B$^$?$O(J CertPathBuilderResult $B

CertPathValidator $B$^$?$O(J CertPathBuilder $B$N(JPKIX $BPKIXCertPathValidatorResult $B$^$?$O(J PKIXCertPathBuilderResult $B$NDI2C>pJs$r3JG<$9$k$3$H$,M-MQ$J>l9g$,$"$j$^$9!#(J $B$3$N>l9g!"pJs$r

$B>ZL@=q%Q%9$NNc30%/%i%9(J

Certification Path API $B$K$O!"%(%i!<$r=hM}$9$kNc30%/%i%9$N%;%C%H$,4^$^$l$F$$$^$9!#(J CertPathValidatorException$B!"(JCertPathBuilderException$B!"$*$h$S(J CertStoreException $B$O!"(JGeneralSecurityException $B$N%5%V%/%i%9$G$9!#(J

$B%5!<%S%9%W%m%P%$%@l9g$,$"$j$^$9!#(J $B$?$H$($P!"(JCertPathBuilder $BCertPathBuilderException $B$,%9%m!<$5$l$k$H$-$K!"%G%P%C%0%H%l!<%9$J$I$NDI2C>pJs$rDs6!$7$^$9!#(J $BpJs$rJ];}$9$k(J CertPathBuilderException $B$N%5%V%/%i%9$r%9%m!<$7$^$9!#(J $BF1MM$K!"(JCertStore $BCertStoreException $B$N%5%V%/%i%9$r%9%m!<$9$k$3$H$K$h$j>c32$,H/@8$7$?>l9g!"DI2C>pJs$rDs6!$G$-$^$9!#(J $B$^$?!"(JCertPathValidator $Bc32%b!<%I$K$D$$$F5-=R$9$k$?$a!"(JCertPathValidatorException $B$N%5%V%/%i%9$r
$B$I$A$i$N>l9g$b!"?7$7$$Nc30%/%i%9$O%W%m%P%$%@%/%i%9$H$H$b$K(J ($B$?$H$($P!"%W%m%P%$%@(J JAR $B%U%!%$%k$N0lIt$H$7$F(J) $BDs6!$5$l$kI,MW$,$"$j$^$9!#(J $B3F%W%m%P%$%@$O!"Nc30%5%V%/%i%9$r%I%-%e%a%s%H2=$9$kI,MW$,$"$j$^$9!#(J

TrustAnchor $B%/%i%9(J

$BA0=R$N$h$&$K!"(JPKIX CertPathValidator $B$^$?$O(J CertPathBuilder $B$O!"(JTrustAnchor $B%/%i%9$N(J nameConstraints $B%Q%i%a!<%?$r%5%]!<%H$9$kI,MW$O$"$j$^$;$s!#(J $Bl9g!"(JInvalidAlgorithmParameterException $B$r%9%m!<$9$kI,MW$,$"$j$^$9!#(J

$BIUO?(J A: $BI8=`L>(J

Java Certification Path API $B$G$O!">ZL@=q%Q%9$N8!>Z%"%k%4%j%:%`!"Id9f2=$*$h$S>ZL@=q%9%H%l!<%8%?%$%W$K$D$$$F!"I8=`L>$N%;%C%H$rI,MW$H$7!"$=$l$i$r;HMQ$7$^$9!#(J $B$3$N(J API $B$G$O!"!V(JJava $B0E9f2=%"!<%-%F%/%A%c(J API $B;EMM$*$h$S%j%U%!%l%s%9!W$N(J$BIUO?(J A $B$GDj5A$5$l$F$$$kI8=`L>$N%j%9%H$rJdB-$7$^$9!#(J $B%"%k%4%j%:%`L>$O!"Hf3S$N:]$KBgJ8;z$H>.J8;z$,6hJL$5$l$J$$$3$H$KCm0U$7$F$/$@$5$$!#(J

$B%5!<%S%9%W%m%P%$%@$O!"0J2<$K=R$Y$i$l$F$$$J$$FH<+$N%"%k%4%j%:%`$^$?$OHsI8=`$N%"%k%4%j%:%`$K?7$7$$L>A0$rDj5A$9$k$3$H$b$G$-$^$9!#(J $B$?$@$7!"L>A0$N>WFM$rKI;_$9$k$?$a!"%W%m%P%$%@$NAH?%$N%$%s%?!<%M%C%H%I%a%$%sL>$r5U$K$7$?$b$N(J (com.sun.MyCertPathValidator $B$J$I(J) $B$rL>A0$NA0$KIU$1$k$3$H$r$*4+$a$7$^$9!#(J

CertPathValidator $B%"%k%4%j%:%`(J

$B$3$N%;%/%7%g%s$N%"%k%4%j%:%`L>$O!"(JCertPathValidator $B$N%$%s%9%?%s%9$N@8@.;~$K;XDj$G$-$^$9!#(J

PKIX: ValidationAlgorithm $B%5!<%S%9B0@-(J$B$GDj5A$5$l$F$$$k(J PKIX $B>ZL@=q%Q%9$N8!>Z%"%k%4%j%:%`!#(J

CertPathBuilder $B%"%k%4%j%:%`(J

$B$3$N%;%/%7%g%s$N%"%k%4%j%:%`L>$O!"(JCertPathBuilder $B$N%$%s%9%?%s%9$N@8@.;~$K;XDj$G$-$^$9!#(J

PKIX: ValidationAlgorithm $B%5!<%S%9B0@-(J$B$GDj5A$5$l$F$$$k(J PKIX $B>ZL@=q%Q%9$N8!>Z%"%k%4%j%:%`!#(J $B$3$N%"%k%4%j%:%`$rCertPathBuilder $B%$%s%9%?%s%9$N=PNO$O!"(JPKIX $B8!>Z%"%k%4%j%:%`$K=>$C$F8!>Z$5$l$?>ZL@=q%Q%9$G$9!#(J

CertStore $B$N7?(J

$BCertStore $B$N%$%s%9%?%s%9$N@8@.;~$K;XDj$G$-$^$9!#(J

LDAP: LDAPSchema $B%5!<%S%9B0@-(J$B$KDj5A$5$l$F$$$k%9%-!<%^$r;H$C$F!">ZL@=q$*$h$S(J CRL $B$r(J LDAP $B%G%#%l%/%H%j$+$i%U%'%C%A$9$k(J CertStore $BCollection: $B>ZL@=q$*$h$S(J CRL $B$r(J Collection $B$+$iCertStore $BCertStore $B$O!"=pL>IU$-%a!<%k%a%C%;!<%8$d(J SSL $B%M%4%7%(!<%7%g%s$J$I!"%P%C%0$^$?$O$"$kZL@=q$^$?$O(J CRL $B$r

CertPath $BId9f2=(J

$BCertPath $B$N(J getEncoded $B%a%=%C%I$^$?$O(J CertificateFactory $B$N(J generateCertPath(InputStream inStream, String encoding) $B%a%=%C%I$KEO$5$l$^$9!#(J

PKCS7: $B>ZL@=q$N=EMW$J%U%#!<%k%I$@$1$r;}$D(J PKCS#7 SignedData $B%*%V%8%'%/%H!#(J $BFC$K!"=pL>$*$h$SFbMF$OL5;k$5$l$^$9!#(J $B>ZL@=q$,B8:_$7$J$$>l9g!"D9$5$,(J 0 $B$N(J CertPath $B$G$"$k$H$_$J$5$l$^$9!#(J $B7Y9p(J: PKCS#7 $B$G$O!">ZL@=q%Q%9Fb$N>ZL@=q$N=g=x$O0];}$5$l$^$;$s!#(J $B$7$?$,$C$F!"(JCertPath $B$,(J PKCS#7 $B$GId9f2=$5$l$?%P%$%H$KJQ49$5$l$F$+$i!"85$KLa$5$l$?>l9g!">ZL@=q$N=g=x$,JQ99$5$l$?$j!"(JCertPath $B$,L58z$K$J$k>l9g$,$"$j$^$9!#(J $B%f!<%6$O!"$3$NF0:n$rCN$C$F$*$/I,MW$,$"$j$^$9!#(J

PkiPath: ASN 1 DER $B$GId9f2=$5$l$?>ZL@=q$N%7!<%1%s%9!#
PkiPath ::= SEQUENCE OF Certificate

$B%7!<%1%s%9Fb$G!">ZL@=q$O!":G=i$N>ZL@=q$NZL@=q$NH/9T85$H$$$&$h$&$J=g=x$K$J$j$^$9!#(JPkiPath $BFb$N3F>ZL@=q$O0l0U$G$9!#(J $B$I$N>ZL@=q$b!"(JPkiPath $BFb$N(J Certificate $B$NCM$K(J 1 $B2s$:$D8=$l$^$9!#(J PkiPath $B7A<0$O!"(JX.509 $B$KBP$9$k7g4Y%l%]!<%H(J 279 (2000) $BFb$GDj5A$5$l$F$*$j!"(JX.509 $B$N(J Draft Technical Corrigenda 2$B!"Bh(J 4 $BHG(J (2000) $B$KAH$_9~$^$l$F$$$^$9(J
(ftp://ftp.bull.com/pub/OSIdirectory/DefectResolution/DraftTechnicalCorrigenda/8-DTC2%284th%29.pdf)$B!#(J

$B%5!<%S%9B0@-(J

ValidationAlgorithm: CertPathBuilder $B$^$?$O(J CertPathValidator $B$,%5%]!<%H$9$k>ZL@=q%Q%98!>Z%"%k%4%j%:%`$NA0!#(J RFC $B$O!"(J"RFC#" ($BNc(J: "RFC2459") $B$N$h$&$K;XDj$7$^$9!#(JInternet Draft $B$O!"%I%i%U%HL>$G;XDj$7$^$9(J ($BNc(J: "draft-ietf-pkix-new-part1-08.txt")$B!#$3$NB0@-$NCM$r(J Security.getProviders $B%a%=%C%I$NA*Br4p=`$H$7$F;XDj$7$?>l9g!"(JString.equalsIgnoreCase $B$K$h$jCM$NHf3S$,9T$o$l$^$9!#(J CertPathBuilder $B$*$h$S(J CertPathValidator $B$N$9$Y$F$N(J PKIX $B

LDAPSchema: LDAP CertStore $B$NZL@=q$H(J CRL $B$NA0$G$9!#(J $B$3$NB0@-$N7A<0$*$h$S%;%^%s%F%#%/%9$O!"(JValidationAlgorithm $BB0@-$N>l9g$HF1$8$G$9!#(J CertStore $B$N$9$Y$F$N(J LDAP $B


$BIUO?(J B: $B!V(JSUN$B!W%W%m%P%$%@(J

J2SDK $B$GDs6!$5$l$F$$$k!V(JSUN$B!W%W%m%P%$%@$O!"%P!<%8%g%s(J 1.4 $BMQ$K3HD%$5$l!"
  • CertificateFactory: X.509 CertPath $B7?$*$h$S(J PKCS7 PkiPath $BId9f2=(J
  • CertPathValidator: PKIX $B%"%k%4%j%:%`(J
  • CertPathBuilder: PKIX $B%"%k%4%j%:%`(J
  • CertStore: LDAP $B$*$h$S(J Collection CertStore $B7?(J $B$3$l$i$N%5!<%S%9%W%m%P%$%@%$%s%?%U%'!<%9$N$l\$7$/@bL@$7$^$9!#(J

    CertificateFactory

    CertificateFactory $B%(%s%8%s%/%i%9MQ$N!V(JSUN$B!W%W%m%P%$%@$O!"(JX.509 CertPath $B%*%V%8%'%/%H$N@8@.$r%5%]!<%H$9$k$?$a$K3HD%$5$l$^$7$?!#(J PKCS7 $B$*$h$S(J PkiPath $BId9f2=$,%5%]!<%H$5$l$^$9!#(J PKCS#7 $BRFC 2315 $B$N%5%V%;%C%H$r%5%]!<%H$7$^$9(J (SignedData ContentInfo $B7?$@$1$,%5%]!<%H$5$l$k(J)$B!#(J CertPath $B$N>ZL@=q$O!"=gJ}8~$K(J ($B%?!<%2%C%H$+$i?.Mj$G$-$k%"%s%+!<$X(J) $B=g=xIU$1$5$l$^$9!#(J CertPath $B$N3F>ZL@=q$O(J java.security.cert.X509Certificate $B7?$G!"%P!<%8%g%s(J 1$B!"(J2$B!"$*$h$S(J 3 $B$,%5%]!<%H$5$l$F$$$^$9!#(J

    CertPathValidator

    $B!V(JSUN$B!W%W%m%P%$%@$O!"(JCertPathValidator $B%(%s%8%s%/%i%9$N(J PKIX $BCertPath $B$r8!>Z$7!"(J PKIX $B>ZL@=q$H(J CRL $B%W%m%U%!%$%k(J $BMQ$N(J Internet-Draft $BBh(J 9 $BHG$KDj5A$5$l$F$$$k>ZL@=q%Q%98!>Z%"%k%4%j%:%`$rPKIX $B>ZL@=q$H(J CRL $B%W%m%U%!%$%k$K$O!"B?$/$N%*%W%7%g%s5!G=$,$"$j$^$9!#(J $B!V(JSUN$B!W%W%m%P%$%@$O!"%]%j%7!<%^%C%T%s%03HD%5!G=$*$h$S860x%3!<%I(J CRL $B%(%s%H%j3HD%5!G=$N%5%]!<%H$rZL@=q3HD%5!G=$N%5%]!<%H$O$BZL@=q$H(J CRL $B%W%m%U%!%$%k$N%;%/%7%g%s(J 6.3 $B$K=`5r$7$F$$$k(J CRL $BC$73NG'5!9=$r%5%]!<%H$7$^$9!#(J $B%"%W%j%1!<%7%g%s$O!"(JPKIXParameters $B%*%V%8%'%/%H$K(J CRL $B$r4^$`(J 1 $B$D0J>e$N(J CertStore $B$r;XDj$9$kI,MW$,$"$j$^$9!#(J CertPathValidator $B$O!"(JCertPath $B$N>ZL@=q$4$H$K!";XDj$5$l$?(J CertStore $B$r8!:w$7$FE,@Z$J(J CRL $B$rC5$7$^$9!#(J OCSP (RFC 2560) $B$O!"8=:_!"AH$_9~$_$NC$73NG'5!9=$H$7$F$O%5%]!<%H$5$l$^$;$s!#(J

    $B$3$NTrustAnchor $B%/%i%9$N(J nameConstraints $B%Q%i%a!<%?$r%5%]!<%H$7$^$;$s!#$7$?$,$C$F!"$3$N%Q%i%a!<%?$,;XDj$5$l$k$H!"(Jvalidate $B%a%=%C%I$K$h$j(J InvalidAlgorithmParameterException $B$,%9%m!<$5$l$^$9!#(J

    CertPathBuilder

    $B!V(JSUN$B!W%W%m%P%$%@$O!"(JCertPathBuilder $B%(%s%8%s%/%i%9$N(J PKIX $BCertPath $B$r9=C[$7$^$9!#(J $B3F(J CertPath $B$O!"(JPKIX $B>ZL@=q$H(J CRL $B%W%m%U%!%$%k(J $BMQ$N(J Internet-Draft $BBh(J 9 $BHG$GDj5A$5$l$F$$$k(J PKIX $B%"%k%4%j%:%`$K=>$C$F8!>Z$5$l$^$9!#(J $B$3$N%I%i%U%H$,40@.$9$k$H!"(JRFC 2459 $B$O;HMQ$5$l$J$/$J$j$^$9!#(J $B$3$NPKIXBuilderParameters $B%*%V%8%'%/%H$N(J targetConstraints $B%Q%i%a!<%?$,(J X509CertSelector $B$N%$%s%9%?%s%9$G$J$1$l$P$J$j$^$;$s!#(J $B$=$&$G$J$$>l9g!"(Jbuild $B%a%=%C%I$K$h$j(J InvalidAlgorithmParameterException $B$,%9%m!<$5$l$^$9!#(J

    $BCertPath $B%*%V%8%'%/%H$r9=C[$7$^$9!#(J $B@x:_E*$J%Q%9$,L58z$G$"$k$+!"$^$?$O(J PKIXBuilderParameters maxPathLength $B%Q%i%a!<%?$rD6$($F$$$k$HH=Dj$5$l$k$H!"A0$N>uBV$KLa$C$FBeBX%Q%9$r;n$_$^$9!#(J

    $B%Q%9$N8!>Z$O!"(JCertPathValidator $BZ$7$^$9!#(J $B=gJ}8~$K=g=xIU$1$5$l$F$$$k>ZL@=q$GZ%A%'%C%/$O1d4|$5$l!"%Q%9$,9=C[$5$l$F$+$i(J ($B%"%W%j%1!<%7%g%s$KJV$5$l$kA0$K(J) $B$=$N%Q%9>e$G2 $B$D0J>e$N@x:_E*$J>ZL@=q$,8!=P$5$l!";XDj$5$l$?@)Ls$rK~$?$9%Q%9$,8+$D$+$k2DG=@-$,$"$k>l9g!"r7o$r;H$C$F!">ZL@=q$NM%@h=g0L$r@_Dj$7$^$9(J ($BTrustAnchor $B$N<1JLL>(J"ou=D,ou=C,o=B,c=A"$B$,;XDj$5$l$F$$$k$H2>Dj(J)$B!#(J

    1. $B>ZL@=q$NH/9TTrustAnchor $B$N$&$A(J 1 $B$D$N(J DN $B$H0lCW(J ($BNc(J: issuerDN = "ou=D,ou=C,o=B,c=A")
    2. $B>ZL@=q$NH/9TTrustAnchor $B$N$&$A(J 1 $B$D$N(J DN $B$N;RB9$G!"%"%s%+!<$K6a$$$[$&$+$i=g$K=g=xIU$1$i$l$F$$$k(J ($BNc(J: issuerDN = "ou=E,ou=D,ou=C,o=B,c=A")
    3. $B>ZL@=q$NH/9TTrustAnchor $B$N$&$A(J 1 $B$D$N(J DN $B$NAD@h$G!"%"%s%+!<$K6a$$$[$&$+$i=g$K=g=xIU$1$i$l$F$$$k(J ($BNc(J: issuerDN = "ou=C,o=B,c=A")
    4. $B>ZL@=q$NH/9TTrustAnchor $B$N$&$A(J 1 $B$D$NF1$8%M!<%`%9%Z!<%9Fb$K$"$j!"%"%s%+!<$K6a$$$[$&$+$i=g$K=g=xIU$1$i$l$F$$$k(J ($BNc(J: issuerDN = "ou=G,ou=C,o=B,c=A")
    5. $B>ZL@=q$NH/9TZL@=q$N $B$3$l$i$N8e$K$O!">e5-$N$I$N>r7o$bK~$?$5$J$$>ZL@=q$,B3$-$^$9!#(J

      $B$3$NCertStore $B$B%G%P%C%0$N%5%]!<%H$O!"(Jjava.security.debug $B%W%m%Q%F%#$r(J certpath $B$K@_Dj$9$k$HM-8z$K$J$j$^$9!#(J $BNc$r<($7$^$9!#(J

      	java -Djava.security.debug=certpath BuildCertPath
      
      $B$3$&$9$k$H!"DI2C$N%G%P%C%0>pJs$,I8=`%(%i!<$K=PNO$5$l$^$9!#(J

      CertStore

      $B!V(JSUN$B!W%W%m%P%$%@$O!"(JCertStore $B%(%s%8%s%/%i%9$N(J 2 $B$D$N

      Collection CertStore

      Collection CertStore $Bjava.security.cert.Certificate $B$^$?$O(J java.security.cert.CRL $B$N%$%s%9%?%s%9$G$"$k$9$Y$F$N%*%V%8%'%/%H$rJ];}$G$-$^$9!#(J

      $B>ZL@=q$*$h$S(J CRL $B$O!"FCDj$N=g=x$GJV$5$l$k$3$H$O$J$/!"J#@=$r4^$_$^$;$s!#(J

      LDAP CertStore

      LDAP CertStore $BRFC 2587 $B$GDj5A$5$l$F$$$k(J LDAP $B%9%-!<%^$r;H$C$F!">ZL@=q$*$h$S(J CRL $B$r(J LDAP $B%G%#%l%/%H%j$+$i$BX509CertSelector $B$G;XDj$5$l$F$$$k(J basicConstraints $BA*Br>r7o$K$h$C$F!">ZL@=q$rJL$N0LCV$+$i%U%'%C%A$7$^$9!#(J $B
    6. Subject non-null, basicConstraints <= -1

      $BZL@=q$r8!:w$7$^$9!#(J

    7. Subject non-null, basicConstraints >= -1

      $BZL@=q$r8!:w$7$^$9!#(J

    8. Issuer non-null, basicConstraints >= -1

      $BH/9TZL@=q$r8!:w$7$^$9!#(J

    $B$I$N>l9g$b!">ZL@=q$O8!:w7k2L$N%3%l%/%7%g%s$KDI2C$9$kA0$K!"(JX509CertSelector.match() $B$r;H$C$F%A%'%C%/$5$l$^$9!#(J

    $B>e5-$K;XDj$7$?>r7o$N$I$l$bEv$F$O$^$i$J$$>l9g!"Ds6!$5$l$?>r7o$r;H$C$F>ZL@=q$r%U%'%C%A$G$-$J$$$3$H$r<($9Nc30$,%9%m!<$5$l$^$9!#(J 1 $B$D0J>e$N>r7o$,E,MQ$5$l$?$H$7$F$b!"%G%#%l%/%H%j$K>ZL@=q$,$J$$>l9g!"JV$5$l$k(J Collection $B$O6u$N$^$^$G$"$k$3$H$KCm0U$7$F$/$@$5$$!#(J

    $BX509CRLSelector $B%/%i%9$N(J setCertificateChecking$B!"(JaddIssuerName$B!"$^$?$O(J setIssuerNames $B%a%=%C%I$G;XDj$5$l$?H/9Tl9g!"(JCRL $B$O$B:G=i$K!"$N%j%9%H$,:n@.$5$l$^$9!#(J setCertificateChecking $B%a%=%C%I$K>ZL@=q$,;XDj$5$l$F$$$k>l9g!"$=$N>ZL@=q$NH/9Tl9g!"(JaddIssuerName $B$^$?$O(J setIssuerNames $B%a%=%C%I$G;XDj$5$l$?H/9T$,;HMQ$5$l$^$9!#(J

    $B$N%j%9%H$KBP$7$F7+$jJV$7=hM}$,9T$o$l$^$9!#(J $B$4$H$K(J authorityRevocationList $BB0@-$r8!:w$7!"0lCW$9$k(J CRL $B$,8+$D$+$i$J$$>l9g!"H/9TsetCertificateChecking $B%a%=%C%I$K;XDj$5$l$?>ZL@=q$+$iH/9T$rl9g$ONc30$G$9!#$3$N>l9g!"H/9TZL@=q$,(J CA $B>ZL@=q$G$"$k$+$I$&$+$N%A%'%C%/$,9T$o$l$k$@$1$K$J$j$^$9!#(J

    $B$9$Y$F$N(J CRL $B$O8!:w7k2L$N%3%l%/%7%g%s$KDI2C$9$kA0$K!"(JX509CRLSelector.match() $B$r;H$C$F%A%'%C%/$5$l$^$9!#(J

    $BA*Br4p=`$rK~$?$9(J CRL $B$,8+$D$+$i$J$$>l9g!"6u$N(J Collection $B$,JV$5$l$^$9!#(J


  • Copyright © 1998-2002, Sun Microsystems, Inc. 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. All Rights Reserved.

    $B%3%a%s%H$NAwIU@h(J: java-security@sun.com$B!#(J $B$3$l$O9XFI%j%9%H$G$O$"$j$^$;$s!#(J