[성현모] VPKI 프로젝트 Import
This commit is contained in:
299
Projects/VPKI/Doc/(20241220) 인증서 샘플.txt
Normal file
299
Projects/VPKI/Doc/(20241220) 인증서 샘플.txt
Normal file
@ -0,0 +1,299 @@
|
||||
774A556D397664454E424D4441794D4341584454497A4D44457A4D4441794E54417A4D316F59447A
|
||||
49774F444D774D544D774D5451314F545535576A41384D517377435159445651514745774A4C556A
|
||||
454E4D41734741315545436777455345744E517A454D4D416F47413155454377774452554E444D52
|
||||
4177446759445651514444416444515441784D4441794D4947624D42414742797147534D34394167
|
||||
4547425375424241416A4134474741415142304F745A642B786D52794F347A565A7867337348562B
|
||||
547344712F65557131306771445538556764574F583264715339454C4731617458376A5A2F423747
|
||||
6A706B4D2B69486B6657543248416471355562446F38687130426E69736142784B35474345333951
|
||||
6E36525274754361427875786D53644C55556A2F32464E756E37656E467A6C4C3868735974334D4B
|
||||
34694B34594C49366962615655767565676559524B596169355873634150676B616A676267776762
|
||||
5577496759445652306A4151482F42426777466F4155525452665953546A4A50327542514C384761
|
||||
546B754E5A5A2F4C4177494159445652304F4151482F424259454641594D54446243516755657245
|
||||
574351584131377437722F4344794D41344741315564447745422F77514541774942426A41534267
|
||||
4E5648524D4241663845434441474151482F416745414D456B4741315564487745422F77512F4D44
|
||||
30774F3641356F4465474E576830644841364C79396A636D77756147316A6132316A4C6D4E764C6D
|
||||
74794C3056445179395362323930513045774D44497659584A734C30467962444645634445755933
|
||||
4A734D416F4743437147534D343942414D454134474D4144434269414A434150573267576362724A
|
||||
64684F50624847695848487253426956387A3542534C7A6D48466E346A6D736D464F725670414356
|
||||
5A5463545867306F64667567396979492B4F6A544932796A384D7164634770666433435A7538416B
|
||||
4942617A53476C38477169436937644A62333436592F3154464C6731345237365556473245616851
|
||||
4965747034486A38535A744E386548635672586D6D2B6B734C384F4B794D68396C63355332716D54
|
||||
6368315A785939426B3DFF16"}}
|
||||
2024-12-20 16:14:03>>vPKI Recv Command : VPKI_CSRGEN_20PRVC
|
||||
2024-12-20 16:14:03>>vPKI Recv Data : 1741_1:9C36F803D974:04013D1C88A8A2D53F980F
|
||||
B2F80326D34FAED31E95326DAAEBBFBB1B8A515EA5032EE27D424098390F25E4E958A84D957ABADA
|
||||
0CE1D32E7D2C81E196B81BF3A4F1E342019B5393E62CA67A0D955B5DB8DA137D6B760FBD2BE1F157
|
||||
62D87590B90E83235FA02FAC86D47179CC8CF196B55EBDB5A51603A446E83DAEE2346A05680C0A84
|
||||
45A1:P:2:OEM20:KM7:C001:P002
|
||||
VPKI <<<<<<<<<< Request Message : {
|
||||
"iftid":"1741_1",
|
||||
"publickey":"BAE9HIiootU/mA+y+AMm00+u0x6VMm2q67+7G4pRXqUDLuJ9QkCYOQ8l5OlYqE2Verr
|
||||
aDOHTLn0sgeGWuBvzpPHjQgGbU5PmLKZ6DZVbXbjaE31rdg+9K+HxV2LYdZC5DoMjX6AvrIbUcXnMjPG
|
||||
WtV69taUWA6RG6D2u4jRqBWgMCoRFoQ==",
|
||||
|
||||
"cnInfo" : {
|
||||
"macaddr":"63C907FC268B",
|
||||
"wmi":"KM7",
|
||||
"idType":"P",
|
||||
"supplierId":"2"
|
||||
},
|
||||
"certInfo" : {
|
||||
"dc":"OEM20",
|
||||
"unitCode":"C001",
|
||||
"tierCode":"P002"
|
||||
}
|
||||
}
|
||||
2024-12-20 16:14:03>>vPKI Result : True
|
||||
2024-12-20 16:14:03>>vPKI Send Data : {"status":"success","message":"","data":{"
|
||||
hashedtbscsr":"1C7A8BDCC84AEC06475AC368CBD16D9F8A831D52E28BE54B755B4678DEBBA701A
|
||||
125645883C65B2578EC90938E89F70235680595E4F3AB221F324E6D2C0508E5C029","pcid":"004
|
||||
B4D37503239433336463830334439373433FE1E"}}
|
||||
2024-12-20 16:14:07>>vPKI Recv Command : VPKI_CERTPUB_20PRVC
|
||||
2024-12-20 16:14:07>>vPKI Recv Data : 1741_1:00BE8C9F418D3A965CB5E0C30FE3BF8D6D9
|
||||
E5E3C394C04576C3DDD8C73DB9E03A5845C2C1E7D22B289AF40FDD525AF5B13498C70D87906A8B78
|
||||
BA8FC0FC685231957003BA56F4A658C5F40A4EBCB110E2CA2BE69430D2A96795E8E8E02292BA791F
|
||||
C7C05B03A5977FD4D8D52E60256B592DC4C6F6B72E7056095788BF545CF2CF99D9804:C001:P002:
|
||||
SV EV:EU:KMC
|
||||
VPKI <<<<<<<<<< Request Message : {"iftid":"1741_1","csrsignature":"AL6Mn0GNOpZc
|
||||
teDDD+O/jW2eXjw5TARXbD3djHPbngOlhFwsHn0isomvQP3VJa9bE0mMcNh5Bqi3i6j8D8aFIxlXADul
|
||||
b0pljF9ApOvLEQ4sor5pQw0qlnlejo4CKSunkfx8BbA6WXf9TY1S5gJWtZLcTG9rcucFYJV4i/VFzyz5
|
||||
nZgE","unitCode":"C001","tierCode":"P002","vehicleCode":"SV EV","localCode":"EU"
|
||||
,"brandCode":"KMC"}
|
||||
2024-12-20 16:14:08>>vPKI Result : True
|
||||
2024-12-20 16:14:08>>vPKI Send Data : {"status":"success","message":"","data":{"
|
||||
leafcertificate":"4D49494337444343416B326741774942416749554244692F742B35685A4675
|
||||
75326848357A616F3833546A6B7A717377436759494B6F5A497A6A3045417751775044454C4D416B
|
||||
474131554542684D43533149784454414C42674E5642416F4D4245684C54554D784444414B42674E
|
||||
564241734D41305644517A45514D4134474131554541777748513045774D5441774D6A4167467730
|
||||
794E4445794D6A41774E7A45304D446461474138794D4455304D5449794D4445304E546B314F566F
|
||||
77627A45564D424D4743676D534A6F6D543869786B41526B5742553946545449774D513077437759
|
||||
445651514B44415249533031444D517777436759445651514C44414E4651304D784454414C42674E
|
||||
564241734D42454D774D4445784454414C42674E564241734D424641774D444978477A415A42674E
|
||||
5642414D4D456B744E4E3141794F554D7A4E6B59344D444E454F5463304D7A43426D7A4151426763
|
||||
71686B6A4F50514942426755726751514149774F426867414541543063694B696931542B5944374C
|
||||
344179625454363754487055796261727276377362696C466570514D75346E3143514A6735447958
|
||||
6B3656696F545A563675746F4D34644D7566537942345A6134472F4F6B38654E43415A74546B2B59
|
||||
73706E6F4E6C567464754E6F54665774324437307234664658597468316B4C6B4F67794E666F432B
|
||||
73687452786563794D385A613158723231705259447045626F506137694E476F466141774B684557
|
||||
686F3447304D4947784D43494741315564497745422F7751594D4261414641594D54446243516755
|
||||
657245574351584131377437722F4344794D43414741315564446745422F77515742425270745744
|
||||
76545645306B30684D37646935374F6E39374A6751766A414F42674E56485138424166384542414D
|
||||
434134677744415944565230544151482F424149774144424C42674E564852384241663845515441
|
||||
2F4D4432674F364135686A646F644852774F69387659334A734C6D6874593274745979356A627935
|
||||
726369394651304D76513045774D5441774D69396A636D777651334A734D584178524841794E7A63
|
||||
7559334A734D416F4743437147534D343942414D454134474D4144434269414A43414C696B33576C
|
||||
37622F325670666479646E726253494948364A4F41367844306451686A6C5A5538434F42456F4E35
|
||||
4C4D686B646B38655449345574374C38392B707A676B714D4F5478474854684F455139744B735148
|
||||
4B416B49425868713036347A495132434F5657473263597A46776D486C734A327A39424337583961
|
||||
615A6E416A396E4E71562F77685A646172486B4765633150525A58734273726C666A3867426F6F43
|
||||
4A532B374F387763686B50773D6D6D","subcacertificate":"4D494943767A4343416943674177
|
||||
494241674955447379486F345A3973554E4D4E71794C4542433148426D4A6A444977436759494B6F
|
||||
5A497A6A304541775177506A454C4D416B474131554542684D43533149784454414C42674E564241
|
||||
6F4D4245684C54554D784444414B42674E564241734D41305644517A45534D424147413155454177
|
||||
774A556D397664454E424D4441794D4341584454497A4D44457A4D4441794E54417A4D316F59447A
|
||||
49774F444D774D544D774D5451314F545535576A41384D517377435159445651514745774A4C556A
|
||||
454E4D41734741315545436777455345744E517A454D4D416F47413155454377774452554E444D52
|
||||
4177446759445651514444416444515441784D4441794D4947624D42414742797147534D34394167
|
||||
4547425375424241416A4134474741415142304F745A642B786D52794F347A565A7867337348562B
|
||||
547344712F65557131306771445538556764574F583264715339454C4731617458376A5A2F423747
|
||||
6A706B4D2B69486B6657543248416471355562446F38687130426E69736142784B35474345333951
|
||||
6E36525274754361427875786D53644C55556A2F32464E756E37656E467A6C4C3868735974334D4B
|
||||
34694B34594C49366962615655767565676559524B596169355873634150676B616A676267776762
|
||||
5577496759445652306A4151482F42426777466F4155525452665953546A4A50327542514C384761
|
||||
546B754E5A5A2F4C4177494159445652304F4151482F424259454641594D54446243516755657245
|
||||
574351584131377437722F4344794D41344741315564447745422F77514541774942426A41534267
|
||||
4E5648524D4241663845434441474151482F416745414D456B4741315564487745422F77512F4D44
|
||||
30774F3641356F4465474E576830644841364C79396A636D77756147316A6132316A4C6D4E764C6D
|
||||
74794C3056445179395362323930513045774D44497659584A734C30467962444645634445755933
|
||||
4A734D416F4743437147534D343942414D454134474D4144434269414A434150573267576362724A
|
||||
64684F50624847695848487253426956387A3542534C7A6D48466E346A6D736D464F725670414356
|
||||
5A5463545867306F64667567396979492B4F6A544932796A384D7164634770666433435A7538416B
|
||||
4942617A53476C38477169436937644A62333436592F3154464C6731345237365556473245616851
|
||||
4965747034486A38535A744E386548635672586D6D2B6B734C384F4B794D68396C63355332716D54
|
||||
6368315A785939426B3DFF16"}}
|
||||
2024-12-20 16:14:14>>vPKI Recv Command : VPKI_CSRGEN_20VHCC
|
||||
2024-12-20 16:14:14>>vPKI Recv Data : 1741_2:9C36F803D973:0400A14E56526E254A64C5
|
||||
96812D6FBB0507DBA657E9AF035CAE3C96136AA1B66BEAC61D7058C0B6C6D47E981837A9FD5C70BE
|
||||
C3DF5E146F241A80E9D7A2B26BEB7066012E21B099935158DB8C618A238E556BD4B83B3742AF173E
|
||||
375814344ECF124D55E49F1987C0BB3A5B7DEA2A2B49284E8F1E13FB428F1257A3F3E6F7ECF2A5A1
|
||||
F002:V:2:EV:KM7:C001:P002
|
||||
VPKI <<<<<<<<<< Request Message : {
|
||||
"iftid":"1741_2",
|
||||
"publickey":"BAChTlZSbiVKZMWWgS1vuwUH26ZX6a8DXK48lhNqobZr6sYdcFjAtsbUfpgYN6n9XHC
|
||||
+w99eFG8kGoDp16Kya+twZgEuIbCZk1FY24xhiiOOVWvUuDs3Qq8XPjdYFDROzxJNVeSfGYfAuzpbfeo
|
||||
qK0koTo8eE/tCjxJXo/Pm9+zypaHwAg==",
|
||||
|
||||
"cnInfo" : {
|
||||
"macaddr":"63C907FC268C",
|
||||
"wmi":"KM7",
|
||||
"idType":"V",
|
||||
"supplierId":"2"
|
||||
},
|
||||
"certInfo" : {
|
||||
"dc":"EV",
|
||||
"unitCode":"C001",
|
||||
"tierCode":"P002"
|
||||
}
|
||||
}
|
||||
2024-12-20 16:14:14>>vPKI Result : True
|
||||
2024-12-20 16:14:14>>vPKI Send Data : {"status":"success","message":"","data":{"
|
||||
hashedtbscsr":"60F661F9DF687F9A0DEAD196C50E719E0A7FC2BFE68355A5502515DAF97EDC34A
|
||||
9270E8FC55B926D984F819D4E71FF91CAD4DA7C2A91B593BBC4FB38F5AF12B740DD","evccId":"0
|
||||
04B4D37563230303943333646383033443937333151FA"}}
|
||||
2024-12-20 16:14:18>>vPKI Recv Command : VPKI_CERTPUB_20VHCC
|
||||
2024-12-20 16:14:18>>vPKI Recv Data : 1741_2:006E01AC4969FA3736C93289A151FC633CE
|
||||
EC383B4912956ECB1185236960DB79BB02C23B89185D3A0854B3E5B07FC3D932322BD7D527290866
|
||||
9420F8507551DD91C01B514EB2B9DC175FE7EC968F6AED7EC55FD494105527C9DE72E1B4E6EEDCA5
|
||||
002D84CB7F6C7B7A1A73B9217690AB22003262E26E8AC993BC7192C3E67724CCAA2D2:C001:P002:
|
||||
SV EV:EU:KMC
|
||||
VPKI <<<<<<<<<< Request Message : {"iftid":"1741_2","csrsignature":"AG4BrElp+jc2
|
||||
yTKJoVH8Yzzuw4O0kSlW7LEYUjaWDbebsCwjuJGF06CFSz5bB/w9kyMivX1ScpCGaUIPhQdVHdkcAbUU
|
||||
6yudwXX+fslo9q7X7FX9SUEFUnyd5y4bTm7tylAC2Ey39se3oac7khdpCrIgAyYuJuismTvHGSw+Z3JM
|
||||
yqLS","unitCode":"C001","tierCode":"P002","vehicleCode":"SV EV","localCode":"EU"
|
||||
,"brandCode":"KMC"}
|
||||
2024-12-20 16:14:19>>vPKI Result : True
|
||||
2024-12-20 16:14:19>>vPKI Send Data : {"status":"success","message":"","data":{"
|
||||
leafcertificate":"4D49494444444343416D3667417749424167495542422B693933794C4C6451
|
||||
665578387A725A6472527A327030453077436759494B6F5A497A6A3045417751775044454C4D416B
|
||||
474131554542684D43533149784454414C42674E5642416F4D4245684C54554D784444414B42674E
|
||||
564241734D41305644517A45514D4134474131554541777748513045774D5441774D7A4167467730
|
||||
794E4445794D6A41774E7A45304D546861474138794D4455304D5449794D4445304E546B314F566F
|
||||
77626A45534D42414743676D534A6F6D543869786B41526B57416B56574D51307743775944565151
|
||||
4B44415249533031444D517777436759445651514C44414E4651304D784454414C42674E56424173
|
||||
4D42454D774D4445784454414C42674E564241734D424641774D4449784854416242674E5642414D
|
||||
4D4645744E4E3159794D444135517A4D32526A67774D3051354E7A4D784D4947624D424147427971
|
||||
47534D343941674547425375424241416A41344747414151416F553557556D346C536D54466C6F45
|
||||
74623773464239756D562B6D7641317975504A595461714732612B724748584259774C6247314836
|
||||
59474465702F56787776735066586852764A42714136646569736D7672634759424C6947776D5A4E
|
||||
52574E754D59596F6A6A6C5672314C67374E304B76467A343357425130547338535456586B6E786D
|
||||
48774C7336573333714B69744A4B45365048685037516F38535636507A357666733871576838414B
|
||||
6A6764597767644D77496759445652306A4151482F42426777466F41556A5172506F674B334C392B
|
||||
6546686F577268795334306D67644C4177494159445652304F4151482F4242594546486E76355263
|
||||
79524B34456D72546B58307057473974453673314D4D41344741315564447745422F775145417749
|
||||
446944414D42674E5648524D4241663845416A41414D434147413155644A5145422F7751574D4251
|
||||
47434373474151554642774D42426767724267454642516344416A424C42674E5648523842416638
|
||||
455154412F4D4432674F364135686A646F644852774F69387659334A734C6D687459327474597935
|
||||
6A627935726369394651304D76513045774D5441774D79396A636D777651334A734D584178524841
|
||||
794E7A457559334A734D416F4743437147534D343942414D454134474C4144434268774A43414C47
|
||||
6D73443877537572744B4D7474552F7066392F7773574164307456724F516675654B564C774E4B56
|
||||
562F6B6D546B664E4454362F6254736A3258476378484334573235716641497A564C6B4C61593275
|
||||
6B70626F77416B464A70784C4D6D696C724A37636C4338614D5256484550492F726B2F714C727032
|
||||
4D6D7733444C3342794E6E4C79507A622F48494C7441366A6A47344854485874484E73794B34434C
|
||||
5465347A57616F6E55427778554E513D3D7368","subcacertificate":"4D494943766A43434169
|
||||
4367417749424167495544332F57376D6444387545764F3874473532536469564B4A674230774367
|
||||
59494B6F5A497A6A304541775177506A454C4D416B474131554542684D43533149784454414C4267
|
||||
4E5642416F4D4245684C54554D784444414B42674E564241734D41305644517A45534D4241474131
|
||||
55454177774A556D397664454E424D4441794D4341584454497A4D44457A4D44417A4D6A41314E6C
|
||||
6F59447A49774F444D774D544D774D5451314F545535576A41384D51737743515944565151474577
|
||||
4A4C556A454E4D41734741315545436777455345744E517A454D4D416F4741315545437777445255
|
||||
4E444D524177446759445651514444416444515441784D44417A4D4947624D42414742797147534D
|
||||
343941674547425375424241416A413447474141514130654458777A536A4261575446636A673438
|
||||
51747348477263534A346E2B2B2F454237367061425738686641314651337247745A30635652354E
|
||||
506653322B3252317367714A7A364C70477668314C675843562B444738422B4870715345374A6A47
|
||||
614C725568704E30474F6279456D517A6964345949534571416367586F6E68366C2F463743373651
|
||||
73534F6A4D5169675641785A55576B305A3757564769337A4F2B35654B4169466F7A744B536A6762
|
||||
677767625577496759445652306A4151482F42426777466F4155525452665953546A4A5032754251
|
||||
4C384761546B754E5A5A2F4C4177494159445652304F4151482F424259454649304B7A3649437479
|
||||
2F666E685961467134636B754E4A6F4853774D41344741315564447745422F77514541774942426A
|
||||
415342674E5648524D4241663845434441474151482F416745414D456B4741315564487745422F77
|
||||
512F4D4430774F3641356F4465474E576830644841364C79396A636D77756147316A6132316A4C6D
|
||||
4E764C6D74794C3056445179395362323930513045774D44497659584A734C304679624446456344
|
||||
457559334A734D416F4743437147534D343942414D454134474C4144434268774A42415A38577848
|
||||
645146587A52354D42627A424B72453070686B4878584E7467386E634474757361427243634D464C
|
||||
51595155537A6631676D786347485747476842454F7742704E354555396F78374851365030485976
|
||||
344351674559782B51753556786A6E734E6B756538586C396B6146645A703277663564726D6B3637
|
||||
586356374F346C6C436E57612F4C34355053394372704C7038716A78415166666A7271756D59676C
|
||||
4A6E34352B456659654F32413D3D44E7"}}
|
||||
2024-12-20 16:14:20>>vPKI Recv Command : VPKI_CSRGEN_20VHCC
|
||||
2024-12-20 16:14:20>>vPKI Recv Data : 1741_1:9C36F803D974:0400CF153F248D9B3DE131
|
||||
91F2D15761A1C24C865E6C6D053671D14E5CDEFAAFE147DC0377D12BF91C889C93111226B67E1735
|
||||
8554BB1EC901E5C5F237C838DBCB9FE8013B04CE746139DD650B12EE466DC6A9AA83ADD8AA3789BF
|
||||
44983BBB8DE46610717DC01502B1C85D4CF3D41E19CE289031278CD4A9ECE418FB2173A0A198C4B6
|
||||
1A2A:V:2:EV:KM7:C001:P002
|
||||
VPKI <<<<<<<<<< Request Message : {
|
||||
"iftid":"1741_1",
|
||||
"publickey":"BADPFT8kjZs94TGR8tFXYaHCTIZebG0FNnHRTlze+q/hR9wDd9Er+RyInJMREia2fhc
|
||||
1hVS7HskB5cXyN8g428uf6AE7BM50YTndZQsS7kZtxqmqg63YqjeJv0SYO7uN5GYQcX3AFQKxyF1M89Q
|
||||
eGc4okDEnjNSp7OQY+yFzoKGYxLYaKg==",
|
||||
|
||||
"cnInfo" : {
|
||||
"macaddr":"63C907FC268B",
|
||||
"wmi":"KM7",
|
||||
"idType":"V",
|
||||
"supplierId":"2"
|
||||
},
|
||||
"certInfo" : {
|
||||
"dc":"EV",
|
||||
"unitCode":"C001",
|
||||
"tierCode":"P002"
|
||||
}
|
||||
}
|
||||
2024-12-20 16:14:20>>vPKI Result : True
|
||||
2024-12-20 16:14:20>>vPKI Send Data : {"status":"success","message":"","data":{"
|
||||
hashedtbscsr":"6A4CA160E66CFAC87787A941537DE81605112A3193D6965B0AB237D31CCCA89D0
|
||||
CEE06183A06E1ADB0268D03E2CBBBA750FA912431EFD2EC7B02F093B60C02AA9039","evccId":"0
|
||||
04B4D375632303039433336463830334439373436B88A"}}
|
||||
2024-12-20 16:14:23>>vPKI Recv Command : VPKI_CERTPUB_20VHCC
|
||||
2024-12-20 16:14:23>>vPKI Recv Data : 1741_1:00C16067900E18AB976B9844BAE2724BE30
|
||||
79A8CEDA78EADDD100C0BBAFF7F44BF6308629B7F64A09C02FDBEC9D67BCA991B5B7D8524D586147
|
||||
6EB8DAE7C0669829E01803F7345B7B0410E4E7EAA71D32F0848C07A8D643251CD94124B9FDE17353
|
||||
8EC7B95893C9689A9BC0DDF56538BCF0381BB036537A09936CF58CA2190AD36CBD5C2:C001:P002:
|
||||
SV EV:EU:KMC
|
||||
VPKI <<<<<<<<<< Request Message : {"iftid":"1741_1","csrsignature":"AMFgZ5AOGKuX
|
||||
a5hEuuJyS+MHmoztp46t3RAMC7r/f0S/Ywhim39koJwC/b7J1nvKmRtbfYUk1YYUduuNrnwGaYKeAYA/
|
||||
c0W3sEEOTn6qcdMvCEjAeo1kMlHNlBJLn94XNTjse5WJPJaJqbwN31ZTi88DgbsDZTegmTbPWMohkK02
|
||||
y9XC","unitCode":"C001","tierCode":"P002","vehicleCode":"SV EV","localCode":"EU"
|
||||
,"brandCode":"KMC"}
|
||||
2024-12-20 16:14:24>>vPKI Result : True
|
||||
2024-12-20 16:14:24>>vPKI Send Data : {"status":"success","message":"","data":{"
|
||||
leafcertificate":"4D49494444544343416D3667417749424167495542422B6A492B6168637764
|
||||
364E42444C44354E4F5862694531506777436759494B6F5A497A6A3045417751775044454C4D416B
|
||||
474131554542684D43533149784454414C42674E5642416F4D4245684C54554D784444414B42674E
|
||||
564241734D41305644517A45514D4134474131554541777748513045774D5441774D7A4167467730
|
||||
794E4445794D6A41774E7A45304D6A5261474138794D4455304D5449794D4445304E546B314F566F
|
||||
77626A45534D42414743676D534A6F6D543869786B41526B57416B56574D51307743775944565151
|
||||
4B44415249533031444D517777436759445651514C44414E4651304D784454414C42674E56424173
|
||||
4D42454D774D4445784454414C42674E564241734D424641774D4449784854416242674E5642414D
|
||||
4D4645744E4E3159794D444135517A4D32526A67774D3051354E7A51324D4947624D424147427971
|
||||
47534D343941674547425375424241416A41344747414151417A78552F4A493262506545786B664C
|
||||
5256324768776B7947586D787442545A78305535633376717634556663413366524B2F6B63694A79
|
||||
544552496D746E34584E5956557578374A41655846386A66494F4E764C6E2B67424F77544F644745
|
||||
353357554C4575354762636170716F4F74324B6F33696239456D4475376A65526D45484639774255
|
||||
43736368645450505548686E4F4B4A41784A347A5571657A6B47507368633643686D4D5332476971
|
||||
6A6764597767644D77496759445652306A4151482F42426777466F41556A5172506F674B334C392B
|
||||
6546686F577268795334306D67644C4177494159445652304F4151482F4242594546426E4665336F
|
||||
2B69574F7262414236742F724550586257783877774D41344741315564447745422F775145417749
|
||||
446944414D42674E5648524D4241663845416A41414D434147413155644A5145422F7751574D4251
|
||||
47434373474151554642774D42426767724267454642516344416A424C42674E5648523842416638
|
||||
455154412F4D4432674F364135686A646F644852774F69387659334A734C6D687459327474597935
|
||||
6A627935726369394651304D76513045774D5441774D79396A636D777651334A734D584178524841
|
||||
794E7A457559334A734D416F4743437147534D343942414D454134474D4144434269414A43415645
|
||||
386848783248557770714E734856645957326A666677394C776F4E494C3268567A784166796D7730
|
||||
55776B7A52574C564175544771504A56574E683674524551596E776A316C5550682F553241576139
|
||||
3456636C30416B4942544342635A574B6C714A68795178747251534661394F306E56763651485948
|
||||
46734D5557474F7571343753765863646E72676A396F584C7744627A6F43616B2F633175665A674C
|
||||
486E69622B4548623231655434684F453DDC94","subcacertificate":"4D494943766A43434169
|
||||
4367417749424167495544332F57376D6444387545764F3874473532536469564B4A674230774367
|
||||
59494B6F5A497A6A304541775177506A454C4D416B474131554542684D43533149784454414C4267
|
||||
4E5642416F4D4245684C54554D784444414B42674E564241734D41305644517A45534D4241474131
|
||||
55454177774A556D397664454E424D4441794D4341584454497A4D44457A4D44417A4D6A41314E6C
|
||||
6F59447A49774F444D774D544D774D5451314F545535576A41384D51737743515944565151474577
|
||||
4A4C556A454E4D41734741315545436777455345744E517A454D4D416F4741315545437777445255
|
||||
4E444D524177446759445651514444416444515441784D44417A4D4947624D42414742797147534D
|
||||
343941674547425375424241416A413447474141514130654458777A536A4261575446636A673438
|
||||
51747348477263534A346E2B2B2F454237367061425738686641314651337247745A30635652354E
|
||||
506653322B3252317367714A7A364C70477668314C675843562B444738422B4870715345374A6A47
|
||||
614C725568704E30474F6279456D517A6964345949534571416367586F6E68366C2F463743373651
|
||||
73534F6A4D5169675641785A55576B305A3757564769337A4F2B35654B4169466F7A744B536A6762
|
||||
677767625577496759445652306A4151482F42426777466F4155525452665953546A4A5032754251
|
||||
4C384761546B754E5A5A2F4C4177494159445652304F4151482F424259454649304B7A3649437479
|
||||
2F666E685961467134636B754E4A6F4853774D41344741315564447745422F77514541774942426A
|
||||
415342674E5648524D4241663845434441474151482F416745414D456B4741315564487745422F77
|
||||
512F4D4430774F3641356F4465474E576830644841364C79396A636D77756147316A6132316A4C6D
|
||||
4E764C6D74794C3056445179395362323930513045774D44497659584A734C304679624446456344
|
||||
457559334A734D416F4743437147534D343942414D454134474C4144434268774A42415A38577848
|
||||
645146587A52354D42627A424B72453070686B4878584E7467386E634474757361427243634D464C
|
||||
51595155537A6631676D786347485747476842454F7742704E354555396F78374851365030485976
|
||||
344351674559782B51753556786A6E734E6B756538586C396B6146645A703277663564726D6B3637
|
||||
586356374F346C6C436E57612F4C34355053394372704C7038716A78415166666A7271756D59676C
|
||||
4A6E34352B456659654F32413D3D44E7"}}
|
||||
17
Projects/VPKI/Doc/Cert/SubCA/SubCA_P02OEM.pem
Normal file
17
Projects/VPKI/Doc/Cert/SubCA/SubCA_P02OEM.pem
Normal file
@ -0,0 +1,17 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICszCCAlmgAwIBAgIUHxrrBdc1lvNKymblQjb06G6MSJYwCgYIKoZIzj0EAwI
|
||||
wPjELMAkGA1UEBhMCS1IxDTALBgNVBAoMBEhLTUMxDDAKBgNVBAsMA0VDQzESMB
|
||||
AGA1UEAwwJUm9vdENBMDAxMCAXDTE5MDYxMjA2MTUxNVoYDzIwNzkwNjEyMjM1O
|
||||
TU5WjA8MQswCQYDVQQGEwJLUjENMAsGA1UECgwESEtNQzEMMAoGA1UECwwDRUND
|
||||
MRAwDgYDVQQDDAdDQTAxMDAxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB0K
|
||||
uXigZeI7U1McUnjEhYGL4g7zsvyzoNl8SMJ0oPxJgiXka+A37JjK4L/P85bAG7N
|
||||
4C6IYuSem99P0C0vt0K6OCATMwggEvMB8GA1UdIwQYMBaAFLW9YfqauBG22R0cD
|
||||
ywt08OqFD99MB0GA1UdDgQWBBQl67U3b8S3sG1J/ukFKlGcqPpw8DAOBgNVHQ8B
|
||||
Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBBBgNVHR8EOjA4MDagNKAyhjB
|
||||
odHRwOi8vY3JsLmhtY2ttYy5jby5rci9FQ0MvUm9vdC9hcmwvQXJsMURwMS5jcm
|
||||
wwgYUGCCsGAQUFBwEBBHkwdzA7BggrBgEFBQcwAoYvaHR0cDovL2NybC5obWNrb
|
||||
WMuY28ua3IvRUNDL2NlcnQvaGttY3Jvb3RjYS5kZXIwOAYIKwYBBQUHMAGGLGh0
|
||||
dHA6Ly9ydG9jc3AuaG1ja21jLmNvLmtyL0VDQy9PQ1NQL2hrbWNvY3NwMAoGCCq
|
||||
GSM49BAMCA0gAMEUCICfXVV8IhFBXkaOHkg2Wk883y9r3B5rPtDV9JKhUQuBXAi
|
||||
EAug5R/broK+ZjM3vYdU7dndBfMFkOYtCa1NBdq6ie/Fs=
|
||||
-----END CERTIFICATE-----
|
||||
3
Projects/VPKI/Doc/Cert/SubCA/SubCA_P20OEM.pem
Normal file
3
Projects/VPKI/Doc/Cert/SubCA/SubCA_P20OEM.pem
Normal file
@ -0,0 +1,3 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICvzCCAiCgAwIBAgIUDsyHo4Z9sUNMNqyLEBC1HBmJjDIwCgYIKoZIzj0EAwQwPjELMAkGA1UEBhMCS1IxDTALBgNVBAoMBEhLTUMxDDAKBgNVBAsMA0VDQzESMBAGA1UEAwwJUm9vdENBMDAyMCAXDTIzMDEzMDAyNTAzM1oYDzIwODMwMTMwMTQ1OTU5WjA8MQswCQYDVQQGEwJLUjENMAsGA1UECgwESEtNQzEMMAoGA1UECwwDRUNDMRAwDgYDVQQDDAdDQTAxMDAyMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB0OtZd+xmRyO4zVZxg3sHV+TsDq/eUq10gqDU8UgdWOX2dqS9ELG1atX7jZ/B7GjpkM+iHkfWT2HAdq5UbDo8hq0BnisaBxK5GCE39Qn6RRtuCaBxuxmSdLUUj/2FNun7enFzlL8hsYt3MK4iK4YLI6ibaVUvuegeYRKYai5XscAPgkajgbgwgbUwIgYDVR0jAQH/BBgwFoAURTRfYSTjJP2uBQL8GaTkuNZZ/LAwIAYDVR0OAQH/BBYEFAYMTDbCQgUerEWCQXA17t7r/CDyMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMEkGA1UdHwEB/wQ/MD0wO6A5oDeGNWh0dHA6Ly9jcmwuaG1ja21jLmNvLmtyL0VDQy9Sb290Q0EwMDIvYXJsL0FybDFEcDEuY3JsMAoGCCqGSM49BAMEA4GMADCBiAJCAPW2gWcbrJdhOPbHGiXHHrSBiV8z5BSLzmHFn4jmsmFOrVpACVZTcTXg0odfug9iyI+OjTI2yj8MqdcGpfd3CZu8AkIBazSGl8GqiCi7dJb346Y/1TFLg14R76UVG2EahQIetp4Hj8SZtN8eHcVrXmm+ksL8OKyMh9lc5S2qmTch1ZxY9Bk=
|
||||
-----END CERTIFICATE-----
|
||||
3
Projects/VPKI/Doc/Cert/SubCA/SubCA_P20VHC.pem
Normal file
3
Projects/VPKI/Doc/Cert/SubCA/SubCA_P20VHC.pem
Normal file
@ -0,0 +1,3 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICvjCCAiCgAwIBAgIUD3/W7mdD8uEvO8tG52SdiVKJgB0wCgYIKoZIzj0EAwQwPjELMAkGA1UEBhMCS1IxDTALBgNVBAoMBEhLTUMxDDAKBgNVBAsMA0VDQzESMBAGA1UEAwwJUm9vdENBMDAyMCAXDTIzMDEzMDAzMjA1NloYDzIwODMwMTMwMTQ1OTU5WjA8MQswCQYDVQQGEwJLUjENMAsGA1UECgwESEtNQzEMMAoGA1UECwwDRUNDMRAwDgYDVQQDDAdDQTAxMDAzMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA0eDXwzSjBaWTFcjg48QtsHGrcSJ4n++/EB76paBW8hfA1FQ3rGtZ0cVR5NPfS2+2R1sgqJz6LpGvh1LgXCV+DG8B+HpqSE7JjGaLrUhpN0GObyEmQzid4YISEqAcgXonh6l/F7C76QsSOjMQigVAxZUWk0Z7WVGi3zO+5eKAiFoztKSjgbgwgbUwIgYDVR0jAQH/BBgwFoAURTRfYSTjJP2uBQL8GaTkuNZZ/LAwIAYDVR0OAQH/BBYEFI0Kz6ICty/fnhYaFq4ckuNJoHSwMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMEkGA1UdHwEB/wQ/MD0wO6A5oDeGNWh0dHA6Ly9jcmwuaG1ja21jLmNvLmtyL0VDQy9Sb290Q0EwMDIvYXJsL0FybDFEcDEuY3JsMAoGCCqGSM49BAMEA4GLADCBhwJBAZ8WxHdQFXzR5MBbzBKrE0phkHxXNtg8ncDtusaBrCcMFLQYQUSzf1gmxcGHWGGhBEOwBpN5EU9ox7HQ6P0HYv4CQgEYx+Qu5VxjnsNkue8Xl9kaFdZp2wf5drmk67XcV7O4llCnWa/L45PS9CrpLp8qjxAQffjrqumYglJn45+EfYeO2A==
|
||||
-----END CERTIFICATE-----
|
||||
16
Projects/VPKI/Doc/Cert/V2GRoot/CharINV2GRoot.pem
Normal file
16
Projects/VPKI/Doc/Cert/V2GRoot/CharINV2GRoot.pem
Normal file
@ -0,0 +1,16 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICizCCAeygAwIBAgIUQzY4ymMTdB6B5Xz8DeVamTYtPBUwCgYIKoZIzj0EAwQw
|
||||
TjEVMBMGA1UECgwMQ2hhcklOIGUuIFYuMSAwHgYDVQQDDBdDaGFySU4gVjJHIFJv
|
||||
b3QgQ0EgRzFWMjETMBEGCgmSJomT8ixkARkWA1YyRzAgFw0yMjA5MjMxMjUzMzha
|
||||
GA8yMDUyMDkyMzEyNTMzOFowTjEVMBMGA1UECgwMQ2hhcklOIGUuIFYuMSAwHgYD
|
||||
VQQDDBdDaGFySU4gVjJHIFJvb3QgQ0EgRzFWMjETMBEGCgmSJomT8ixkARkWA1Yy
|
||||
RzCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAFs5XQezNOwcM9ys2l3zdNog8hiu
|
||||
cjd2uQmiYLIfwEH9MKS38nRlSreR0E6Xy2d469Zl1ar8YD8D/TgNZdaLQQVCAL2F
|
||||
SVbFe4/pmL14fRm5UWhmRfn61YaR62r+LtZL8ZE2cwiF0LTnqu22Yyf4dqyTTuak
|
||||
y9r1pvvEFHEP1o/VSjkLo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
|
||||
AwIBBjAdBgNVHQ4EFgQUpFmCy+Rrntbt9+0BLBt+iCFl5S0wHwYDVR0jBBgwFoAU
|
||||
pFmCy+Rrntbt9+0BLBt+iCFl5S0wCgYIKoZIzj0EAwQDgYwAMIGIAkIBLFS4GWPn
|
||||
pDiKq69QjCFV3ncA2iD9L+9ak6E9INGgltnyLxJcs3keGc4u0uG3TflAyEtiJC3Q
|
||||
z07JHi7dt1rjr/ECQgCsAkOonJfyY3ji++O4V7pYeEPrXleldpzGfP/iEAs51DPG
|
||||
FJq/8rsZ2FvFxYkimNrWvvk+IXiN3fFOAl63Z5z0Xw==
|
||||
-----END CERTIFICATE-----
|
||||
15
Projects/VPKI/Doc/Cert/V2GRoot/HubjectRootCert.pem
Normal file
15
Projects/VPKI/Doc/Cert/V2GRoot/HubjectRootCert.pem
Normal file
@ -0,0 +1,15 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICTTCCAfOgAwIBAgIQALu7vBrEWtLf5bHYc8NchDAKBggqhkjOPQQDAjBSMQsw
|
||||
CQYDVQQGEwJERTEVMBMGA1UEChMMSHViamVjdCBHbWJIMRMwEQYKCZImiZPyLGQB
|
||||
GRYDVjJHMRcwFQYDVQQDEw5WMkcgUm9vdCBDQSBHMjAgFw0xOTAxMTAxMjU0MjZa
|
||||
GA8yMDU5MDEwOTE5MDAwMFowUjELMAkGA1UEBhMCREUxFTATBgNVBAoTDEh1Ympl
|
||||
Y3QgR21iSDETMBEGCgmSJomT8ixkARkWA1YyRzEXMBUGA1UEAxMOVjJHIFJvb3Qg
|
||||
Q0EgRzIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQI+uelZzJzESGTP2ZkDfA+
|
||||
W0+7O9y0a8gVl0nZnS0Ko5H71VG2aacoUc+GHRWmXhXiutfDwauh4MtMp32zj5/R
|
||||
o4GoMIGlMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GA1UdEwEB/wQFMAMBAf8wEQYD
|
||||
VR0OBAoECEW4QJ7hOPi/MEUGA1UdIAQ+MDwwOgYMKwYBBAGCxDUBAgEAMCowKAYI
|
||||
KwYBBQUHAgEWHGh0dHBzOi8vd3d3Lmh1YmplY3QuY29tL3BraS8wEwYDVR0jBAww
|
||||
CoAIRbhAnuE4+L8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMCA0gAMEUCIAQl
|
||||
k+aOKUGJk7KoZs2ASAYv1D0w/BqN9Dpg82X0bFb8AiEAi1dL21fLl/wbYs7LYYzp
|
||||
i4ELaXBzZxy4tAVwBy9pia4=
|
||||
-----END CERTIFICATE-----
|
||||
@ -0,0 +1,12 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIBvzCCAWSgAwIBAgIBCDAKBggqhkjOPQQDAjBVMQswCQYDVQQGEwJLUjEMMAoG
|
||||
A1UECgwDSE1DMQwwCgYDVQQLDANITUMxEzARBgoJkiaJk/IsZAEZFgNWMkcxFTAT
|
||||
BgNVBAMMDEhLTUNfVjJHUm9vdDAgFw0yMDEwMjMwNjMwMzdaGA8yMDYwMTAyMzA2
|
||||
MzAzN1owVTELMAkGA1UEBhMCS1IxDDAKBgNVBAoMA0hNQzEMMAoGA1UECwwDSE1D
|
||||
MRMwEQYKCZImiZPyLGQBGRYDVjJHMRUwEwYDVQQDDAxIS01DX1YyR1Jvb3QwWTAT
|
||||
BgcqhkjOPQIBBggqhkjOPQMBBwNCAASUdouD9q4WZ4oa78OjCtnIItxXUNucbuAr
|
||||
MMu3OtKTsmcICYUHXvxJgjwbg7HYDQZlol925KzErxRo9VaBKIXwoyMwITAOBgNV
|
||||
HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNJADBGAiEA
|
||||
w3Dqs4EbnjASNeIPjxWtOq4hl8c1rYbAtXQlbEuNWe0CIQD+/A/+FdJ5Bmjlnzd+
|
||||
TtRa7sijicilfv3FJ6WgHb5DxQ==
|
||||
-----END CERTIFICATE-----
|
||||
@ -0,0 +1,15 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICTTCCAfOgAwIBAgIQALu7vBrEWtLf5bHYc8NchDAKBggqhkjOPQQDAjBSMQsw
|
||||
CQYDVQQGEwJERTEVMBMGA1UEChMMSHViamVjdCBHbWJIMRMwEQYKCZImiZPyLGQB
|
||||
GRYDVjJHMRcwFQYDVQQDEw5WMkcgUm9vdCBDQSBHMjAgFw0xOTAxMTAxMjU0MjZa
|
||||
GA8yMDU5MDEwOTE5MDAwMFowUjELMAkGA1UEBhMCREUxFTATBgNVBAoTDEh1Ympl
|
||||
Y3QgR21iSDETMBEGCgmSJomT8ixkARkWA1YyRzEXMBUGA1UEAxMOVjJHIFJvb3Qg
|
||||
Q0EgRzIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQI+uelZzJzESGTP2ZkDfA+
|
||||
W0+7O9y0a8gVl0nZnS0Ko5H71VG2aacoUc+GHRWmXhXiutfDwauh4MtMp32zj5/R
|
||||
o4GoMIGlMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GA1UdEwEB/wQFMAMBAf8wEQYD
|
||||
VR0OBAoECEW4QJ7hOPi/MEUGA1UdIAQ+MDwwOgYMKwYBBAGCxDUBAgEAMCowKAYI
|
||||
KwYBBQUHAgEWHGh0dHBzOi8vd3d3Lmh1YmplY3QuY29tL3BraS8wEwYDVR0jBAww
|
||||
CoAIRbhAnuE4+L8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMCA0gAMEUCIAQl
|
||||
k+aOKUGJk7KoZs2ASAYv1D0w/BqN9Dpg82X0bFb8AiEAi1dL21fLl/wbYs7LYYzp
|
||||
i4ELaXBzZxy4tAVwBy9pia4=
|
||||
-----END CERTIFICATE-----
|
||||
@ -0,0 +1,14 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICDzCCAbSgAwIBAgIQSDGzHuLS5gHHZ6BCuB+B/zAKBggqhkjOPQQDAjBUMQsw
|
||||
CQYDVQQGEwJVUzEVMBMGA1UEChMMSHViamVjdCBJbmMuMRMwEQYKCZImiZPyLGQB
|
||||
GRYDVjJHMRkwFwYDVQQDExBVUyBWMkcgUm9vdENBIEcyMCAXDTIwMDIyODIyNTk1
|
||||
OVoYDzIwNjAwMjI4MjI1OTU5WjBUMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMSHVi
|
||||
amVjdCBJbmMuMRMwEQYKCZImiZPyLGQBGRYDVjJHMRkwFwYDVQQDExBVUyBWMkcg
|
||||
Um9vdENBIEcyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhr95mLAA84GxG3qs
|
||||
BDpEXLDbBtpcyYlA7JyUbCpGYh2cYz16WWrwGAXcC3+CNIebEcRseXMQ+GjTSivB
|
||||
u73eLaNmMGQwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIS8U/Ir76DTcwGQYD
|
||||
VR0gBBIwEDAOBgwrBgEEAYOuDQECAQIwEwYDVR0jBAwwCoAIS8U/Ir76DTcwDgYD
|
||||
VR0PAQH/BAQDAgEGMAoGCCqGSM49BAMCA0kAMEYCIQDT6q2avPv0YWYZH7VnRXKo
|
||||
Rvv+7hIwldYyGfjkpYVWigIhAK74SxvmLH+OPNbDGUH8qOf+b0cWO2QYRBjqzbtE
|
||||
7/Gh
|
||||
-----END CERTIFICATE-----
|
||||
@ -0,0 +1 @@
|
||||
https://www.hubject.com/download-pki
|
||||
@ -0,0 +1,12 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIB0DCCAXegAwIBAgIIft9YxoGNIPwwCgYIKoZIzj0EAwIwOzEUMBIGA1UEAwwL
|
||||
VjJHIFJvb3QgRzExDjAMBgNVBAoMBVRlc2xhMRMwEQYKCZImiZPyLGQBGRYDVjJH
|
||||
MCAXDTIzMDgzMTE4Mjk1MloYDzIwNjMwODIxMTgyOTUyWjA7MRQwEgYDVQQDDAtW
|
||||
MkcgUm9vdCBHMTEOMAwGA1UECgwFVGVzbGExEzARBgoJkiaJk/IsZAEZFgNWMkcw
|
||||
WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAScWLPjGfLWNjJexmXq4/ZtCKZH8nT5
|
||||
RlkhR2qCQyn6plop9OYF3IGUXqEftEeuT92MqY8QB9TDRmVYw1rDdEDBo2MwYTAd
|
||||
BgNVHQ4EFgQUsqxfR/glxVXc6n7XDa7qksoj9rowDwYDVR0TAQH/BAUwAwEB/zAf
|
||||
BgNVHSMEGDAWgBSyrF9H+CXFVdzqftcNruqSyiP2ujAOBgNVHQ8BAf8EBAMCAQYw
|
||||
CgYIKoZIzj0EAwIDRwAwRAIgJw4vbAmF4Ewr83+pGnMh4l3/dqyHvcN7Zq1k9WMw
|
||||
NSECIHltZxSzxp6Lyu5HiF9HaWLLRyIPbPyYedO+IETxiBvi
|
||||
-----END CERTIFICATE-----
|
||||
@ -0,0 +1 @@
|
||||
https://developer.tesla.com/docs/charging/public-key-infrastructure
|
||||
@ -0,0 +1,13 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICADCCAaagAwIBAgIEYhPadTAKBggqhkjOPQQDAjBmMQswCQYDVQQGEwJVUzEQ
|
||||
MA4GA1UEChMHRW50cnVzdDETMBEGCgmSJomT8ixkARkWA1YyRzESMBAGA1UECxMJ
|
||||
Um9vdCBDQS0xMRwwGgYDVQQDExNFViBDaGFyZ2luZyBSb290IENBMB4XDTIyMDIy
|
||||
MTE4MDE0NVoXDTQyMDIyMTE4MzE0NVowZjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
|
||||
B0VudHJ1c3QxEzARBgoJkiaJk/IsZAEZFgNWMkcxEjAQBgNVBAsTCVJvb3QgQ0Et
|
||||
MTEcMBoGA1UEAxMTRVYgQ2hhcmdpbmcgUm9vdCBDQTBZMBMGByqGSM49AgEGCCqG
|
||||
SM49AwEHA0IABO2/mxzLtuJb4UOvbkWhldki74hLA74JdLaLpMYkum4Rzj0jFR8v
|
||||
qXGw2lqOMzS07Qa5hdhDD/RPbnqK88QEOpijQjBAMA4GA1UdDwEB/wQEAwIBhjAP
|
||||
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBStEjXPjOynDIOPwlUQHqqVwLXWGDAK
|
||||
BggqhkjOPQQDAgNIADBFAiALn070oBr6iZwhEw6vxvWKLijgM7Tiv3IA5I6AB3Ps
|
||||
nwIhAPpzdOOYrXeISrPgCNBGase0k8k6S0klXt6WWLJryNVN
|
||||
-----END CERTIFICATE-----
|
||||
@ -0,0 +1,16 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICdjCCAdegAwIBAgIGAOjUpZSZMAoGCCqGSM49BAMEMFsxCzAJBgNVBAYTAktS
|
||||
MQwwCgYDVQQKDANITUcxDzANBgNVBAsMBkhNR19FVjETMBEGCgmSJomT8ixkARkW
|
||||
A1YyRzEYMBYGA1UEAwwPSE1HX1YyR1Jvb3RfdjIwMCAXDTIzMDQyMTAwMzYxMVoY
|
||||
DzIwNjMwNDIxMDAzNjExWjBbMQswCQYDVQQGEwJLUjEMMAoGA1UECgwDSE1HMQ8w
|
||||
DQYDVQQLDAZITUdfRVYxEzARBgoJkiaJk/IsZAEZFgNWMkcxGDAWBgNVBAMMD0hN
|
||||
R19WMkdSb290X3YyMDCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAbI9hyQH6O47
|
||||
2LnCUGt8qDXiKoDpGZRgiH5KaOxqjGSTTdoXwLNe3+yP/vOiGO2pkJgruYPUgK38
|
||||
eTpyOShxymjaAAnzXXXF5XA7Ztb9Y1fYCMVU89nHjacTweFFJ/50yEWi29FXwD5y
|
||||
9o6UJiw9M06CgeF0xkrNlDYW3dzWRkLUyEO1o0IwQDAdBgNVHQ4EFgQUooPOu5LP
|
||||
9Nv0/Ly1awr/9RV/xSMwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
|
||||
CgYIKoZIzj0EAwQDgYwAMIGIAkIBkG6i6M8/v0QhTA6c0A73nVbhhyZSGXPiQWzX
|
||||
AuNW5u2CQYYG6LMbuWg/RFLatq3Qi4wbABGncocGeqM5rqkQHlYCQgHn8sBXN70U
|
||||
BfA7EY44aqrgiHBC7BjZqis/PJ4v4PNH6tNrInVMnUUPh/ISfgU02vukCqpoHL+M
|
||||
N14opMDKqVPVyg==
|
||||
-----END CERTIFICATE-----
|
||||
@ -0,0 +1,16 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICizCCAeygAwIBAgIUQzY4ymMTdB6B5Xz8DeVamTYtPBUwCgYIKoZIzj0EAwQw
|
||||
TjEVMBMGA1UECgwMQ2hhcklOIGUuIFYuMSAwHgYDVQQDDBdDaGFySU4gVjJHIFJv
|
||||
b3QgQ0EgRzFWMjETMBEGCgmSJomT8ixkARkWA1YyRzAgFw0yMjA5MjMxMjUzMzha
|
||||
GA8yMDUyMDkyMzEyNTMzOFowTjEVMBMGA1UECgwMQ2hhcklOIGUuIFYuMSAwHgYD
|
||||
VQQDDBdDaGFySU4gVjJHIFJvb3QgQ0EgRzFWMjETMBEGCgmSJomT8ixkARkWA1Yy
|
||||
RzCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAFs5XQezNOwcM9ys2l3zdNog8hiu
|
||||
cjd2uQmiYLIfwEH9MKS38nRlSreR0E6Xy2d469Zl1ar8YD8D/TgNZdaLQQVCAL2F
|
||||
SVbFe4/pmL14fRm5UWhmRfn61YaR62r+LtZL8ZE2cwiF0LTnqu22Yyf4dqyTTuak
|
||||
y9r1pvvEFHEP1o/VSjkLo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
|
||||
AwIBBjAdBgNVHQ4EFgQUpFmCy+Rrntbt9+0BLBt+iCFl5S0wHwYDVR0jBBgwFoAU
|
||||
pFmCy+Rrntbt9+0BLBt+iCFl5S0wCgYIKoZIzj0EAwQDgYwAMIGIAkIBLFS4GWPn
|
||||
pDiKq69QjCFV3ncA2iD9L+9ak6E9INGgltnyLxJcs3keGc4u0uG3TflAyEtiJC3Q
|
||||
z07JHi7dt1rjr/ECQgCsAkOonJfyY3ji++O4V7pYeEPrXleldpzGfP/iEAs51DPG
|
||||
FJq/8rsZ2FvFxYkimNrWvvk+IXiN3fFOAl63Z5z0Xw==
|
||||
-----END CERTIFICATE-----
|
||||
12
Projects/VPKI/Doc/Cert/V2GRoot/V2GRootCert.pem
Normal file
12
Projects/VPKI/Doc/Cert/V2GRoot/V2GRootCert.pem
Normal file
@ -0,0 +1,12 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIBvzCCAWSgAwIBAgIBCDAKBggqhkjOPQQDAjBVMQswCQYDVQQGEwJLUjEMMAoG
|
||||
A1UECgwDSE1DMQwwCgYDVQQLDANITUMxEzARBgoJkiaJk/IsZAEZFgNWMkcxFTAT
|
||||
BgNVBAMMDEhLTUNfVjJHUm9vdDAgFw0yMDEwMjMwNjMwMzdaGA8yMDYwMTAyMzA2
|
||||
MzAzN1owVTELMAkGA1UEBhMCS1IxDDAKBgNVBAoMA0hNQzEMMAoGA1UECwwDSE1D
|
||||
MRMwEQYKCZImiZPyLGQBGRYDVjJHMRUwEwYDVQQDDAxIS01DX1YyR1Jvb3QwWTAT
|
||||
BgcqhkjOPQIBBggqhkjOPQMBBwNCAASUdouD9q4WZ4oa78OjCtnIItxXUNucbuAr
|
||||
MMu3OtKTsmcICYUHXvxJgjwbg7HYDQZlol925KzErxRo9VaBKIXwoyMwITAOBgNV
|
||||
HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNJADBGAiEA
|
||||
w3Dqs4EbnjASNeIPjxWtOq4hl8c1rYbAtXQlbEuNWe0CIQD+/A/+FdJ5Bmjlnzd+
|
||||
TtRa7sijicilfv3FJ6WgHb5DxQ==
|
||||
-----END CERTIFICATE-----
|
||||
16
Projects/VPKI/Doc/Cert/V2GRoot/V2GRootCert_P20.pem
Normal file
16
Projects/VPKI/Doc/Cert/V2GRoot/V2GRootCert_P20.pem
Normal file
@ -0,0 +1,16 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICdjCCAdegAwIBAgIGAOjUpZSZMAoGCCqGSM49BAMEMFsxCzAJBgNVBAYTAktS
|
||||
MQwwCgYDVQQKDANITUcxDzANBgNVBAsMBkhNR19FVjETMBEGCgmSJomT8ixkARkW
|
||||
A1YyRzEYMBYGA1UEAwwPSE1HX1YyR1Jvb3RfdjIwMCAXDTIzMDQyMTAwMzYxMVoY
|
||||
DzIwNjMwNDIxMDAzNjExWjBbMQswCQYDVQQGEwJLUjEMMAoGA1UECgwDSE1HMQ8w
|
||||
DQYDVQQLDAZITUdfRVYxEzARBgoJkiaJk/IsZAEZFgNWMkcxGDAWBgNVBAMMD0hN
|
||||
R19WMkdSb290X3YyMDCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAbI9hyQH6O47
|
||||
2LnCUGt8qDXiKoDpGZRgiH5KaOxqjGSTTdoXwLNe3+yP/vOiGO2pkJgruYPUgK38
|
||||
eTpyOShxymjaAAnzXXXF5XA7Ztb9Y1fYCMVU89nHjacTweFFJ/50yEWi29FXwD5y
|
||||
9o6UJiw9M06CgeF0xkrNlDYW3dzWRkLUyEO1o0IwQDAdBgNVHQ4EFgQUooPOu5LP
|
||||
9Nv0/Ly1awr/9RV/xSMwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
|
||||
CgYIKoZIzj0EAwQDgYwAMIGIAkIBkG6i6M8/v0QhTA6c0A73nVbhhyZSGXPiQWzX
|
||||
AuNW5u2CQYYG6LMbuWg/RFLatq3Qi4wbABGncocGeqM5rqkQHlYCQgHn8sBXN70U
|
||||
BfA7EY44aqrgiHBC7BjZqis/PJ4v4PNH6tNrInVMnUUPh/ISfgU02vukCqpoHL+M
|
||||
N14opMDKqVPVyg==
|
||||
-----END CERTIFICATE-----
|
||||
BIN
Projects/VPKI/Doc/PnC_vPKI_Process_20230516.pdf
Normal file
BIN
Projects/VPKI/Doc/PnC_vPKI_Process_20230516.pdf
Normal file
Binary file not shown.
Binary file not shown.
BIN
Projects/VPKI/Doc/VPKI 서버 개발 계획서.pptx
Normal file
BIN
Projects/VPKI/Doc/VPKI 서버 개발 계획서.pptx
Normal file
Binary file not shown.
BIN
Projects/VPKI/Doc/VPKI 서버 셋업 매뉴얼.pptx
Normal file
BIN
Projects/VPKI/Doc/VPKI 서버 셋업 매뉴얼.pptx
Normal file
Binary file not shown.
18
Projects/VPKI/Doc/java/vpki/ConfigureInfo.java
Normal file
18
Projects/VPKI/Doc/java/vpki/ConfigureInfo.java
Normal file
@ -0,0 +1,18 @@
|
||||
package vpki;
|
||||
|
||||
public class ConfigureInfo {
|
||||
public static String KEY_ALGORITHM = "secp256r1";
|
||||
public static String SIGN_ALGORITHM = "SHA256withECDSA";
|
||||
|
||||
public static String CA_URL = "http://127.0.0.1:8080";
|
||||
public static String HASHEDCSR = "/api/v1/tbscsr";
|
||||
public static String CERTIFICATE = "/api/v1/certificate";
|
||||
public static String VERITYRESULT = "/api/v1/verifyresult";
|
||||
|
||||
public static String CA_CERT = "MIICszCCAlmgAwIBAgIUHxrrBdc1lvNKymblQjb06G6MSJYwCgYIKoZIzj0EAwIwPjELMAkGA1UEBhMCS1IxDTALBgNVBAoMBEhLTUMxDDAKBgNVBAsMA0VDQzESMBAGA1UEAwwJUm9vdENBMDAxMCAXDTE5MDYxMjA2MTUxNVoYDzIwNzkwNjEyMjM1OTU5WjA8MQswCQYDVQQGEwJLUjENMAsGA1UECgwESEtNQzEMMAoGA1UECwwDRUNDMRAwDgYDVQQDDAdDQTAxMDAxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB0KuXigZeI7U1McUnjEhYGL4g7zsvyzoNl8SMJ0oPxJgiXka+A37JjK4L/P85bAG7N4C6IYuSem99P0C0vt0K6OCATMwggEvMB8GA1UdIwQYMBaAFLW9YfqauBG22R0cDywt08OqFD99MB0GA1UdDgQWBBQl67U3b8S3sG1J/ukFKlGcqPpw8DAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBBBgNVHR8EOjA4MDagNKAyhjBodHRwOi8vY3JsLmhtY2ttYy5jby5rci9FQ0MvUm9vdC9hcmwvQXJsMURwMS5jcmwwgYUGCCsGAQUFBwEBBHkwdzA7BggrBgEFBQcwAoYvaHR0cDovL2NybC5obWNrbWMuY28ua3IvRUNDL2NlcnQvaGttY3Jvb3RjYS5kZXIwOAYIKwYBBQUHMAGGLGh0dHA6Ly9ydG9jc3AuaG1ja21jLmNvLmtyL0VDQy9PQ1NQL2hrbWNvY3NwMAoGCCqGSM49BAMCA0gAMEUCICfXVV8IhFBXkaOHkg2Wk883y9r3B5rPtDV9JKhUQuBXAiEAug5R/broK+ZjM3vYdU7dndBfMFkOYtCa1NBdq6ie/Fs=";
|
||||
public static String OCSP_URL = "http://ocsp.hmckmc.co.kr/ECC/OCSP/CA01001";
|
||||
|
||||
public static String WMI = "HMC";
|
||||
|
||||
public static String revokeDN = "cn=%s,ou=P001,ou=C001,ou=ECC,o=HKMC,c=KR,dc=OEM";
|
||||
}
|
||||
289
Projects/VPKI/Doc/java/vpki/VpkiApplication.java
Normal file
289
Projects/VPKI/Doc/java/vpki/VpkiApplication.java
Normal file
@ -0,0 +1,289 @@
|
||||
package vpki;
|
||||
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.bouncycastle.util.encoders.Base64;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import vpki.core.HttpFactory;
|
||||
import vpki.core.PkiFactory;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.math.BigInteger;
|
||||
import java.security.*;
|
||||
import java.security.interfaces.ECPublicKey;
|
||||
import java.security.spec.ECGenParameterSpec;
|
||||
import java.security.spec.ECParameterSpec;
|
||||
import java.security.spec.ECPoint;
|
||||
import java.security.spec.ECPublicKeySpec;
|
||||
|
||||
public class VpkiApplication {
|
||||
JSONObject jSONObject;
|
||||
String macAddress;
|
||||
String wmi;
|
||||
String iftid;
|
||||
String pubKeyHex;
|
||||
|
||||
KeyPair keyPair;
|
||||
|
||||
String hashedCsrStr;
|
||||
String pcid;
|
||||
|
||||
public void init() throws Exception {
|
||||
keyPair = PkiFactory.generateKeyPair(ConfigureInfo.KEY_ALGORITHM);
|
||||
jSONObject = new JSONObject();
|
||||
|
||||
macAddress = "9C36F800001E";
|
||||
wmi = "KMH";
|
||||
iftid = "ift01";
|
||||
|
||||
}
|
||||
|
||||
public JSONObject getCsr() throws Exception {
|
||||
|
||||
|
||||
ECPublicKey publicKey = (ECPublicKey) keyPair.getPublic();
|
||||
byte[] tmp = new byte[]{0x04};
|
||||
byte[] x = publicKey.getW().getAffineX().toByteArray(); //getQ().getXCoord().getEncoded();
|
||||
byte[] y = publicKey.getW().getAffineY().toByteArray(); //getQ().getYCoord().getEncoded();
|
||||
byte[] xy = new byte[x.length+y.length+1];
|
||||
|
||||
System.out.println("Client PubKey: " + Base64.toBase64String(keyPair.getPublic().getEncoded()));
|
||||
System.out.println("PubKey x.length: " + x.length);
|
||||
System.out.println("PubKey y.length: " + y.length);
|
||||
System.out.println("Client PriKey: " + Base64.toBase64String(keyPair.getPrivate().getEncoded()));
|
||||
|
||||
System.arraycopy(tmp, 0, xy, 0, 1);
|
||||
if(x.length > 32) {
|
||||
System.arraycopy(x, 1, xy, 1, 32);
|
||||
}else{
|
||||
System.arraycopy(x, 0, xy, 1, 32);
|
||||
}
|
||||
if(y.length > 32) {
|
||||
System.arraycopy(y, 1, xy, 33, 32);
|
||||
}else{
|
||||
System.arraycopy(y, 0, xy, 33, 32);
|
||||
}
|
||||
|
||||
|
||||
//hashed CSR Request
|
||||
jSONObject.put("iftid",iftid);
|
||||
jSONObject.put("macaddr",macAddress);
|
||||
jSONObject.put("publickey", Base64.toBase64String(xy));
|
||||
jSONObject.put("wmi",wmi);
|
||||
|
||||
String hashedCSRReqStr = jSONObject.toJSONString();
|
||||
System.out.println(">> hashedCSR Request :" + hashedCSRReqStr);
|
||||
byte[] hashedCSRBytes = HttpFactory.sendPost(hashedCSRReqStr.getBytes(), HttpFactory.REQUESTTYPE.HASHEDCSR);
|
||||
System.out.println(">> hashedCSR Response :" + new String(hashedCSRBytes));
|
||||
|
||||
JSONParser jsonParser = new JSONParser();
|
||||
jSONObject = (JSONObject) jsonParser.parse(new String(hashedCSRBytes));
|
||||
String status = (String) jSONObject.get("status");
|
||||
|
||||
if(!status.equalsIgnoreCase("success")) {
|
||||
throw new Exception((String) jSONObject.get("message"));
|
||||
}
|
||||
|
||||
return (JSONObject) jSONObject.get("data");
|
||||
}
|
||||
|
||||
public JSONObject getCertificate() throws Exception {
|
||||
//Certificate Request
|
||||
byte[] signedCSRBytes = PkiFactory.signECDSAHashedValue(Base64.decode(hashedCsrStr), keyPair.getPrivate());
|
||||
boolean verify1 = PkiFactory.verifyECDSAHashedValue(Base64.decode(hashedCsrStr), keyPair.getPublic(), signedCSRBytes);
|
||||
|
||||
byte[] rawSignData = getRawSignatureFromDEREncoding(signedCSRBytes);
|
||||
|
||||
jSONObject = new JSONObject();
|
||||
jSONObject.put("iftid",iftid);
|
||||
jSONObject.put("csrsignature",Base64.toBase64String(rawSignData));
|
||||
|
||||
String csrsignatureReqStr = jSONObject.toJSONString();
|
||||
System.out.println(">> CSRSignatureValue Request :" + csrsignatureReqStr);
|
||||
byte[] certificateBytes = HttpFactory.sendPost(csrsignatureReqStr.getBytes(), HttpFactory.REQUESTTYPE.CERTIFICATE);
|
||||
System.out.println(">> CSRSignatureValue Response :" + new String(certificateBytes));
|
||||
|
||||
JSONParser jsonParser = new JSONParser();
|
||||
jSONObject = (JSONObject) jsonParser.parse(new String(certificateBytes));
|
||||
String status = (String) jSONObject.get("status");
|
||||
|
||||
if(!status.equalsIgnoreCase("success")) {
|
||||
throw new Exception((String) jSONObject.get("message"));
|
||||
}
|
||||
|
||||
return (JSONObject) jSONObject.get("data");
|
||||
}
|
||||
|
||||
public static byte[] getRawSignatureFromDEREncoding(byte[] derEncodedSignature) {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
byte[] r = new byte[32];
|
||||
byte[] s = new byte[32];
|
||||
|
||||
// Length of r is encoded in the fourth byte
|
||||
int lengthOfR = derEncodedSignature[3];
|
||||
|
||||
// Length of r is encoded in the second byte AFTER r
|
||||
int lengthOfS = derEncodedSignature[lengthOfR + 5];
|
||||
|
||||
// Length of r and s are either 33 bytes (including padding byte 0x00), 32 bytes (normal), or less (leftmost 0x00 bytes were removed)
|
||||
try {
|
||||
if (lengthOfR == 33) System.arraycopy(derEncodedSignature, 5, r, 0, lengthOfR - 1); // skip leftmost padding byte 0x00
|
||||
else if (lengthOfR == 32) System.arraycopy(derEncodedSignature, 4, r, 0, lengthOfR);
|
||||
else System.arraycopy(derEncodedSignature, 4, r, 32 - lengthOfR, lengthOfR); // destPos = number of leftmost 0x00 bytes
|
||||
|
||||
if (lengthOfS == 33) System.arraycopy(derEncodedSignature, lengthOfR + 7, s, 0, lengthOfS - 1); // skip leftmost padding byte 0x00
|
||||
else if (lengthOfS == 32) System.arraycopy(derEncodedSignature, lengthOfR + 6, s, 0, lengthOfS);
|
||||
else System.arraycopy(derEncodedSignature, lengthOfR + 6, s, 32 - lengthOfS, lengthOfS); // destPos = number of leftmost 0x00 bytes
|
||||
} catch (ArrayIndexOutOfBoundsException e) {
|
||||
}
|
||||
|
||||
try {
|
||||
baos.write(r);
|
||||
baos.write(s);
|
||||
} catch (IOException e) {
|
||||
}
|
||||
|
||||
byte[] rawRAndS = baos.toByteArray();
|
||||
|
||||
return rawRAndS;
|
||||
}
|
||||
|
||||
public JSONObject verify() throws Exception {
|
||||
jSONObject = new JSONObject();
|
||||
jSONObject.put("iftid",iftid);
|
||||
// jSONObject.put("subjectdn",String.format(ConfigureInfo.revokeDN,pcid));
|
||||
jSONObject.put("pcid",pcid);
|
||||
jSONObject.put("result","fail");
|
||||
|
||||
String verifyResultReqStr = jSONObject.toJSONString();
|
||||
System.out.println(">> VerifyResult Request :" + verifyResultReqStr);
|
||||
byte[] verifyResultRespBytes = HttpFactory.sendPost(verifyResultReqStr.getBytes(), HttpFactory.REQUESTTYPE.VERITYRESULT);
|
||||
System.out.println(">> VerifyResult Response :" + new String(verifyResultRespBytes));
|
||||
|
||||
JSONParser jsonParser = new JSONParser();
|
||||
jSONObject = (JSONObject) jsonParser.parse(new String(verifyResultRespBytes));
|
||||
String status = (String) jSONObject.get("status");
|
||||
|
||||
if(!status.equalsIgnoreCase("success")) {
|
||||
throw new Exception((String) jSONObject.get("message"));
|
||||
}
|
||||
|
||||
return (JSONObject) jSONObject.get("data");
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
VpkiApplication app = new VpkiApplication();
|
||||
try {
|
||||
|
||||
app.init();
|
||||
|
||||
JSONObject res1 = app.getCsr();
|
||||
app.hashedCsrStr = (String) res1.get("hashedtbscsr");
|
||||
app.pcid = (String) res1.get("pcid");
|
||||
System.out.println();
|
||||
|
||||
JSONObject res2 = app.getCertificate();
|
||||
System.out.println();
|
||||
|
||||
JSONObject res3 = app.verify();
|
||||
System.out.println();
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
// public static void main(String[] args) {
|
||||
// //Parameter
|
||||
// String macAddress = "abcd0123456";
|
||||
// String wmi = "KMH";
|
||||
// String iftid = "ift01";
|
||||
//
|
||||
// String pubKeyHex = "04BB751403B9E7D6C5132292DBED87F2D739C4811BA5B9ED185D26544C90E4A3CE03308AE2D6744AE83A3762B58BF864BE66373338DC8775F507F96AAE4C487A5C";
|
||||
// String signedDataHex = "B23F130B068AB4FA88057AFA87225A7BC481E33BF91941FB561535D75868A593E7C82B04B50A0E975B6F92659D41B83082981DAE3FB9708560BE91622CFE3076";
|
||||
//
|
||||
// try {
|
||||
// Security.addProvider(new BouncyCastleProvider());
|
||||
// System.out.println("KMH CMS Test Application");
|
||||
//
|
||||
// byte[] pubKeyBytes = hexStringToByteArray(pubKeyHex);
|
||||
// byte[] signBytes = hexStringToByteArray(signedDataHex);
|
||||
// System.out.println("Test Pub Key : " + Base64.toBase64String(pubKeyBytes));
|
||||
// System.out.println("Test signature : " + Base64.toBase64String((signBytes)));
|
||||
//
|
||||
// int EC_POINTSIZE = 32;
|
||||
// byte[] processedXData = new byte[EC_POINTSIZE];
|
||||
// byte[] processedYData = new byte[EC_POINTSIZE];
|
||||
// System.arraycopy(pubKeyBytes, 1, processedXData, 0, EC_POINTSIZE);
|
||||
// System.arraycopy(pubKeyBytes, EC_POINTSIZE + 1, processedYData, 0, EC_POINTSIZE);
|
||||
//
|
||||
// ECPoint pubPoint = new ECPoint(new BigInteger(1, processedXData), new BigInteger(1, processedYData));
|
||||
// AlgorithmParameters params = AlgorithmParameters.getInstance("EC", "BC");
|
||||
// params.init(new ECGenParameterSpec("prime256v1"));
|
||||
// ECParameterSpec ecParameters = params.getParameterSpec(ECParameterSpec.class);
|
||||
// ECPublicKeySpec pubECSpec = new ECPublicKeySpec(pubPoint, ecParameters);
|
||||
// ECPublicKey publicKey = (ECPublicKey) KeyFactory.getInstance("EC", "BC").generatePublic(pubECSpec);
|
||||
//
|
||||
// System.out.println("Test Pub Key : " + Base64.toBase64String(publicKey.getEncoded()));
|
||||
//
|
||||
// //Create Key Pair
|
||||
// KeyPair keyPair = PkiFactory.generateKeyPair(ConfigureInfo.KEY_ALGORITHM);
|
||||
// String b64PubKey = Base64.toBase64String(keyPair.getPublic().getEncoded());
|
||||
// String b64PriKey = Base64.toBase64String(keyPair.getPrivate().getEncoded());
|
||||
//
|
||||
// System.out.println("PublicKey :" + b64PubKey);
|
||||
// System.out.println("PrivateKey :" + b64PriKey);
|
||||
//
|
||||
// //hashed CSR Request
|
||||
// JSONObject jSONObject = new JSONObject();
|
||||
// jSONObject.put("iftid",iftid);
|
||||
// jSONObject.put("macaddr",macAddress);
|
||||
// jSONObject.put("publickey",b64PubKey);
|
||||
// jSONObject.put("wmi",wmi);
|
||||
// String hashedCSRReqStr = jSONObject.toJSONString();
|
||||
// System.out.println("hashedCSR Request :" + hashedCSRReqStr);
|
||||
// byte[] hashedCSRBytes = HttpFactory.sendPost(hashedCSRReqStr.getBytes(), HttpFactory.REQUESTTYPE.HASHEDCSR);
|
||||
// System.out.println("hashedCSR Response :" + new String(hashedCSRBytes));
|
||||
//
|
||||
// JSONParser jsonParser = new JSONParser();
|
||||
// jSONObject = (JSONObject) jsonParser.parse(new String(hashedCSRBytes));
|
||||
// JSONObject jSONObjectData = (JSONObject) jSONObject.get("data");
|
||||
// String hashedCsrStr = (String) jSONObjectData.get("hashedtbscsr");
|
||||
// String pcid = (String) jSONObjectData.get("pcid");
|
||||
//
|
||||
// //Certificate Request
|
||||
// byte[] signedCSRBytes = PkiFactory.signECDSAHashedValue(Base64.decode(hashedCsrStr), keyPair.getPrivate());
|
||||
// jSONObject = new JSONObject();
|
||||
// jSONObject.put("iftid",iftid);
|
||||
// jSONObject.put("csrsignature",Base64.toBase64String(signedCSRBytes));
|
||||
// String csrsignatureReqStr = jSONObject.toJSONString();
|
||||
// System.out.println("CSRSignatureValue Request :" + csrsignatureReqStr);
|
||||
// byte[] certificateBytes = HttpFactory.sendPost(csrsignatureReqStr.getBytes(), HttpFactory.REQUESTTYPE.CERTIFICATE);
|
||||
// System.out.println("CSRSignatureValue Response :" + new String(certificateBytes));
|
||||
//
|
||||
// //VerifyResult Request
|
||||
// jSONObject = new JSONObject();
|
||||
// jSONObject.put("iftid",iftid);
|
||||
// jSONObject.put("subjectdn",String.format(ConfigureInfo.revokeDN,pcid));
|
||||
// jSONObject.put("result","fail");
|
||||
// String verifyResultReqStr = jSONObject.toJSONString();
|
||||
// System.out.println("VerifyResult Request :" + verifyResultReqStr);
|
||||
// byte[] verifyResultRespBytes = HttpFactory.sendPost(verifyResultReqStr.getBytes(), HttpFactory.REQUESTTYPE.VERITYRESULT);
|
||||
// System.out.println("VerifyResult Response :" + new String(verifyResultRespBytes));
|
||||
//
|
||||
// System.out.println("end");
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
|
||||
public static byte[] hexStringToByteArray(String s) {
|
||||
int len = s.length();
|
||||
byte[] data = new byte[len / 2];
|
||||
for (int i = 0; i < len; i += 2) {
|
||||
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
|
||||
+ Character.digit(s.charAt(i+1), 16));
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
61
Projects/VPKI/Doc/java/vpki/core/HttpFactory.java
Normal file
61
Projects/VPKI/Doc/java/vpki/core/HttpFactory.java
Normal file
@ -0,0 +1,61 @@
|
||||
package vpki.core;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import vpki.ConfigureInfo;
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import java.io.DataOutputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
|
||||
public class HttpFactory {
|
||||
public enum REQUESTTYPE {
|
||||
HASHEDCSR,
|
||||
CERTIFICATE,
|
||||
VERITYRESULT
|
||||
}
|
||||
|
||||
public static byte[] sendPost(byte[] requestBytes, REQUESTTYPE type) {
|
||||
String connURL = "";
|
||||
String conType = "";
|
||||
|
||||
switch (type) {
|
||||
case HASHEDCSR:
|
||||
connURL = ConfigureInfo.CA_URL + ConfigureInfo.HASHEDCSR;
|
||||
conType = "application/json";
|
||||
break;
|
||||
case CERTIFICATE:
|
||||
connURL = ConfigureInfo.CA_URL + ConfigureInfo.CERTIFICATE;
|
||||
conType = "application/json";
|
||||
break;
|
||||
case VERITYRESULT:
|
||||
connURL = ConfigureInfo.CA_URL + ConfigureInfo.VERITYRESULT;
|
||||
conType = "application/json";
|
||||
break;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
URL obj = new URL(connURL);
|
||||
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
|
||||
|
||||
// Setting basic post request
|
||||
con.setRequestMethod("POST");
|
||||
con.setRequestProperty("Content-Type", conType);
|
||||
|
||||
// Send post request
|
||||
con.setDoOutput(true);
|
||||
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
|
||||
wr.write(requestBytes);
|
||||
wr.flush();
|
||||
wr.close();
|
||||
|
||||
return IOUtils.toByteArray(con.getInputStream());
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
268
Projects/VPKI/Doc/java/vpki/core/OcspReqClient.java
Normal file
268
Projects/VPKI/Doc/java/vpki/core/OcspReqClient.java
Normal file
@ -0,0 +1,268 @@
|
||||
package vpki.core;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.Socket;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
import java.security.NoSuchProviderException;
|
||||
import java.security.Security;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.CertificateFactory;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.*;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.bouncycastle.asn1.ASN1Encodable;
|
||||
import org.bouncycastle.asn1.ASN1OctetString;
|
||||
import org.bouncycastle.asn1.DEROctetString;
|
||||
import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers;
|
||||
import org.bouncycastle.asn1.x509.CRLReason;
|
||||
import org.bouncycastle.asn1.x509.Extension;
|
||||
import org.bouncycastle.asn1.x509.ExtensionsGenerator;
|
||||
import org.bouncycastle.cert.X509CertificateHolder;
|
||||
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
|
||||
import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder;
|
||||
import org.bouncycastle.cert.ocsp.BasicOCSPResp;
|
||||
import org.bouncycastle.cert.ocsp.CertificateID;
|
||||
import org.bouncycastle.cert.ocsp.OCSPReq;
|
||||
import org.bouncycastle.cert.ocsp.OCSPReqBuilder;
|
||||
import org.bouncycastle.cert.ocsp.OCSPResp;
|
||||
import org.bouncycastle.cert.ocsp.RevokedStatus;
|
||||
import org.bouncycastle.cert.ocsp.SingleResp;
|
||||
import org.bouncycastle.cert.ocsp.UnknownStatus;
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.bouncycastle.operator.ContentVerifierProvider;
|
||||
import org.bouncycastle.operator.DigestCalculator;
|
||||
import org.bouncycastle.operator.bc.BcDigestCalculatorProvider;
|
||||
import org.bouncycastle.operator.jcajce.JcaContentVerifierProviderBuilder;
|
||||
|
||||
class OcspReqCert {
|
||||
X509CertificateHolder caCertHolder; //Issuer Cert
|
||||
X509Certificate userCert; //Valid Target Cert
|
||||
}
|
||||
|
||||
public class OcspReqClient {
|
||||
|
||||
private byte[] sampleNonce; //Nonce
|
||||
private List<OcspReqCert> reqCertList; //Request List
|
||||
private String ocspSvrUrl; //VA URL
|
||||
|
||||
static {
|
||||
Security.addProvider(new BouncyCastleProvider()); //Load BouncyCastle
|
||||
}
|
||||
|
||||
public OcspReqClient(String ocspSvrUrl) {
|
||||
this.ocspSvrUrl = ocspSvrUrl;
|
||||
this.reqCertList = new ArrayList();
|
||||
}
|
||||
|
||||
// cert binary to X509 Class
|
||||
private static X509Certificate certToValue(byte[] cert) throws CertificateException, NoSuchProviderException {
|
||||
InputStream certInputStream = new ByteArrayInputStream(cert);
|
||||
CertificateFactory certFactory = CertificateFactory.getInstance("X.509", BouncyCastleProvider.PROVIDER_NAME);
|
||||
return (X509Certificate) certFactory.generateCertificate(certInputStream);
|
||||
}
|
||||
|
||||
private byte[] sendTcp(String ip, int port, byte[] ocspReqBytes) {
|
||||
System.out.println("sendTcp");
|
||||
try {
|
||||
Socket mSocket = new Socket(ip, port);
|
||||
OutputStream os = mSocket.getOutputStream();
|
||||
os.write(ocspReqBytes);
|
||||
os.flush();
|
||||
InputStream is = mSocket.getInputStream();
|
||||
byte[] ocspResponse = new byte[10000];
|
||||
is.read(ocspResponse);
|
||||
mSocket.close();
|
||||
return ocspResponse;
|
||||
} catch (IOException e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private byte[] sendGet(byte[] ocspReqBytes) {
|
||||
System.out.println("sendGet");
|
||||
try {
|
||||
//Base64 + URL Encode for HTTP
|
||||
String ocspReq = URLEncoder.encode(Base64.getEncoder().encodeToString(ocspReqBytes), "UTF-8");
|
||||
|
||||
URL url = new URL(this.ocspSvrUrl + "/" + ocspReq);
|
||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setRequestMethod("GET");
|
||||
conn.setConnectTimeout(3000);
|
||||
conn.setReadTimeout(3000);
|
||||
|
||||
return IOUtils.toByteArray(conn.getInputStream());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] sendPost(byte[] ocspReqBytes) {
|
||||
System.out.println("sendPost");
|
||||
try {
|
||||
|
||||
final String USER_AGENT = "Mozilla/5.0";
|
||||
|
||||
URL obj = new URL(this.ocspSvrUrl);
|
||||
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
|
||||
|
||||
// Setting basic post request
|
||||
con.setRequestMethod("POST");
|
||||
con.setRequestProperty("User-Agent", USER_AGENT);
|
||||
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
|
||||
con.setRequestProperty("Content-Type", "application/ocsp-request");
|
||||
|
||||
// Send post request
|
||||
con.setDoOutput(true);
|
||||
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
|
||||
wr.write(ocspReqBytes);
|
||||
wr.flush();
|
||||
wr.close();
|
||||
|
||||
return IOUtils.toByteArray(con.getInputStream());
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void add(String userCert, String issuerCert)
|
||||
throws CertificateException, NoSuchProviderException {
|
||||
OcspReqCert ocspReqCert = new OcspReqCert();
|
||||
|
||||
byte[] caCertificateData = Base64.getDecoder().decode(issuerCert);
|
||||
X509Certificate caCert = certToValue(caCertificateData);
|
||||
|
||||
byte[] userCertificateData = Base64.getDecoder().decode(userCert);
|
||||
|
||||
ocspReqCert.userCert = certToValue(userCertificateData);
|
||||
ocspReqCert.caCertHolder = new JcaX509CertificateHolder(caCert);
|
||||
|
||||
this.reqCertList.add(ocspReqCert);
|
||||
}
|
||||
|
||||
public byte[] buildReq() {
|
||||
try {
|
||||
// Create OCSP Request
|
||||
OCSPReqBuilder reqBuilder = new OCSPReqBuilder();
|
||||
|
||||
for (OcspReqCert reqCert : this.reqCertList) {
|
||||
X509Certificate userCert = reqCert.userCert;
|
||||
|
||||
// Create Request CertID
|
||||
DigestCalculator digestCalculator;
|
||||
digestCalculator = new BcDigestCalculatorProvider().get(CertificateID.HASH_SHA1);
|
||||
|
||||
CertificateID id = new CertificateID(digestCalculator, reqCert.caCertHolder,
|
||||
userCert.getSerialNumber());
|
||||
|
||||
reqBuilder.addRequest(id);
|
||||
}
|
||||
|
||||
// Create nonce Extension
|
||||
sampleNonce = new byte[16];
|
||||
Random rand = new Random();
|
||||
rand.nextBytes(sampleNonce);
|
||||
ExtensionsGenerator extensionsGenerator = new ExtensionsGenerator();
|
||||
extensionsGenerator.addExtension(OCSPObjectIdentifiers.id_pkix_ocsp_nonce, false,
|
||||
new DEROctetString(sampleNonce));
|
||||
reqBuilder.setRequestExtensions(extensionsGenerator.generate());
|
||||
|
||||
// Build Request Data
|
||||
OCSPReq ocspReqCli = reqBuilder.build();
|
||||
|
||||
return ocspReqCli.getEncoded();
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String validOcspResponse(byte[] ocspRespBytes) throws Exception {
|
||||
// Process Response
|
||||
OCSPResp ocspRespCli = new OCSPResp(ocspRespBytes);
|
||||
|
||||
if (ocspRespCli.getStatus() == 0) {
|
||||
BasicOCSPResp bRes = (BasicOCSPResp) ocspRespCli.getResponseObject();
|
||||
|
||||
// Check Nonce
|
||||
boolean nounceCheck = false;
|
||||
Extension temp = bRes.getExtension(OCSPObjectIdentifiers.id_pkix_ocsp_nonce);
|
||||
ASN1Encodable tmpByte = temp.getParsedValue();
|
||||
byte[] nounce = ((ASN1OctetString) tmpByte).getOctets();
|
||||
for (int u = 0; u < nounce.length; u++) {
|
||||
if (nounce[u] != sampleNonce[u]) {
|
||||
nounceCheck = false;
|
||||
break;
|
||||
}
|
||||
nounceCheck = true;
|
||||
}
|
||||
|
||||
if (nounceCheck) {
|
||||
X509CertificateHolder[] chains = bRes.getCerts();
|
||||
//if (checkValidity(chains)) {
|
||||
JcaContentVerifierProviderBuilder jcaContentVerifierProviderBuilder = new JcaContentVerifierProviderBuilder();
|
||||
jcaContentVerifierProviderBuilder.setProvider(BouncyCastleProvider.PROVIDER_NAME);
|
||||
ContentVerifierProvider contentVerifierProvider = jcaContentVerifierProviderBuilder.build(chains[0]);
|
||||
boolean verify = bRes.isSignatureValid(contentVerifierProvider);
|
||||
if (verify) {
|
||||
SingleResp[] respList = bRes.getResponses();
|
||||
for (SingleResp resp : respList) {
|
||||
CertificateID certID = resp.getCertID();
|
||||
Object status = resp.getCertStatus();
|
||||
Date nextDate = resp.getNextUpdate();
|
||||
Date thisDate = resp.getThisUpdate();
|
||||
if (status instanceof UnknownStatus) {
|
||||
return "Unknown";
|
||||
} else if (status instanceof RevokedStatus) {
|
||||
return "Revoked";
|
||||
} else {
|
||||
return "Good";
|
||||
}
|
||||
}
|
||||
}
|
||||
//} // chain verify
|
||||
} // nounceCheck
|
||||
} // response.getStatus()
|
||||
else {
|
||||
System.out.println(ocspRespCli.getStatus());
|
||||
}
|
||||
return "Error";
|
||||
}
|
||||
|
||||
private boolean checkValidity(X509CertificateHolder[] certs) {
|
||||
int n = certs.length;
|
||||
try {
|
||||
for (int i = 0; i < n - 1; i++) {
|
||||
X509Certificate cert = new JcaX509CertificateConverter().setProvider("BC").getCertificate(certs[i]);
|
||||
X509Certificate issuer = new JcaX509CertificateConverter().setProvider("BC").getCertificate(certs[i + 1]);
|
||||
|
||||
if (!cert.getIssuerX500Principal().equals(issuer.getSubjectX500Principal())) {
|
||||
throw new Exception("Certificates do not chain");
|
||||
}
|
||||
cert.verify(issuer.getPublicKey());
|
||||
}
|
||||
X509Certificate last = new JcaX509CertificateConverter().setProvider("BC").getCertificate(certs[n - 1]);
|
||||
// if self-signed, verify the final cert
|
||||
if (last.getIssuerX500Principal().equals(last.getSubjectX500Principal())) {
|
||||
last.verify(last.getPublicKey());
|
||||
} else {
|
||||
throw new Exception("Does not exist root certificate;");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println("checkValidity : " + e.getMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
100
Projects/VPKI/Doc/java/vpki/core/PkiFactory.java
Normal file
100
Projects/VPKI/Doc/java/vpki/core/PkiFactory.java
Normal file
@ -0,0 +1,100 @@
|
||||
package vpki.core;
|
||||
|
||||
import org.bouncycastle.asn1.ASN1Integer;
|
||||
import org.bouncycastle.asn1.DERSequenceGenerator;
|
||||
import org.bouncycastle.crypto.digests.SHA256Digest;
|
||||
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
|
||||
import org.bouncycastle.crypto.signers.ECDSASigner;
|
||||
import org.bouncycastle.crypto.signers.HMacDSAKCalculator;
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.bouncycastle.util.io.pem.PemObject;
|
||||
import org.bouncycastle.util.io.pem.PemReader;
|
||||
import org.bouncycastle.util.io.pem.PemWriter;
|
||||
import vpki.ConfigureInfo;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
import java.math.BigInteger;
|
||||
import java.security.*;
|
||||
import java.security.spec.ECGenParameterSpec;
|
||||
import java.util.Base64;
|
||||
|
||||
public class PkiFactory {
|
||||
|
||||
static {
|
||||
Security.addProvider(new BouncyCastleProvider());
|
||||
}
|
||||
|
||||
public static KeyPair generateKeyPair(String algorithm) throws Exception {
|
||||
KeyPairGenerator generator = KeyPairGenerator.getInstance("ECDSA", BouncyCastleProvider.PROVIDER_NAME);
|
||||
ECGenParameterSpec ecsp = new ECGenParameterSpec(algorithm);
|
||||
|
||||
generator.initialize(ecsp, new SecureRandom());
|
||||
|
||||
KeyPair keyPair = generator.generateKeyPair();
|
||||
|
||||
return keyPair;
|
||||
}
|
||||
|
||||
public static String convertPem(String type, byte[] data) throws Exception {
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
PemWriter pemWriter = new PemWriter(stringWriter);
|
||||
PemObject pemObject = new PemObject(type, data);
|
||||
pemWriter.writeObject(pemObject);
|
||||
pemWriter.flush();
|
||||
String pemString = stringWriter.toString();
|
||||
return pemString;
|
||||
}
|
||||
|
||||
public static byte[] readPem(String data) throws Exception {
|
||||
PemReader pemReader = new PemReader(new StringReader(data));
|
||||
byte[] contentBytes = pemReader.readPemObject().getContent();
|
||||
return contentBytes;
|
||||
}
|
||||
|
||||
public static String reqOCSPfromPem(byte[] certBytes) throws Exception {
|
||||
OcspReqClient ocspReqClient = new OcspReqClient(ConfigureInfo.OCSP_URL);
|
||||
ocspReqClient.add(Base64.getEncoder().encodeToString(readPem(new String(certBytes))), ConfigureInfo.CA_CERT);
|
||||
byte[] ocspReqBytes = ocspReqClient.buildReq();
|
||||
// Send Post
|
||||
byte[] resPost = ocspReqClient.sendPost(ocspReqBytes);
|
||||
return ocspReqClient.validOcspResponse(resPost);
|
||||
}
|
||||
|
||||
public static byte[] hashSHA256(byte[] data) throws Exception {
|
||||
MessageDigest digest = MessageDigest.getInstance("SHA-256");
|
||||
return digest.digest(data);
|
||||
}
|
||||
|
||||
public static String hashSHA256toString(byte[] data) throws Exception {
|
||||
return Base64.getEncoder().encodeToString(hashSHA256(data));
|
||||
}
|
||||
|
||||
public static byte[] signECDSA(byte[] tbs, PrivateKey privateKey) throws Exception {
|
||||
Signature ecdsaSign = Signature.getInstance("SHA256withECDSA");
|
||||
ecdsaSign.initSign(privateKey);
|
||||
ecdsaSign.update(tbs);
|
||||
byte[] signature = ecdsaSign.sign();
|
||||
|
||||
return signature;
|
||||
}
|
||||
|
||||
public static byte[] signECDSAHashedValue(byte[] hashed, PrivateKey privateKey) throws Exception {
|
||||
Signature ecdsaSign = Signature.getInstance("NONEwithECDSA");
|
||||
// Signature ecdsaSign = Signature.getInstance("SHA256withECDSA");
|
||||
ecdsaSign.initSign(privateKey);
|
||||
ecdsaSign.update(hashed);
|
||||
byte[] signature = ecdsaSign.sign();
|
||||
|
||||
return signature;
|
||||
}
|
||||
|
||||
public static boolean verifyECDSAHashedValue(byte[] hashed, PublicKey publicKey, byte[] signature) throws Exception {
|
||||
Signature ecdsaSign = Signature.getInstance("NONEwithECDSA");
|
||||
// Signature ecdsaSign = Signature.getInstance("SHA256withECDSA");
|
||||
ecdsaSign.initVerify(publicKey);
|
||||
ecdsaSign.update(hashed);
|
||||
return ecdsaSign.verify(signature);
|
||||
}
|
||||
}
|
||||
201
Projects/VPKI/Doc/java/vpki/core/VPKIFactory.java
Normal file
201
Projects/VPKI/Doc/java/vpki/core/VPKIFactory.java
Normal file
@ -0,0 +1,201 @@
|
||||
package vpki.core;
|
||||
|
||||
import org.bouncycastle.asn1.ASN1Sequence;
|
||||
import org.bouncycastle.asn1.DERBitString;
|
||||
import org.bouncycastle.asn1.DERSet;
|
||||
import org.bouncycastle.asn1.pkcs.CertificationRequest;
|
||||
import org.bouncycastle.asn1.pkcs.CertificationRequestInfo;
|
||||
import org.bouncycastle.asn1.x500.X500Name;
|
||||
import org.bouncycastle.asn1.x500.X500NameBuilder;
|
||||
import org.bouncycastle.asn1.x500.style.BCStyle;
|
||||
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
|
||||
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
|
||||
import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
|
||||
import org.bouncycastle.pkcs.PKCS10CertificationRequest;
|
||||
import org.bouncycastle.pkcs.PKCS10CertificationRequestBuilder;
|
||||
import org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequestBuilder;
|
||||
import vpki.ConfigureInfo;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.nio.charset.Charset;
|
||||
import java.security.KeyPair;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.PublicKey;
|
||||
import java.util.HashMap;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
public class VPKIFactory {
|
||||
private static HashMap<Character,String> ALPHA;
|
||||
static {
|
||||
ALPHA = new HashMap<Character,String>();
|
||||
ALPHA.put('A',"10");
|
||||
ALPHA.put('B',"11");
|
||||
ALPHA.put('C',"12");
|
||||
ALPHA.put('D',"13");
|
||||
ALPHA.put('E',"14");
|
||||
ALPHA.put('F',"15");
|
||||
ALPHA.put('G',"16");
|
||||
ALPHA.put('H',"17");
|
||||
ALPHA.put('I',"18");
|
||||
ALPHA.put('J',"19");
|
||||
ALPHA.put('K',"20");
|
||||
ALPHA.put('L',"21");
|
||||
ALPHA.put('M',"22");
|
||||
ALPHA.put('N',"23");
|
||||
ALPHA.put('O',"24");
|
||||
ALPHA.put('P',"25");
|
||||
ALPHA.put('Q',"26");
|
||||
ALPHA.put('R',"27");
|
||||
ALPHA.put('S',"28");
|
||||
ALPHA.put('T',"29");
|
||||
ALPHA.put('U',"30");
|
||||
ALPHA.put('V',"31");
|
||||
ALPHA.put('W',"32");
|
||||
ALPHA.put('X',"33");
|
||||
ALPHA.put('Y',"34");
|
||||
ALPHA.put('Z',"35");
|
||||
}
|
||||
|
||||
private static final Charset UTF8 = Charset.forName("UTF-8");
|
||||
public static final UUID NAMESPACE_DNS = UUID.fromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8");
|
||||
|
||||
public static String generateRevokeJson(String PCID) {
|
||||
String revokeJson = String.format(ConfigureInfo.revokeDN,PCID);
|
||||
return revokeJson;
|
||||
}
|
||||
|
||||
public static byte[] generateTbsCSR(String PCID, PublicKey publicKey) throws Exception {
|
||||
X500Name subjectRdn = new X500NameBuilder(BCStyle.INSTANCE)
|
||||
.addRDN(BCStyle.DC, "OEM")
|
||||
.addRDN(BCStyle.C, "KR")
|
||||
.addRDN(BCStyle.O, "HKMC")
|
||||
.addRDN(BCStyle.OU, "ECC")
|
||||
.addRDN(BCStyle.OU, "C001")
|
||||
.addRDN(BCStyle.OU, "P001")
|
||||
.addRDN(BCStyle.CN, PCID)
|
||||
.build();
|
||||
|
||||
SubjectPublicKeyInfo subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(ASN1Sequence.getInstance(publicKey.getEncoded()));
|
||||
CertificationRequestInfo certificationRequestInfo = new CertificationRequestInfo(subjectRdn, subjectPublicKeyInfo, new DERSet() );
|
||||
byte[] tbsCSR = certificationRequestInfo.getEncoded();
|
||||
|
||||
return tbsCSR;
|
||||
}
|
||||
|
||||
public static String generateCSR(byte[] tbsCSR, byte[] signedCSR) throws Exception {
|
||||
CertificationRequestInfo certificationRequestInfo = CertificationRequestInfo.getInstance(tbsCSR);
|
||||
CertificationRequest certificationRequest = new CertificationRequest(certificationRequestInfo,
|
||||
new AlgorithmIdentifier (X9ObjectIdentifiers.ecdsa_with_SHA256),
|
||||
new DERBitString(signedCSR) );
|
||||
|
||||
PKCS10CertificationRequest pKCS10CertificationRequest = new PKCS10CertificationRequest(certificationRequest);
|
||||
|
||||
String csrString = PkiFactory.convertPem("CERTIFICATE REQUEST", pKCS10CertificationRequest.getEncoded());
|
||||
return csrString;
|
||||
}
|
||||
|
||||
public static String generateCSR(String PCID, KeyPair keyPair) throws Exception {
|
||||
X500Name subjectRdn = new X500NameBuilder(BCStyle.INSTANCE)
|
||||
.addRDN(BCStyle.DC, "OEM")
|
||||
.addRDN(BCStyle.C, "KR")
|
||||
.addRDN(BCStyle.O, "HKMC")
|
||||
.addRDN(BCStyle.OU, "ECC")
|
||||
.addRDN(BCStyle.OU, "C001")
|
||||
.addRDN(BCStyle.OU, "P001")
|
||||
.addRDN(BCStyle.CN, PCID)
|
||||
.build();
|
||||
|
||||
PKCS10CertificationRequestBuilder pkcs10Builder = new JcaPKCS10CertificationRequestBuilder(subjectRdn, keyPair.getPublic());
|
||||
PKCS10CertificationRequest request = pkcs10Builder.build(
|
||||
new JcaContentSignerBuilder(ConfigureInfo.SIGN_ALGORITHM).setProvider(BouncyCastleProvider.PROVIDER_NAME).build(keyPair.getPrivate()));
|
||||
|
||||
String csrString = PkiFactory.convertPem("CERTIFICATE REQUEST", request.getEncoded());
|
||||
return csrString;
|
||||
}
|
||||
|
||||
public static String generatePCID(String macAddress) {
|
||||
//UUID Version 5
|
||||
String test = getV5Uuid(NAMESPACE_DNS, macAddress).toString().replace("-","");
|
||||
//Base16 to Base32
|
||||
BigInteger num=new BigInteger(test,16);
|
||||
String b32Uuid = num.toString(32).toUpperCase();
|
||||
//OEM Unique ID
|
||||
String oemUniqueID = b32Uuid.substring(b32Uuid.length()-14,b32Uuid.length());
|
||||
//Create PCID
|
||||
String PCID = ConfigureInfo.WMI + oemUniqueID;
|
||||
//Calculate CheckSum
|
||||
PCID += calcCheckSum(PCID.toUpperCase());
|
||||
return PCID;
|
||||
}
|
||||
|
||||
private static String calcCheckSum(String PCID) {
|
||||
String checkSumSource = "";
|
||||
|
||||
for (int i = 0; i < PCID.length(); i++) {
|
||||
if(PCID.charAt(i) >= 'A') {
|
||||
checkSumSource += ALPHA.get(PCID.charAt(i));
|
||||
}else{
|
||||
checkSumSource += PCID.charAt(i);
|
||||
}
|
||||
}
|
||||
|
||||
double checkDigit = 0;
|
||||
for (int i = 0; i < checkSumSource.length(); i++) {
|
||||
int num = Integer.parseInt(checkSumSource.substring(i,i+1));
|
||||
checkDigit += num * Math.pow(2,i);
|
||||
}
|
||||
String checkDigitStr;
|
||||
checkDigitStr = (checkDigit % 11 == 10) ? "X" : String.valueOf((int)(checkDigit % 11));
|
||||
|
||||
return checkDigitStr;
|
||||
}
|
||||
|
||||
public static UUID getV5Uuid(UUID namespace, String name) {
|
||||
return getV5Uuid(namespace, Objects.requireNonNull(name, "name == null").getBytes(UTF8));
|
||||
}
|
||||
|
||||
public static UUID getV5Uuid(UUID namespace, byte[] name) {
|
||||
MessageDigest md;
|
||||
try {
|
||||
md = MessageDigest.getInstance("SHA-1");
|
||||
} catch (NoSuchAlgorithmException nsae) {
|
||||
throw new InternalError("SHA-1 not supported");
|
||||
}
|
||||
md.update(toBytes(Objects.requireNonNull(namespace, "namespace is null")));
|
||||
md.update(Objects.requireNonNull(name, "name is null"));
|
||||
byte[] sha1Bytes = md.digest();
|
||||
sha1Bytes[6] &= 0x0f; /* clear version */
|
||||
sha1Bytes[6] |= 0x50; /* set to version 5 */
|
||||
sha1Bytes[8] &= 0x3f; /* clear variant */
|
||||
sha1Bytes[8] |= 0x80; /* set to IETF variant */
|
||||
return fromBytes(sha1Bytes);
|
||||
}
|
||||
|
||||
private static UUID fromBytes(byte[] data) {
|
||||
// Based on the private UUID(bytes[]) constructor
|
||||
long msb = 0;
|
||||
long lsb = 0;
|
||||
assert data.length >= 16;
|
||||
for (int i = 0; i < 8; i++)
|
||||
msb = (msb << 8) | (data[i] & 0xff);
|
||||
for (int i = 8; i < 16; i++)
|
||||
lsb = (lsb << 8) | (data[i] & 0xff);
|
||||
return new UUID(msb, lsb);
|
||||
}
|
||||
|
||||
private static byte[] toBytes(UUID uuid) {
|
||||
// inverted logic of fromBytes()
|
||||
byte[] out = new byte[16];
|
||||
long msb = uuid.getMostSignificantBits();
|
||||
long lsb = uuid.getLeastSignificantBits();
|
||||
for (int i = 0; i < 8; i++)
|
||||
out[i] = (byte) ((msb >> ((7 - i) * 8)) & 0xff);
|
||||
for (int i = 8; i < 16; i++)
|
||||
out[i] = (byte) ((lsb >> ((15 - i) * 8)) & 0xff);
|
||||
return out;
|
||||
}
|
||||
}
|
||||
89984
Projects/VPKI/Doc/pEOLSVRT001.CpXv01e
Normal file
89984
Projects/VPKI/Doc/pEOLSVRT001.CpXv01e
Normal file
File diff suppressed because it is too large
Load Diff
89427
Projects/VPKI/Doc/pEOLSVRT001_orgin.CpXv01e
Normal file
89427
Projects/VPKI/Doc/pEOLSVRT001_orgin.CpXv01e
Normal file
File diff suppressed because it is too large
Load Diff
89772
Projects/VPKI/Doc/pEOLSVRT001_readonly.CpXv01e
Normal file
89772
Projects/VPKI/Doc/pEOLSVRT001_readonly.CpXv01e
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Projects/VPKI/Doc/커넥티드카 인증서비스(vPKI) API 정의서_v2.1.pdf
Normal file
BIN
Projects/VPKI/Doc/커넥티드카 인증서비스(vPKI) API 정의서_v2.1.pdf
Normal file
Binary file not shown.
Reference in New Issue
Block a user