解æããã³è¡šç€ºãŠãŒãã£ãªãã£ã¯Tcl / Tkã§èšè¿°ãããŠãããPKCSïŒ11ããŒã¯ã³/ã¹ããŒãã«ãŒããè¿œå ãã蚌ææžã衚瀺ãã蚌ææžã®æå¹æ§ã確èªããã«ã¯ãããã€ãã®åé¡ã解決ããå¿ èŠããããŸããã
- ããŒã¯ã³/ã¹ããŒãã«ãŒããã蚌ææžãååŸããã¡ã«ããºã ã決å®ããŸãã
- 倱å¹ããCRL蚌ææžã®ãªã¹ãã«å¯ŸããŠèšŒææžã確èªããŸãã
- OCSPã¡ã«ããºã ã«ãã£ãŠæå¹æ§ã®èšŒææžã確èªããŠãã ããã
PKCSïŒ11ããŒã¯ã³ãžã®ã¢ã¯ã»ã¹
ããŒã¯ã³ãšããã«ä¿åãããŠãã蚌ææžã«ã¢ã¯ã»ã¹ããã«ã¯ã TclPKCS11ããã±ãŒãžã䜿çšããŸãã ããã±ãŒãžã¯ããã€ããªãšãœãŒã¹ã³ãŒãã®äž¡æ¹ã§é åžãããŸãã ãœãŒã¹ã³ãŒãã¯ãåŸã§ãã·ã¢ã®æå·åã«ããããŒã¯ã³ãµããŒããããã±ãŒãžã«è¿œå ãããšãã«åœ¹ç«ã¡ãŸãã TclPKCS11ããã±ãŒãžãããŠã³ããŒããããã次ã®åœ¢åŒã®tclã³ãã³ãã䜿çšããã«ã¯ã2ã€ã®æ¹æ³ããããŸãã
load < tclpkcs11> Tclpkcs11
ãŸãã¯ãtclpkcs11ã©ã€ãã©ãªãšpkgIndex.tclãã¡ã€ã«ã䟿å©ãªãã£ã¬ã¯ããªïŒãã®å Žåã¯çŸåšã®ãã£ã¬ã¯ããªã®pkcs11ãµããã£ã¬ã¯ããªïŒã«å ¥ããauto_pathã«è¿œå ããåŸãåã«ããã±ãŒãžpki :: pkcs11ãšããŠããŠã³ããŒãããŸãã
#lappend auto_path [file dirname [info scrypt]] lappend auto_path pkcs11 package require pki package require pki::pkcs11
äž»ã«ãã·ã¢ã®æå·åããµããŒãããããŒã¯ã³ã«é¢å¿ããããããTclPKCS11ããã±ãŒãžãã次ã®é¢æ°ã䜿çšããŸãã
ããã§ããã°ã€ã³ããã³ãã°ã¢ãŠãæ©èœãèæ ®ãããªãããã«ãããã«äºçŽããŠãã ããã ããã¯ããã®èšäºã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯èšŒææžã®ã¿ãæ±ãããããã¯å ¬éããŒã¯ã³ãªããžã§ã¯ãã§ãããšããäºå®ã«ãããã®ã§ãã ãããªãã¯ãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ããã«ã¯ãããŒã¯ã³ã®PINã³ãŒãã䜿çšããŠãã°ã€ã³ããå¿ èŠã¯ãããŸããã::pki::pkcs11::loadmodule <filename> -> handle ::pki::pkcs11::unloadmodule <handle> -> true/false ::pki::pkcs11::listslots <handle> -> list: slotId label flags ::pki::pkcs11::listcerts <handle> <slotId> -> list: keylist ::pki::pkcs11::login <handle> <slotId> <password> -> true/false ::pki::pkcs11::logout <handle> <slotId> -> true/false
æåã®é¢æ°:: pki :: pkcs11 :: loadmoduleã¯ã蚌ææžã眮ãããŠããããŒã¯ã³/ã¹ããŒãã«ãŒãããµããŒãããPKCSïŒ11ã©ã€ãã©ãªãããŒãããããšã§ãã ã©ã€ãã©ãªã¯ãããŒã¯ã³ãè³Œå ¥ããããã€ã³ã¿ãŒãããããããŠã³ããŒãããããã³ã³ãã¥ãŒã¿ãŒã«ããªã€ã³ã¹ããŒã«ãããŠããŸãã ãããã«ããŠããããŒã¯ã³ããµããŒãããŠããã©ã€ãã©ãªãç¥ãå¿ èŠããããŸãã loadmoduleé¢æ°ã¯ãããŒããããã©ã€ãã©ãªãžã®ãã³ãã«ãè¿ããŸãã
set filelib "/usr/local/lib64/librtpkcs11ecp_2.0.so" set handle [::pki::pkcs11::loadmodule $filelib]
ãããã£ãŠãããŒããããã©ã€ãã©ãªãã¢ã³ããŒãããæ©èœããããŸãã
::pki::pkcs11::unloadmodule $handle
ã©ã€ãã©ãªãããŒãããããã³ãã«ãååŸãããããã®ã©ã€ãã©ãªã§ãµããŒããããŠããã¹ãããã®ãªã¹ããååŸã§ããŸãã
::pki::pkcs11::listslots $handle {0 {ruToken ECP } {TOKEN_PRESENT RNG LOGIN_REQUIRED USER_PIN_INITIALIZED TOKEN_INITIALIZED REMOVABLE_DEVICE HW_SLOT}} {1 { } {REMOVABLE_DEVICE HW_SLOT}} . . . {14 { } {REMOVABLE_D EVICE HW_SLOT}}
ãã®äŸã§ã¯ããªã¹ãã«ã¯15åïŒ0ã14åã®15åïŒã®èŠçŽ ãå«ãŸããŠããŸãã ããã¯ãããŒã¯ã³ã®RuTokenãã¡ããªããµããŒãã§ããã¹ãããã®æ°ã§ãã åæ§ã«ããªã¹ãèªäœã®åèŠçŽ ã¯3ã€ã®èŠçŽ ã®ãªã¹ãã§ãã
{{ } { } { }}
ãªã¹ãã®æåã®èŠçŽ ã¯ã¹ãããçªå·ã§ãã ãªã¹ãã®2çªç®ã®èŠçŽ ã¯ãããŒã¯ã³ã¹ãããã«ããã©ãã«ïŒ32ãã€ãïŒã§ãã ã¹ãããã空ã®å Žåã2çªç®ã®èŠçŽ ã«ã¯32åã®ã¹ããŒã¹ãå«ãŸããŸãã ãããŠããªã¹ãã®æåŸã®3çªç®ã®èŠçŽ ã«ã¯ãã©ã°ãå«ãŸããŠããŸãã ãã©ã°ã®ã»ããå šäœãèæ ®ããŸããã ãããã®ãã©ã°ã«é¢å¿ãããã®ã¯ãTOKEN_PRESENTãã©ã°ã®ååšã§ãã ãã®ãã©ã°ã¯ãããŒã¯ã³ãã¹ãããå ã«ãããé¢å¿ã®ãã蚌ææžãããŒã¯ã³äžã«ããããšã瀺ããŸãã ãã©ã°ã¯éåžžã«äŸ¿å©ãªãã®ã§ãããŒã¯ã³ã®ç¶æ ãPINã³ãŒãã®ã¹ããŒã¿ã¹ãªã©ãèšè¿°ããŸãã ãã©ã°ã®å€ã«åºã¥ããŠãPKCSïŒ11ããŒã¯ã³ã管çãããŸãã
çŸåšãslots_with_tokenããã·ãŒãžã£ãæžãããšã劚ãããã®ã¯ãããŸãããããã¯ãããŒã¯ã³ã®ã©ãã«ãå«ãã¹ãããã®ãªã¹ããè¿ããŸãã
#!/usr/bin/tclsh lappend auto_path pkcs11 package require pki package require pki::pkcs11 # proc ::slots_with_token {handle} { set slots [pki::pkcs11::listslots $handle] # puts "Slots: $slots" array set listtok [] foreach slotinfo $slots { set slotid [lindex $slotinfo 0] set slotlabel [lindex $slotinfo 1] set slotflags [lindex $slotinfo 2] if {[lsearch -exact $slotflags TOKEN_PRESENT] != -1} { set listtok($slotid) $slotlabel } } # parray listtok return [array get listtok] } set filelib "/usr/local/lib64/librtpkcs11ecp_2.0.so" if {[catch {set handle [::pki::pkcs11::loadmodule $filelib]} res]} { puts "Cannot load library $filelib : $res" exit } # set listslots {} set listslots [::slots_with_token $handle] # while {[llength $listslots] == 0} { puts " " after 3000 set listslots [::slots_with_token $handle] } # foreach {slotid labeltok} $listslots { puts "Number slot: $slotid" puts "Label token: $labeltok" }
ãã®ã¹ã¯ãªãããå®è¡ãããšãslots_with_token.tclãã¡ã€ã«ã«ä¿åããåŸã次ã®çµæãåŸãããŸãã
$ ./slots_with_token.tcl listtok(0) = ruToken ECP listtok(1) = RuTokenECP20 Number slot: 0 Label token: RuTokenECP20 Number slot: 1 Label token: ruToken ECP $
ãã®ã©ã€ãã©ãªã§äœ¿çšå¯èœãª15åã®ã¹ãããã®ãã¡ãé¢äžããã®ã¯ãŒããšæåã®2ã€ã ãã§ãã
çŸåšãç¹å®ã®ããŒã¯ã³ã«ãã蚌ææžã®ãªã¹ããååŸããããšã劚ãããã®ã¯ãããŸããã
set listcerts [::pki::pkcs11::listcerts $handle $slotid]
åãªã¹ãé ç®ã«ã¯ã1ã€ã®èšŒææžã«é¢ããæ å ±ãå«ãŸããŠããŸãã 蚌ææžããæ å ±ãååŸããã«ã¯ãé¢æ°:: pki :: pkcs11 :: listcertsã¯ãpkiããã±ãŒãžã®é¢æ°:: pki :: x509 :: parse_certã䜿çšããŸãã ããããé¢æ°:: pki :: pkcs11 :: listcertsã¯ãPKCSïŒ11ãããã³ã«ã«åºæã®ããŒã¿ã§ãã®ãªã¹ããè£å®ããŸãã
- pkcs11_ labelèŠçŽ ïŒPKCSïŒ11å±æ§CKA_LABELã®çšèªã§ïŒ;
- pkcs11_idèŠçŽ ïŒPKCSïŒ11å±æ§CKA_IDã®çšèªã§ïŒ;
- ããŒããããPKCSïŒ11ã©ã€ãã©ãªã®æ瀺ãå«ãpkcs11_handleèŠçŽ ã
- ãã®èšŒææžãé 眮ãããŠããããŒã¯ã³ãæã€ã¹ãããã®çªå·ãå«ãpkcs11_slotidèŠçŽ ã
- ããŒã¯ã³äžã«ãã蚌ææžã®pkcs11å€ãå«ãtypeèŠçŽ ã
æ®ãã®èŠçŽ ã¯äž»ã«pki :: parse_certé¢æ°ã«ãã£ãŠæ±ºå®ãããããšãæãåºããŠãã ããã
以äžã¯ã蚌ææžïŒCKA_LABELãpkcs11_labelïŒã®ã©ãã«ã®ãªã¹ãïŒlistCertïŒããã³è§£æãããèå¥åã®é åïŒ:: certs_p11ïŒãååŸããæé ã§ãã 蚌ææžé åã®èŠçŽ ã«ã¢ã¯ã»ã¹ããããã®ããŒã¯ã蚌ææžã©ãã«ïŒCKA_LABELãpkcs11_labelïŒã§ãã
# proc listcerttok {handle token_slotlabel token_slotid} { # set listCer {} # array set ::arrayCer [] set ::certs_p11 [pki::pkcs11::listcerts $handle $token_slotid] if {[llength $::certs_p11] == 0} { puts {Certificates are not on the token:$tokenslotlabel} return $listCer } foreach certinfo_list $::certs_p11 { unset -nocomplain certinfo array set certinfo $certinfo_list set certinfo(pubkeyinfo) [::pki::x509::parse_cert_pubkeyinfo $certinfo(cert)] set ::arrayCer($certinfo(pkcs11_label)) $certinfo(cert) lappend listCer $certinfo(pkcs11_label) } return $listCer }
ãããŠä»ã蚌ææžã解æããã®ã§ãã³ã³ãããã¯ã¹ã«ã©ãã«ã®ãªã¹ããéãã«è¡šç€ºããŸãïŒ
åã®èšäºã§æ€èšããGOSTå ¬éããŒã®è§£ææ¹æ³ã
蚌ææžã®ãšã¯ã¹ããŒãã«é¢ãã2ã€ã®èšèã 蚌ææžã¯ãPEMãšã³ã³ãŒãã£ã³ã°ãšDERãšã³ã³ãŒãã£ã³ã°ïŒDERãã¿ã³ãPEM圢åŒïŒã®äž¡æ¹ã§ãšã¯ã¹ããŒããããŸãã pkiããã±ãŒãžã«ã¯ãPEM圢åŒã«å€æããããã®äŸ¿å©ãªé¢æ°pki :: _ encode_pemããããŸãã
set bufpem [::pki::_encode_pem <der-buffer> <Headline> <Lastline>]
äŸãã°ïŒ
set certpem [::pki::encode_pen $cert_der "-----BEGIN CERTIFICATE-----" "-----END CERTIFICATE-----"]
comboboxã§æè¡çæ§èšŒææžã©ãã«ãââéžæããããšã«ããã蚌ææžæ¬äœã«ã¢ã¯ã»ã¹ã§ããŸãã
# set nick [.saveCert.labExp.listCert get] # foreach certinfo_list $::certs_p11 { unset -nocomplain cert_parse array set cert_parse $certinfo_list if {$cert_parse(pkcs11_label) == $nick} { # set cert_parse(pubkeyinfo) [::pki::x509::parse_cert_pubkeyinfo $cert_parse(cert)] break } } # file|pkcs11 set ::tekcert "pkcs11"
蚌ææžãåæããŠããã衚瀺ããããã®ãããªãã¡ã«ããºã ã¯ä»¥åã«ããã§è°è«ãããŸãã ã
蚌ææžã®æ€èšŒ
蚌ææžã解æãããšããå€æ°:: notbeforeããã³:: notafterã¯ãæå·åæäœã§èšŒææžã䜿çšã§ããæ¥ä»ïŒçœ²åãæå·åãªã©ïŒãããã³èšŒææžã®æå¹æéãæ ŒçŽããŸãã 蚌ææžã®æå¹æ§ãæ€èšŒããæé ã¯æ¬¡ã®ãšããã§ãã
proc cert_valid_date {} { # # set startdate $::notbefore # set enddate $::notafter # set now [clock seconds] set isvalid 1 set reason "Certificate is valid" if {$startdate > $now} { set isvalid 0 # set reason "Certificate is not yet valid" } elseif {$now > $enddate} { set isvalid 0 # set reason "Certificate has expired" } return [list $isvalid $reason] }
è¿ããããªã¹ãã«ã¯2ã€ã®ã¢ã€ãã ãå«ãŸããŸãã æåã®èŠçŽ ã«ã¯ã0ïŒãŒãïŒãŸãã¯1ïŒ1ïŒãå«ããããšãã§ããŸãã ã1ãã®å€ã¯èšŒææžãæå¹ã§ããããšã瀺ãã0ã¯èšŒææžãç¡å¹ã§ããããšã瀺ããŸãã 蚌ææžãç¡å¹ãªçç±ã¯ã2çªç®ã®èŠçŽ ã§æããã«ãããŠããŸãã ãã®èŠçŽ ã«ã¯ã次ã®3ã€ã®å€ã®ãããããå«ããããšãã§ããŸãã
- æå¹ãªèšŒææžïŒãªã¹ãã®æåã®èŠçŽ ã¯1ïŒïŒ
- 蚌ææžã¯ãŸã æå¹ã§ã¯ãããŸããïŒèšŒææžã®æå¹æéã¯ãŸã åããŠããŸããïŒ
- 蚌ææžã®æå¹æéãåããŠããŸãã
蚌ææžã®æå¹æéã¯ããã®æå¹æéã ãã§ãªã決å®ãããŸãã 蚌ææžã®æå¹æ§ã¯ãã€ãã·ã¢ãããšèšŒææžææè ã®èŠæ±ã®äž¡æ¹ã§ãããšãã°ç§å¯éµãæã€ãã£ãªã¢ãçŽå€±ããå ŽåãèªèšŒã»ã³ã¿ãŒã«ãã£ãŠäžæåæ¢ãŸãã¯çµäºã§ããŸãã ãã®å Žåã蚌ææžã¯ãCAã«ãã£ãŠé åžãããåãæ¶ãããCOS / CRL蚌ææžã®ãªã¹ãã«èªèšŒå±ã«ãã£ãŠå«ãŸããŠããŸãã éåžžãCRLé åžãã€ã³ãã¯èšŒææžã«å«ãŸããŠããŸãã 倱å¹ãã蚌ææžã®ãªã¹ãããã蚌ææžã®æå¹æ§ã確èªãããŸãã
SOS / CRLã«ãã蚌ææžã®æå¹æ§ã®æ€èšŒ
æåã®ã¹ãããã¯ãSOSãååŸããããã解æããŠèšŒææžã確èªããããšã§ãã
COS / CRLçºè¡ãã€ã³ãã®ãªã¹ãã¯ãoid 2.5.29.31ïŒid-ce-cRLDistributionPointsïŒã®èšŒææžæ¡åŒµã«ãããŸãã
array set extcert $cert_parse(extensions) set ::crlfile "" if {[info exists extcert(2.5.29.31)]} { set ::crlfile [crlpoints [lindex $extcert(2.5.29.31) 1]] } else { puts "cannot load CRL" }
å®éã«SOS / CRLã䜿çšããŠãã¡ã€ã«ãããŒãããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
set filecrl "" set pointcrl "" foreach pointcrl $::crlfile { set filecrl [readca $pointcrl $dir] if {$filecrl != ""} { set f [file join $dir [file tail $pointcrl]] set fd [open $fw] chan configure $fd -translation binary puts -nonewline $fd $filecrl close $fd set filecrl $f break } # CRL . CRL } if {$filecrl == ""} { puts "Cannot load CRL" }
å®éã«ã¯ãreadcaããã·ãŒãžã£ã䜿çšããŠCOC / CRLãããŒãããŸãã
proc readca {url dir} { set cer "" # if { "https://" == [string range $url 0 7]} { # tls http::register https 443 ::tls::socket } # if {[catch {set token [http::geturl $url -binary 1] # set ere [http::status $token] if {$ere == "ok"} { # set code [http::ncode $token] if {$code == 200} { # set cer [http::data $token] } elseif {$code == 301 || $code == 302} { # , set newURL [dict get [http::meta $token] Location] # set cer [readca $newURL $dir] } else { # set cer "" } } } error]} { # , set cer "" } return $cer }
dirå€æ°ã«ã¯ãCOS / CRLãæ ŒçŽããããã£ã¬ã¯ããªãžã®ãã¹ãæ ŒçŽãããurlå€æ°ã«ã¯ã以åã«åä¿¡ããCRLé åžãã€ã³ãã®ãªã¹ããå«ãŸããŸãã
SOS / CRLãåä¿¡ãããšãäžéšã®èšŒææžã§ã¯ãå¿åã¢ãŒãã§httpsïŒtlsïŒãããã³ã«ãä»ããŠãã®ãªã¹ããåä¿¡ããå¿ èŠããããšããäºå®ã«çªç¶çŽé¢ããªããã°ãªããŸããã§ããã æ£çŽãªãšãããããã¯é©ãã¹ãããšã§ããCRLãªã¹ãã¯å ¬éææžã§ããããã®å®å šæ§ã¯é»å眲åã«ãã£ãŠä¿è·ãããŠãããå¿åã®httpsãä»ããŠã¢ã¯ã»ã¹ã§ããããšã¯ãç§ã®æèŠã§ã¯ç Žç£ã§ãã ããããäœãããå¿ èŠã¯ãããŸãããtlsããã±ãŒãžãæ¥ç¶ããå¿ èŠããããŸã-ããã±ãŒãžã«ã¯tlsãå¿ èŠã§ãã
SOS / CRLãããŠã³ããŒãã§ããªãã£ãå ŽåãOCSPãµãŒãã¹ãæã€ã¢ã¯ã»ã¹ãã€ã³ãã蚌ææžã§æå®ãããŠããªããšã蚌ææžãæ€èšŒã§ããŸããã ãã ããããã«ã€ããŠã¯æ¬¡ã®ããããã®èšäºã§èª¬æããŸãã
ãã®ãããæ€èšŒçšã®èšŒææžããããCOS / CRLã®ãªã¹ããããããã®èšŒææžãæ€èšŒããããã«æ®ã£ãŠããŸãã æ®å¿µãªãããpkiããã±ãŒãžã«ã¯å¯Ÿå¿ããé¢æ°ã¯ãããŸããã ãããã£ãŠã倱å¹ãã蚌ææžã®ãªã¹ããã蚌ææžã®æå¹æ§ïŒé倱å¹ïŒã確èªããæé ãäœæããå¿ èŠããããŸããã
validaty_cert_from_crlïŒ
proc validaty_cert_from_crl {crl sernum issuer} { array set ret [list] if { [string range $crl 0 9 ] == "-----BEGIN" } { array set parsed_crl [::pki::_parse_pem $crl "-----BEGIN X509 CRL-----" "-----END X509 CRL-----"] set crl $parsed_crl(data) } ::asn::asnGetSequence crl crl_seq ::asn::asnGetSequence crl_seq crl_base ::asn::asnPeekByte crl_base peek_tag if {$peek_tag == 0x02} { # .CRL ::asn::asnGetInteger crl_base ret(version) incr ret(version) } else { set ret(version) 1 } ::asn::asnGetSequence crl_base crl_full ::asn::asnGetObjectIdentifier crl_full ret(signtype) ::::asn::asnGetSequence crl_base crl_issue set ret(issue) [::pki::x509::_dn_to_string $crl_issue] # /CRL if {$ret(issue) != $issuer } { #/CRL set ret(error) "Bad Issuer" return [array get ret] } binary scan $crl_issue H* ret(issue_hex) # ::asn::asnGetUTCTime crl_base ret(publishDate) # ::asn::asnGetUTCTime crl_base ret(nextDate) # ::asn::asnPeekByte crl_base peek_tag if {$peek_tag != 0x30} { # return [array get ret] } ::asn::asnGetSequence crl_base lcert # binary scan $lcert H* ret(lcert) while {$lcert != ""} { ::asn::asnGetSequence lcert lcerti # ::asn::asnGetBigInteger lcerti ret(sernumrev) set ret(sernumrev) [::math::bignum::tostr $ret(sernumrev)] # CRL if {$ret(sernumrev) != $sernum} { continue } # . ::asn::asnGetUTCTime lcerti ret(revokeDate) if {$lcerti != ""} { # ::asn::asnGetSequence lcerti lcertir ::asn::asnGetSequence lcertir reasone ::asn::asnGetObjectIdentifier reasone ret(reasone) ::asn::asnGetOctetString reasone reasone2 ::asn::asnGetEnumeration reasone2 ret(reasoneData) } break; } return [array get ret] }
ãã®é¢æ°ã®ãã©ã¡ãŒã¿ãŒã¯ã蚌ææžå€±å¹ãªã¹ãïŒcrlïŒãæ€èšŒããã蚌ææžã®ã·ãªã¢ã«çªå·ïŒsernumïŒãããã³çºè¡è ïŒçºè¡è ïŒã§ãã
蚌ææžå€±å¹ãªã¹ãïŒcrlïŒã¯æ¬¡ã®ããã«ããŒããããŸãã
set f [open $filecrl r] chan configure $f -translation binary set crl [read $f] close $f
æ€èšŒæžã¿èšŒææžïŒsernumïŒãšãã®çºè¡è ïŒçºè¡è ïŒã®ã·ãªã¢ã«çªå·ã¯ã解æããã蚌ææžããååŸãããå€æ°:: sncertããã³:: issuercertã«ä¿åãããŸãã
ãã¹ãŠã®æé ã¯ãœãŒã¹ã³ãŒãã«èšèŒãããŠããŸãã LinuxãOS XïŒmacOSïŒãããã³MS Windowsçšã®ãŠãŒãã£ãªãã£ãšãã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒãã¯ãããã«ãããŸãã
ãã®ãŠãŒãã£ãªãã£ã¯ããã¡ã€ã«ã«ä¿åãããŠãã蚌ææžã衚瀺ããã³æ€èšŒããæ©èœãä¿æããŠããŸãã
ã¡ãªã¿ã«ããã¡ã€ã«ãã衚瀺ããã蚌ææžãããã³ããŒã¯ã³ã«ä¿åãããŠãã蚌ææžããšã¯ã¹ããŒãã§ããŸãã ããã«ããã蚌ææžãã¡ã€ã«ãDER圢åŒããPEMã«ããŸãã¯ãã®éã«ç°¡åã«å€æã§ããŸãã
ããã§ããã¡ã€ã«ãšPKCSïŒ11ããŒã¯ã³/ã¹ããŒãã«ãŒãã®äž¡æ¹ã«ä¿åããã蚌ææžã®åäžã®ãã¥ãŒã¢ãŒãã§ããŸããã
ã¯ãããã€ã³ããèŠéããŸããïŒèšŒææžã®æå¹æ§ã確èªããã«ã¯ããè¿œå ããã¿ã³ãã¯ãªãã¯ããŠã¡ãã¥ãŒé ç®ãValidaty by CRLããéžæããããããŠã¹ã®å³ãã¿ã³ãã¯ãªãã¯ããŠã«ãŒãœã«ãã¡ã€ã³æ å ±ã«ãããšããŸããã¡ãã¥ãŒé ç®ãValidaty by CRLããéžæããŸãã
ãã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãã¯ã©ãŠãããŒã¯ã³å ã®èšŒææžã®åç §ãšæ€èšŒã瀺ããŠããŸãã
çµè«ãšããŠã次ã®ããšã«æ³šæããŠãã ããã èšäºã«å¯Ÿãã圌ã®ã³ã¡ã³ãã®äžã§ããŠãŒã¶ãŒPasã¯PKCSïŒ11ããŒã¯ã³ã«ã€ããŠãèªåèªèº«ã§ãã¹ãŠãæ°ããããšãã§ããããšéåžžã«æ£ç¢ºã«è¿°ã¹ãŠããŸãã ã¯ããããŒã¯ã³ã¯å®éã«ã¯æå·åã³ã³ãã¥ãŒã¿ãŒã§ãã ãŸãã次ã®èšäºã§ã¯ãOCSPãããã³ã«ã䜿çšããŠèšŒææžãæ€èšŒããæ¹æ³ã«ã€ããŠã ãã§ãªããããŒã¯ã³/ã¹ããŒãã®æå·åã¡ã«ããºã ïŒãã¡ããGOSTæå·åïŒã䜿çšããŠããã·ã¥ãèšç®ããæ¹æ³ã«ã€ããŠã説æããŸãïŒGOST R 34-10- 94/2012ïŒã眲åã®äœæãšæ€èšŒãªã©ã