
"рд░реВрд╕реА рдпреЛрдЧреНрдп x509 рдкреНрд░рдорд╛рдг рдкрддреНрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЙрдкрдпреЛрдЧрд┐рддрд╛"
рд▓реЗрдЦ рдкрд░ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ,
рдкрд╛рд╕ рдиреЗ рдкреАрдХреЗрд╕реАрдПрд╕ # 11 рдЯреЛрдХрди рдХреЛ рдмрд╣реБрдд рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдиреЛрдЯ рдХрд┐рдпрд╛ рдХрд┐ рд╡реЗ "рд╕рднреА рдЦреБрдж рдХреЛ рдЧрд┐рди рд╕рдХрддреЗ рд╣реИрдВред" рд╣рд╛рдВ, рдЯреЛрдХрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╣реИрдВред рдФрд░ рдЗрди рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣ рдкрд╛рдпрдерди, рдкрд░реНрд▓ рдпрд╛ рд░реВрдмреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд┐рд╕реА рддрд░рд╣
рд╕реЗ PKCS # 11 рдЯреЛрдХрди рдХреЗ
рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдореЗрдВ рд░реВрд╕реА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдорд╛рдирд╛ рд╣реИ:

рдпрд╣рд╛рдБ рд╣рдо Tcl рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ
рд▓реЗрдЦ рдореЗрдВ , рдЬрдм рд╣рдордиреЗ PKCS # 11 рдЯреЛрдХрди / рд╕реНрдорд╛рд░реНрдЯ рдХрд╛рд░реНрдб рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рддреЛ рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ (рдкреНрд░рдорд╛рдгрдкрддреНрд░) рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
TclPKCS11 рд╕рдВрд╕реНрдХрд░рдг 0.9.9 рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреИрдХреЗрдЬ рдХреЛ рдЖрд░рдПрд╕рдП рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкреАрдХреЗрд╕реАрдПрд╕ # 11 v.2.20 рдорд╛рдирдХ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред рдЖрдЬ, PKCS # 11 v.2.40 рдорд╛рдирдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдЯреАрдХреЗ -26 рдХреА рддрдХрдиреАрдХреА рд╕рдорд┐рддрд┐ рд╣реИ, рдЬрд┐рд╕реЗ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░реВрд╕реА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреЛрдХрди / рд╕реНрдорд╛рд░реНрдЯрдХрд╛рд░реНрдб рдХреЗ рдШрд░реЗрд▓реВ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рд╕рдм рдХреЗ рд╕рд╛рде, рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ
TclPKCS11 рд╕рдВрд╕реНрдХрд░рдг 1.0.1 рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ ред рд╣рдо рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ TclPKCS11 v.10.1 рдкреИрдХреЗрдЬ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ RSA рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВред рдкреИрдХреЗрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА C рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИред
рддреЛ, рдкреИрдХреЗрдЬ рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдЖрдкрдХреЛ рдЬреБрдбрд╝реЗ рд╣реБрдП рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рддрдВрддреНрд░ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
::pki::pkcs11::listmechs <handl> <slotid>
рдХрдиреЗрдХреНрдЯреЗрдб рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рд╕реНрд▓реЙрдЯ рдХреА рдПрдХ рд╕реВрдЪреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ,
рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛
рд╣реИ (рдкреНрд░рдХреНрд░рд┐рдпрд╛ - proc :: рд╕реНрд▓реЙрдЯ_with_token):
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] }
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдВ:
#!/usr/bin/tclsh lappend auto_path . package require pki::pkcs11 # RuToken set lib "/usr/local/lib64/librtpkcs11ecp_2.0.so" <source lang="bash">set handle [pki::pkcs11::loadmodule $lib] # # set labslot [::slots_with_token $handle] if {[llength $labslot] == 0} { puts " " exit } set slotid 0 set lmech [pki::pkcs11::listmechs $handle $slotid] set i 0 foreach mm $lmech { # if {[string first "GOSTR3410" $mm] != -1} { puts -nonewline "[lindex $mm 0] " if {$i == 2} {puts "";set i 0} else { incr i} } } puts "\n" exit
рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЛ RuToken рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдЯреЛрдХрди рдкрд░ рд╕рдорд░реНрдерд┐рдд GOSTR3410 рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рддрдВрддреНрд░ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП, рдЬреИрд╕рд╛ рдХрд┐
рдкрд╛рд╕ рдиреЗ
рд▓реЗрдЦ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, "рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдИрдбреАрдУ рджреНрд╡рд╛рд░рд╛ рд░реБрддреЛрдХрди рд╣рд▓реНрдХрд╛ рдкреНрд░рд┐рдп":
$ tclsh TEST_for_HABR.tcl listtok(0) = ruToken Lite 0 {ruToken Lite } $
рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХрд┐рд╕реА рднреА GOST mezanism рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд╛рдмрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред рд╣рдо рдПрдХ рдФрд░ рдЯреЛрдХрди рд░реЙрдЯреЛрдХрди рдИрдбреАрдПрд╕ рд▓реЗрддреЗ рд╣реИрдВ:
$ tclsh TEST_for_HABR.tcl listtok(0) = ruToken ECP } 0 {ruToken ECP } CKM_GOSTR3410_KEY_PAIR_GEN CKM_GOSTR3410 CKM_GOSTR3410_DERIVE CKM_GOSTR3410_WITH_GOSTR3411 $
рд╣рд╛рдВ, рдпрд╣ рдЯреЛрдХрди рд░реВрд╕реА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ GOST R 34.10-2001 рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВ, рдЬреЛ рд▓рдЧрднрдЧ
рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд░реБрддреЛрдХрди рдИрдбреАрдПрд╕-2.0 рдЯреЛрдХрди рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдпрд╣ GOST R 34.10-2012 рдХреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде 256 рдФрд░ 512 рдмрд┐рдЯ рд▓рдВрдмрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
$ tclsh TEST_for_HABR.tcl listtok(0) = RuTokenECP20 0 {RuTokenECP20 } CKM_GOSTR3410_KEY_PAIR_GEN CKM_GOSTR3410 CKM_GOSTR3410_DERIVE CKM_GOSTR3410_512_KEY_PAIR_GEN CKM_GOSTR3410_512 CKM_GOSTR3410_12_DERIVE CKM_GOSTR3410_WITH_GOSTR3411 CKM_GOSTR3410_WITH_GOSTR3411_12_256 CKM_GOS TR3410_WITH_GOSTR3411_12_512 $

рдпрджрд┐ рд╣рдордиреЗ рд░реВрд╕реА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЬрд┐рд╕рдореЗрдВ рдЯрд┐рдбреНрдбреЗ рдФрд░ рдореИрдЧреНрдорд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде, рддреЛ рдпрд╣ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдФрд░
рдХреНрд▓рд╛рдЙрдб рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдФрд░ рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ:
$ tclsh TEST_for_HABR.tcl listtok(0) = LS11SW2016_LIN_64 0 {LS11SW2016_LIN_64 }
рддрдВрддреНрд░ рдХреА рд╕реВрдЪреАCKM_GOSTR3410_KEY_PAIR_GEN
CKM_GOSTR3410_512_KEY_PAIR_GEN
CKM_GOSTR3410
CKM_GOSTR3410_512
CKM_GOSTR3410_WITH_GOSTR3411
CKM_GOSTR3410_WITH_GOSTR3411_12_256
CKM_GOSTR3410_WITH_GOSTR3411_12_512
CKM_GOSTR3410_DERIVE
CKM_GOSTR3410_12_DERIVE
CKM_GOSR3410_2012_VKO_256
CKM_GOSR3410_2012_VKO_512
CKM_KDF_4357
CKM_KDF_GOSTR3411_2012_256
CKM_KDF_TREE_GOSTR3411_2012_256
CKM_GOSTR3410_KEY_WRAP
CKM_GOSTR3410_PUBLIC_KEY_DERIVE
CKM_LISSI_GOSTR3410_PUBLIC_KEY_DERIVE
CKM_GOST_GENERIC_SECRET_KEY_GEN
CKM_GOST_CIPHER_KEY_GEN
CKM_GOST_CIPHER_ECB
CKM_GOST_CIPHER_CBC
CKM_GOST_CIPHER_CTR
CKM_GOST_CIPHER_OFB
CKM_GOST_CIPHER_CFB
CKM_GOST_CIPHER_OMAC
CKM_GOST_CIPHER_KEY_WRAP
CKM_GOST_CIPHER_ACPKM_CTR
CKM_GOST_CIPHER_ACPKM_OMAC
CKM_GOST28147_KEY_GEN
CKM_GOST28147
CKM_GOST28147_KEY_WRAP
CKM_GOST28147_PKCS8_KEY_WRAP
CKM_GOST_CIPHER_PKCS8_KEY_WRAP
CKM_GOST28147_ECB
CKM_GOST28147_CNT
CKM_GOST28147_MAC
CKM_KUZNYECHIK_KEY_GEN
CKM_KUZNYECHIK_ECB
CKM_KUZNYECHIK_CBC
CKM_KUZNYECHIK_CTR
CKM_KUZNYECHIK_OFB
CKM_KUZNYECHIK_CFB
CKM_KUZNYECHIK_OMAC
CKM_KUZNYECHIK_KEY_WRAP
CKM_KUZNYECHIK_ACPKM_CTR
CKM_KUZNYECHIK_ACPKM_OMAC
CKM_MAGMA_KEY_GEN
CKM_MAGMA_ECB
CKM_MAGMA_CBC
CKM_MAGMA_CTR
CKM_MAGMA_OFB
CKM_MAGMA_CFB
CKM_MAGMA_OMAC
CKM_MAGMA_KEY_WRAP
CKM_MAGMA_ACPKM_CTR
CKM_MAGMA_ACPKM_OMAC
CKM_GOSTR3411
CKM_GOSTR3411_12_256
CKM_GOSTR3411_12_512
CKM_GOSTR3411_HMAC
CKM_GOSTR3411_12_256_HMAC
CKM_GOSTR3411_12_512_HMAC
CKM_PKCS5_PBKD2
CKM_PBA_GOSTR3411_WITH_GOSTR3411_HMAC
CKM_TLS_GOST_KEY_AND_MAC_DERIVE
CKM_TLS_GOST_PRE_MASTER_KEY_GEN
CKM_TLS_GOST_MASTER_KEY_DERIVE
CKM_TLS_GOST_PRF
CKM_TLS_GOST_PRF_2012_256
CKM_TLS_GOST_PRF_2012_512
CKM_TLS12_MASTER_KEY_DERIVE
CKM_TLS12_KEY_AND_MAC_DERIVE
CKM_TLS_MAC
CKM_TLS_KDF
CKM_TLS_TREE_GOSTR3411_2012_256
CKM_EXTRACT_KEY_FROM_KEY
CKM_SHA_1
CKM_MD5
$
рд╣рдо рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдЕрдЧрд▓реЗ рдирдП рдлрд╝реАрдЪрд░ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВ:
set listcertsder [pki::pkcs11::listcertsder $handle $slotid]
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдмрд┐рдирд╛ рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╕рд╡рд╛рд▓ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдарддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореМрдЬреВрджрд╛ рдлрд╝рдВрдХреНрд╢рди pki :: pkcs11 :: listcerts рд╕реЗ рдХреИрд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди :: pki рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реМрдЯрд╛рдП рдЧрдП рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ cert_der рддрддреНрд╡ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реНрдг рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХреЛрдИ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЙрд╕рдХрд╛ рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдкрд╣рд▓реЗ, рдореБрдЭреЗ tbs рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдЙрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рдкреВрд░реНрдг рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдерд╛ред рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд▓рд┐рдП рд▓реМрдЯреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:
. . . array set derc [[pki::pkcs11::listcertsder $handle $slotid] 0] parray derc derc(cert_der) = 3082064a тАж derc(pkcs11_handle) = pkcsmod0 derc(pkcs11_id) = 5882d64386211cf3a8367d2f87659f9330e5605d derc(pkcs11_label) = Thenderbird-60 derc(pkcs11_slotid) = 0 derc(type) = pkcs11 . . .
Pkcs11_id рддрддреНрд╡ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рд╕реЗ SHA-1 рд╣реИрд╢ рдХрд╛ рдорд╛рди CKA_ID рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред Cert_der рддрддреНрд╡ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ CKA_VALUE рд╣реИ, pkcs11_label CKA_LABEL рд╣реИред
Pkcs11_id рддрддреНрд╡ (PKCS # 11 рдорд╛рдирдХ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ CKA_ID), pkcs11_handle рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде, рдФрд░ pkcs11_slotid рдХреЗ рд╕рд╛рде рд╕реНрд▓реЙрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЯреЛрдХрди рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреБрдВрдЬреА рдФрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░
рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдореБрдЦ рддрддреНрд╡ рдХреЛ рдЯреЛрдХрди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдпрд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓реЗрдмрд▓ (pkcs11_label) рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдлрд╝реЙрд░реНрдо рдХреА рдПрдХ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
pki::pkcs11::rname <cert|key|all> < >
рдХрд┐рд╕реА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдпрд╛ рдХреБрдВрдЬреА рдХреЛ рдЯреЛрдХрди рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдкрддреНрд░ рдХреА рдПрдХ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:
pki::pkcs11::delete <cert|key|all> < >
рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ:
set listparam {} lappend listparam pkcs11_handle lappend listparam $handle lappend listparam pkcs11_slotid lappend listparam $pkcs11_slotid lappend listparam pkcs11_id lappend listparam $pkcs11_id
рдЖрджрд┐
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рд╣рдо рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдФрд░ рдЙрд╕рд╕реЗ рдЬреБрдбрд╝реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ):
pki::pkcs11::delete all $listparam
рдкрд╛рдардХ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕реВрдЪреА рдХреЛ рдПрдХ рдбрд┐рдХреНрд╢рдирд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
set listparam [dict create pkcs11_handle $pkcs11_handle] dict set listparam pkcs11_slotid $pkcs11_slotid) dict set listparam pkcs11_id $pkcs11_id
рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ pkcs11_handle рдФрд░ pkcs11_slotid рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рдЯреЛрдХрди рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╢реЗрд╖ рд░рдЪрдирд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
рдЯреЛрдХрди рдкрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
set pkcs11_id_cert [::pki::pkcs11::importcert <cert_der_hex> < >
рдлрд╝рдВрдХреНрд╢рди рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдореЗрдВ CKA_ID рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдореБрдЦреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рдЯреЛрдХрди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕ рдкрд░ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛:
{pkcs11_handle <handle> pkcs11_slotid <slotid>}
рдЖрдЧреЗ рд╣рдорд╛рд░реА рд╣реИрд╢ рдЧрдгрдирд╛ рд╣реИред рд░реВрд╕реА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рдЖрдЬ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- GOST R 34.11-94
- GOST R 34 .11-2012 256 рдмрд┐рдЯ рдХреЗ рд╣реИрд╢ рдорд╛рди (stribog256) рдХреЗ рд╕рд╛рде
- GOST R 34 .11-2012 512 рдмрд┐рдЯреНрд╕ рдХрд╛ рд╣реИрд╢ рдорд╛рди (stribog512)
рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕рд╛ рд╣реИрд╢ рдЯреЛрдХрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рди pki :: pkcs11 :: listmechs рд╣реИред
рд╣реИрд╢ рдЧрдгрдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рдореНрди рд░реВрдк рд╣реИ:
set <> [pki::pkcs11::digest <gostr3411|stribog256|stribog512|sha1> < > < >]
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЧрдгрдирд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
. . . set listparam [dict create pkcs11_handle $pkcs11_handle] dict set listparam pkcs11_slotid $pkcs11_slotid set res_hex [pki::pkcs11::digest stribog256 0123456789 $listparam] puts $res_hex 086f2776f33aae96b9a616416b9d1fe9a049951d766709dbe00888852c9cc021
рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП
рд░реВрд╕реА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЦреБрд▓рддрд╛ рд╣реИ :
$ echo -n "0123456789"|/usr/local/lirssl_csp_64/bin/lirssl_s tatic dgst -md_gost12_256 (stdin)= 086f2776f33aae96b9a616416b9d1fe9a0499 51d766709dbe00888852c9 cc021 $
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реИред
рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд╛рд╣реЗ рд╡рд╣ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реЛ рдпрд╛ рдирд┐рд░рд╕реНрдд рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреА рд╕реВрдЪреА рд╣реЛ рдпрд╛ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛ, рд╣рдореЗрдВ рдЕрдм рдХреЗрд╡рд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рддреНрдпрд╛рдкрди рд╕рдорд╛рд░реЛрд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
set result [pki::pkcs11::verify < > < > < >]]
рдпрджрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдиреЗ рд╕рддреНрдпрд╛рдкрди рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ 1 рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ; рдЕрдиреНрдпрдерд╛, рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реНрд╡рдпрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИрд╢, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ (рдореВрд▓реНрдп, рдкреНрд░рдХрд╛рд░ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ) рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред ред Publickeyinfo asn1 рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдВрдЬреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
lpkar (pkcs11_handle) = pkcsmod0
lpkar (pkcs11_slotid) = 0
lpkar (pubkeyinfo) = 301f06082a850307010101010101306072a85030202040
006082a8503070101020203430004407d9306687af5a8e63af4b09443ed2e03794be
10eba6627bf5fb3da1bb474a3507d2ce2cd24b63c727a02521897d1dd6edbdc7084d
8886a39289c3f81bdf2e179
ASN1 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рд╕рдВрд░рдЪрдирд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реЗ рд▓реА рдЧрдИ рд╣реИ:
proc ::pki::x509::parse_cert_pubkeyinfo {cert_hex} { array set ret [list] set wholething [binary format H* $cert_hex] ::asn::asnGetSequence wholething cert ::asn::asnPeekByte cert peek_tag if {$peek_tag != 0x02} { # Version number is optional, if missing assumed to be value of 0 ::asn::asnGetContext cert - asn_version ::asn::asnGetInteger asn_version ret(version) } ::asn::asnGetBigInteger cert ret(serial_number) ::asn::asnGetSequence cert data_signature_algo_seq ::asn::asnGetObjectIdentifier data_signature_algo_seq ret(data_signature_algo) ::asn::asnGetSequence cert issuer ::asn::asnGetSequence cert validity ::asn::asnGetUTCTime validity ret(notBefore) ::asn::asnGetUTCTime validity ret(notAfter) ::asn::asnGetSequence cert subject ::asn::asnGetSequence cert pubkeyinfo binary scan $pubkeyinfo H* ret(pubkeyinfo) return $ret(pubkeyinfo) }
рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рда рд╕реНрдерд┐рдд рд╣реИ
рдпрд╣рд╛рдВ #! /usr/bin/env tclsh package require pki lappend auto_path . package require pki::pkcs11 # PKCS#11 #set pkcs11_module "/usr/local/lib/libcackey.so" #set pkcs11_module "/usr/local/lib64/librtpkcs11ecp_2.0.so" set pkcs11_module "/usr/local/lib64/libls11sw2016.so" puts "Connect the Token and press Enter" gets stdin yes set handle [pki::pkcs11::loadmodule $pkcs11_module] set slots [pki::pkcs11::listslots $handle] 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 token_slotlabel $slotlabel set token_slotid $slotid # break } } # PEM DER proc ::cert_to_der {data} { if {[string first "-----BEGIN CERTIFICATE-----" $data] != -1} { set data [string map {"\r\n" "\n"} $data] } array set parsed_cert [::pki::_parse_pem $data "-----BEGIN CERTIFICATE-----" "-----END CERTIFICATE-----"] if {[string range $parsed_cert(data) 0 0 ] == "0" } { # DER- "0" == 0x30 set asnblock $parsed_cert(data) } else { set asnblock "" } return $asnblock } proc usage {use error} { puts "Copyright(C) Orlov Vladimir (http://soft.lissi.ru) 2019" if {$use == 1} { puts $error puts "Usage:\nverify_cert_with_pkcs11 <file with certificate> \[<file with CA certificate>\]\n" } } set countcert [llength $argv] if { $countcert < 1 || $countcert > 2 } { usage 1 "Bad usage!" exit } set file [lindex $argv 0] if {![file exists $file]} { usage 1 "File $file not exist" exit } # cert_user puts "Loading user certificate: $file" set fd [open $file] chan configure $fd -translation binary set cert_user [read $fd] close $fd if {$cert_user == "" } { usage 1 "Bad file with certificate user: $file" exit } set cert_user [cert_to_der $cert_user] if {$cert_user == ""} { puts "User certificate bad" exit } catch {array set cert_parse [::pki::x509::parse_cert $cert_user]} if {![info exists cert_parse]} { puts "User certificate bad" exit } #parray cert_parse if {$countcert == 1} { if {$cert_parse(issuer) != $cert_parse(subject)} { puts "Bad usage: not self signed certificate" } else { set cert_CA $cert_user } } else { set fileca [lindex $argv 1] if {![file exists $fileca]} { usage 1 "File $fileca not exist" exit } # cert_CA puts "Loading CA certificate: $fileca" set fd [open $fileca] chan configure $fd -translation binary set cert_CA [read $fd] close $fd if {$cert_CA == "" } { usage 1 "Bad file with certificate CA=$fileca" exit } set cert_CA [cert_to_der $cert_CA] if {$cert_CA == ""} { puts "CA certificate bad" exit } } 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 token_slotlabel $slotlabel set token_slotid $slotid } } # #array set cert_parse_CA [::pki::x509::parse_cert $cert_CA] catch {array set cert_parse_CA [::pki::x509::parse_cert $cert_CA]} #array set cert_parse_CA [::pki::x509::parse_cert $cert_CA_256] #array set cert_parse_CA [::pki::x509::parse_cert $CA_12_512] if {![info exists cert_parse_CA]} { puts "CA certificate bad" exit } ############################### set aa [dict create pkcs11_handle $handle pkcs11_slotid $token_slotid] set tbs_cert [binary format H* $cert_parse(cert)] #puts "SIGN_ALGO1=$cert_parse(signature_algo)" catch {set signature_algo_number [::pki::_oid_name_to_number $cert_parse(signature_algo)]} if {![info exists signature_algo_number]} { set signature_algo_number $cert_parse(signature_algo) } #puts "SIGN_ALGO=$signature_algo_number" switch -- $signature_algo_number { "1.2.643.2.2.3" - "1 2 643 2 2 3" { # "GOST R 34.10-2001 with GOST R 34.11-94" set digest_algo "gostr3411" } "1.2.643.7.1.1.3.2" - "1 2 643 7 1 1 3 2" { # "GOST R 34.10-2012-256 with GOSTR 34.11-2012-256" set digest_algo "stribog256" } "1.2.643.7.1.1.3.3" - "1 2 643 7 1 1 3 3" { # "GOST R 34.10-2012-512 with GOSTR 34.11-2012-512" set digest_algo "stribog512" } default { puts " :$signature_algo_number" exit } } # tbs-!!!! set digest_hex [pki::pkcs11::digest $digest_algo $tbs_cert $aa] puts "digest_hex=$digest_hex" puts [string length $digest_hex] # asn- # binary scan $cert_CA H* cert_CA_hex array set infopk [pki::pkcs11::pubkeyinfo $cert_CA_hex [list pkcs11_handle $handle pkcs11_slotid $token_slotid]] parray infopk set lpk [dict create pkcs11_handle $handle pkcs11_slotid $token_slotid] # pybkeyinfo lappend lpk "pubkeyinfo" #lappend lpk $pubinfo lappend lpk $infopk(pubkeyinfo) array set lpkar $lpk parray lpkar puts "Enter PIN user for you token \"$token_slotlabel\":" #set password "01234567" gets stdin password if { [pki::pkcs11::login $handle $token_slotid $password] == 0 } { puts "Bad password" exit } if {[catch {set verify [pki::pkcs11::verify $digest_hex $cert_parse(signature) $lpk]} res] } { puts $res exit } if {$verify != 1} { puts "BAD SIGNATURE=$verify" } else { puts "SIGNATURE OK=$verify" } puts "!" exit
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЙрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
$./verify_cert_with_pkcs11.tcl Copyright(C) Orlov Vladimir (http://museum.lissi-crypto.ru/) Usage: verify_cert_with_pkcs11 <file with certificate> <file with CA certificate> $
рдПрдХ рдЪрдорддреНрдХрд╛рд░, рдЯреЛрдХрди рдкрд░ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ PKCS # 11 рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдорд╢реАрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рд╣рдордиреЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдФрд░ рдПрдХ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, pki :: pkcs11 :: listcerderder рдкреИрдХреЗрдЬ рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рд╣реЛрдорд╡рд░реНрдХ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
TclPKCS11v.1.0.1 рдкреИрдХреЗрдЬ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдПрдХ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдЖрдпрд╛рдд рдХрд░рдиреЗ, рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдПрдХ рдЯреЛрдХрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдФрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓реЗрдмрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдЖрджрд┐ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдкреНрд░рдорд╛рдг рдкрддреНрд░
рджреЗрдЦрдиреЗ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА
рдЧрдИ рд╣реИ :

рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рддреНрдпрд╛рдкрди рд╣реИ:

рдЪреМрдХрд╕ рдкрд╛рдардХ рдиреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдиреЛрдЯ рдХрд┐рдпрд╛ рдХрд┐ рдХреБрдВрдЬреА рдЬреЛрдбрд╝реА рдХреА рдкреАрдврд╝реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ TclPKCS11 рдкреИрдХреЗрдЬ рдореЗрдВ рднреА рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИ:
array set genkey [pki::pkcs11::keypair < > <> < >]
TclPKCS11 рдкреИрдХреЗрдЬ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдХреБрдВрдЬреА рдЬреЛрдбрд╝реА рдмрдирд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдкрд░ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА, рдЬрдм рдЙрдкрдпреЛрдЧрд┐рддрд╛ PKCS # 11 рдЯреЛрдХрди рдкрд░ рдПрдХ рдкреНрд░рдореБрдЦ рдЬреЛрдбрд╝реА рдХреА рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде рдПрдХ рдпреЛрдЧреНрдп рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧреА, рдПрдХ рдкреНрд░рдорд╛рдгрди рдХреЗрдВрджреНрд░ (
CA ) рдореЗрдВ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЯреЛрдХрди рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдЧрд╛:

рдЙрд╕реА рд▓реЗрдЦ рдореЗрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЕрдВрддрд┐рдо рд▓реЗрдЦ рд╣реЛрдЧрд╛ред рдЕрдЧрд▓рд╛, рд░реВрдмреА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд░реВрд╕реА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдЬреЛ рдЕрдм рдлреИрд╢рди рдореЗрдВ рд╣реИред рдЬрд▓реНрдж рдорд┐рд▓рддреЗ рд╣реИрдВ!