[성현모] VPKI 프로젝트 Import

This commit is contained in:
SHM
2025-04-24 15:42:47 +09:00
parent 0a6016bc95
commit 8dcddd431b
188 changed files with 280230 additions and 68 deletions

View File

@ -37,7 +37,6 @@ builder.Services.AddHttpContextAccessor();
builder.Services.AddSingleton<ConfigService<WebApiConfig>>();
//scoped
builder.Services.AddSingleton<EFCoreService>();
builder.Services.AddSingleton<UniqueKeyService>();
//config preload

View File

@ -1,62 +0,0 @@
using DB.HubXDB;
using HubX.Library.Config;
using Microsoft.EntityFrameworkCore;
using SystemX.Core.Config.Model;
using SystemX.Core.DB;
using SystemX.Core.Services;
namespace HubX.Server.Services
{
public class EFCoreService
{
private readonly Dictionary<string, DbContext> DicDbContext = new Dictionary<string, DbContext>();
private readonly ConfigService<WebApiConfig> _configService;
public EFCoreService(ConfigService<WebApiConfig> configService)
{
_configService = configService;
InitializeDB();
}
#region Initialize DBContext
private void InitializeDB()
{
var dbList = _configService.GetConfig()?.DataBase;
if (dbList is not null)
{
foreach (var db in dbList)
{
if (typeof(HubXContext).Name == db.DBContext)
{
CreateDBContext<HubXContext>(db);
}
}
}
}
private void CreateDBContext<TDBContext>(DataBase? dbConfig) where TDBContext : DbContext, new()
{
var connectionString = dbConfig?.ConvertToConnectionString();
var dbContext = new TDBContext();
dbContext.Database.SetConnectionString($"{connectionString}");
if (dbContext is not null)
DicDbContext.Add($"{dbConfig?.DBContext}_{dbConfig?.DBID}", dbContext);
}
#endregion
public TDBContext? GetDBContext<TDBContext>(int dbID = 1) where TDBContext : DbContext
{
TDBContext? dBContext = default;
var dbContextType = typeof(TDBContext);
if (DicDbContext.TryGetValue($"{dbContextType.Name}_{dbID}", out var context) == true)
{
dBContext = context as TDBContext;
}
return dBContext;
}
}//class end
}

View File

@ -12,12 +12,10 @@ namespace HubX.Server.Services
{
public class UniqueKeyService
{
private readonly EFCoreService _efCoreService;
private readonly IServiceScopeFactory _scopeFactory;
public UniqueKeyService(EFCoreService efCoreService, IServiceScopeFactory scopeFactory)
public UniqueKeyService(IServiceScopeFactory scopeFactory)
{
_efCoreService = efCoreService;
_scopeFactory = scopeFactory;
}

View 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"}}

View 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-----

View 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-----

View 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-----

View 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-----

View 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-----

View File

@ -0,0 +1,12 @@
-----BEGIN CERTIFICATE-----
MIIBvzCCAWSgAwIBAgIBCDAKBggqhkjOPQQDAjBVMQswCQYDVQQGEwJLUjEMMAoG
A1UECgwDSE1DMQwwCgYDVQQLDANITUMxEzARBgoJkiaJk/IsZAEZFgNWMkcxFTAT
BgNVBAMMDEhLTUNfVjJHUm9vdDAgFw0yMDEwMjMwNjMwMzdaGA8yMDYwMTAyMzA2
MzAzN1owVTELMAkGA1UEBhMCS1IxDDAKBgNVBAoMA0hNQzEMMAoGA1UECwwDSE1D
MRMwEQYKCZImiZPyLGQBGRYDVjJHMRUwEwYDVQQDDAxIS01DX1YyR1Jvb3QwWTAT
BgcqhkjOPQIBBggqhkjOPQMBBwNCAASUdouD9q4WZ4oa78OjCtnIItxXUNucbuAr
MMu3OtKTsmcICYUHXvxJgjwbg7HYDQZlol925KzErxRo9VaBKIXwoyMwITAOBgNV
HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNJADBGAiEA
w3Dqs4EbnjASNeIPjxWtOq4hl8c1rYbAtXQlbEuNWe0CIQD+/A/+FdJ5Bmjlnzd+
TtRa7sijicilfv3FJ6WgHb5DxQ==
-----END CERTIFICATE-----

View 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-----

View File

@ -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-----

View File

@ -0,0 +1 @@
https://www.hubject.com/download-pki

View File

@ -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-----

View File

@ -0,0 +1 @@
https://developer.tesla.com/docs/charging/public-key-infrastructure

View File

@ -0,0 +1,13 @@
-----BEGIN CERTIFICATE-----
MIICADCCAaagAwIBAgIEYhPadTAKBggqhkjOPQQDAjBmMQswCQYDVQQGEwJVUzEQ
MA4GA1UEChMHRW50cnVzdDETMBEGCgmSJomT8ixkARkWA1YyRzESMBAGA1UECxMJ
Um9vdCBDQS0xMRwwGgYDVQQDExNFViBDaGFyZ2luZyBSb290IENBMB4XDTIyMDIy
MTE4MDE0NVoXDTQyMDIyMTE4MzE0NVowZjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
B0VudHJ1c3QxEzARBgoJkiaJk/IsZAEZFgNWMkcxEjAQBgNVBAsTCVJvb3QgQ0Et
MTEcMBoGA1UEAxMTRVYgQ2hhcmdpbmcgUm9vdCBDQTBZMBMGByqGSM49AgEGCCqG
SM49AwEHA0IABO2/mxzLtuJb4UOvbkWhldki74hLA74JdLaLpMYkum4Rzj0jFR8v
qXGw2lqOMzS07Qa5hdhDD/RPbnqK88QEOpijQjBAMA4GA1UdDwEB/wQEAwIBhjAP
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBStEjXPjOynDIOPwlUQHqqVwLXWGDAK
BggqhkjOPQQDAgNIADBFAiALn070oBr6iZwhEw6vxvWKLijgM7Tiv3IA5I6AB3Ps
nwIhAPpzdOOYrXeISrPgCNBGase0k8k6S0klXt6WWLJryNVN
-----END CERTIFICATE-----

View 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-----

View 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-----

View File

@ -0,0 +1,12 @@
-----BEGIN CERTIFICATE-----
MIIBvzCCAWSgAwIBAgIBCDAKBggqhkjOPQQDAjBVMQswCQYDVQQGEwJLUjEMMAoG
A1UECgwDSE1DMQwwCgYDVQQLDANITUMxEzARBgoJkiaJk/IsZAEZFgNWMkcxFTAT
BgNVBAMMDEhLTUNfVjJHUm9vdDAgFw0yMDEwMjMwNjMwMzdaGA8yMDYwMTAyMzA2
MzAzN1owVTELMAkGA1UEBhMCS1IxDDAKBgNVBAoMA0hNQzEMMAoGA1UECwwDSE1D
MRMwEQYKCZImiZPyLGQBGRYDVjJHMRUwEwYDVQQDDAxIS01DX1YyR1Jvb3QwWTAT
BgcqhkjOPQIBBggqhkjOPQMBBwNCAASUdouD9q4WZ4oa78OjCtnIItxXUNucbuAr
MMu3OtKTsmcICYUHXvxJgjwbg7HYDQZlol925KzErxRo9VaBKIXwoyMwITAOBgNV
HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNJADBGAiEA
w3Dqs4EbnjASNeIPjxWtOq4hl8c1rYbAtXQlbEuNWe0CIQD+/A/+FdJ5Bmjlnzd+
TtRa7sijicilfv3FJ6WgHb5DxQ==
-----END CERTIFICATE-----

View 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-----

Binary file not shown.

Binary file not shown.

Binary file not shown.

View 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";
}

View 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;
}
}

View 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;
}
}
}

View 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;
}
}

View 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);
}
}

View 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;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
::도커 재실행
@echo off
cd ../VPKI.DB/DBPatch
::start CreateAccountDB.bat
::start CreateDataDB.bat
timeout /t 3

View File

@ -0,0 +1,7 @@
cd ../VPKI/VPKI.Library.DB
::AccountDB
dotnet ef dbcontext scaffold "server=127.0.0.1; user id=VPKI; password=Kefico!@34; database=VPKI_AccountDB; TrustServerCertificate=true;" Microsoft.EntityFrameworkCore.SqlServer --namespace DB.VPKI_AccountDB --context-dir DB\VPKI_AccountDB\Context --output-dir DB\VPKI_AccountDB\Tables -f
::DataDB
dotnet ef dbcontext scaffold "server=127.0.0.1; user id=VPKI; password=Kefico!@34; database=VPKI_DataDB; TrustServerCertificate=true;" Microsoft.EntityFrameworkCore.SqlServer --namespace DB.VPKI_DataDB --context-dir DB\VPKI_DataDB\Context --output-dir DB\VPKI_DataDB\Tables -f

View File

@ -0,0 +1,9 @@
::도커 재실행
@echo off
cd ../VPKI.DB/DBPatch
::start UpdateAccountDB.bat
start UpdateDataDB.bat
timeout /t 3

View File

@ -0,0 +1,11 @@
@echo off
cd ../VPKI
::dotnet 빌드
dotnet build ..\VPKI\VPKI.Web.Api\VPKI.Web.Api.csproj
::도커 빌드
docker build -f ..\VPKI\VPKI.Web.Api\Dockerfile . -t vpki.web.api
timeout /t 3

View File

@ -0,0 +1,9 @@
::도커 재실행
@echo off
cd ../VPKI
docker compose down
docker compose up -d
timeout /t 3

View File

@ -0,0 +1,8 @@
::도커 이미지 안에 로그 보기위해 최신 날짜로 열기
@echo off
set YEAR=%date:~0,4%
set MONTH=%date:~5,2%
set DAY=%date:~8,2%
Powershell.exe get-content ..\VPKI\Docker_log\%YEAR%\%MONTH%\%date%.log -wait -tail 20

View File

@ -0,0 +1,7 @@
::인터넷 연결 없이 도커 빌드하기 위해 다른 이미지로 copy
::copy해두지 않으면 자동으로 외부 연결하면서 빌드가 안된다
docker pull mcr.microsoft.com/dotnet/sdk:8.0
docker tag mcr.microsoft.com/dotnet/sdk:8.0 dotnet8
timeout /t 3

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,17 @@
@echo off
::log
IF NOT EXIST .\logs mkdir logs
::서버연결정보
SET ServerIP=127.0.0.1
SET ServerPort=1433
::DB 정보
SET UserID=VPKI
SET Passwd=Kefico!@34
SET DBName=VPKI_AccountDB
::Default DB
@echo off
CALL CreateVPKIAccountDB.bat %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%
CALL CreateVPKIAccountDB.bat %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV

View File

@ -0,0 +1,17 @@
@echo off
::log
IF NOT EXIST .\logs mkdir logs
::서버연결정보
SET ServerIP=127.0.0.1
SET ServerPort=1433
::DB 정보
SET UserID=VPKI
SET Passwd=Kefico!@34
SET DBName=VPKI_DataDB
::Default DB
@echo off
CALL CreateVPKIDataDB.bat %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%
CALL CreateVPKIDataDB.bat %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV

View File

@ -0,0 +1,18 @@
@echo off
SET ServerIP=%1
SET ServerPort=%2
SET UserID=%3
SET Passwd=%4
SET DBName=%5
SET SqlCmdOption=-C -U %UserID% -P %Passwd% -S %ServerIP%,%ServerPort% -f 65001 -o .\logs\%DBName%.log
SET DatabaseName=%DBName%
sqlcmd %SqlCmdOption% -i .\sqlScripts\VPKI.AccountDB_Create.sql
if errorlevel 1 goto errexit
goto end
:errexit
echo DB Patch Fail
goto end
:end
@echo on

View File

@ -0,0 +1,18 @@
@echo off
SET ServerIP=%1
SET ServerPort=%2
SET UserID=%3
SET Passwd=%4
SET DBName=%5
SET SqlCmdOption=-C -U %UserID% -P %Passwd% -S %ServerIP%,%ServerPort% -f 65001 -o .\logs\%DBName%.log
SET DatabaseName=%DBName%
sqlcmd %SqlCmdOption% -i .\sqlScripts\VPKI.DataDB_Create.sql
if errorlevel 1 goto errexit
goto end
:errexit
echo DB Patch Fail
goto end
:end
@echo on

View File

@ -0,0 +1,25 @@
@echo off
::log
IF NOT EXIST .\logs mkdir logs
::서버연결정보
SET ServerIP=127.0.0.1
SET ServerPort=1433
::DB 정보
SET UserID=VPKI
SET Passwd=Kefico!@34
SET DBName=VPKI_AccountDB
::Update script 정보
SET Dacpac=.\sqlScripts\dacpac\VPKI.AccountDB.dacpac
SET OUTPUT=VPKI.AccountDB_Update.sql
@echo off
::generate update script
CALL UpdateScriptGenerate.bat %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% %Dacpac% %OUTPUT%
::Default DB
CALL UpdateVPKIAccountDB.bat %ServerIP% %ServerPort% %UserID% %Passwd% VPKI_AccountDB
CALL UpdateVPKIAccountDB.bat %ServerIP% %ServerPort% %UserID% %Passwd% VPKI_AccountDB_DEV

View File

@ -0,0 +1,25 @@
@echo off
::log
IF NOT EXIST .\logs mkdir logs
::서버연결정보
SET ServerIP=127.0.0.1
SET ServerPort=1433
::DB 정보
SET UserID=VPKI
SET Passwd=Kefico!@34
SET DBName=VPKI_DataDB
::Update script 정보
SET Dacpac=.\sqlScripts\dacpac\VPKI.DataDB.dacpac
SET OUTPUT=VPKI.DataDB_Update.sql
@echo off
::generate update script
CALL UpdateScriptGenerate.bat %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% %Dacpac% %OUTPUT%
::Default DB
CALL UpdateVPKIDataDB.bat %ServerIP% %ServerPort% %UserID% %Passwd% VPKI_DataDB
CALL UpdateVPKIDataDB.bat %ServerIP% %ServerPort% %UserID% %Passwd% VPKI_DataDB_DEV

View File

@ -0,0 +1,12 @@
@echo off
SET ServerIP=%1
SET ServerPort=%2
SET UserID=%3
SET Passwd=%4
SET DBName=%5
SET Dacpac=%6
SET OUTPUT=%7
::create update sql file
sqlpackage /Action:Script /SourceFile:%Dacpac% /TargetConnectionString:"server=%ServerIP%,%ServerPort%; user id=%UserID%; password=%Passwd%; database=%DBName%; TrustServerCertificate=true" /OutputPath:".\sqlScripts\%OUTPUT%" /p:CommentOutSetVarDeclarations=True

View File

@ -0,0 +1,19 @@
@echo off
SET ServerIP=%1
SET ServerPort=%2
SET UserID=%3
SET Passwd=%4
SET DBName=%5
SET SqlCmdOption=-U %UserID% -P %Passwd% -S %ServerIP%,%ServerPort% -d %DBName% -o .\logs\%DBName%.log
SET DatabaseName=%DBName%
sqlcmd %SqlCmdOption% -i .\sqlScripts\VPKI.AccountDB_Update.sql
if errorlevel 1 goto errexit
goto end
:errexit
echo DB Patch Fail
goto end
:end
@echo on

View File

@ -0,0 +1,19 @@
@echo off
SET ServerIP=%1
SET ServerPort=%2
SET UserID=%3
SET Passwd=%4
SET DBName=%5
SET SqlCmdOption=-U %UserID% -P %Passwd% -S %ServerIP%,%ServerPort% -d %DBName% -o .\logs\%DBName%.log
SET DatabaseName=%DBName%
sqlcmd %SqlCmdOption% -i .\sqlScripts\VPKI.DataDB_Update.sql
if errorlevel 1 goto errexit
goto end
:errexit
echo DB Patch Fail
goto end
:end
@echo on

View File

@ -0,0 +1,19 @@
@echo Create Admin Account Start
@echo off
SET SqlCmdOption=-E -C
sqlcmd %SqlCmdOption% -i %~dp0\sqlScripts\AdminAccount_Create.sql
if errorlevel 1 goto errexit
goto end
:errexit
echo DB Patch Fail
goto end
:end
@echo on
@echo Create Admin Account End
net stop /y MSSQLSERVER
net start /y MSSQLSERVER
pause

View File

@ -0,0 +1,20 @@
USE [master]
GO
CREATE LOGIN [VPKI] WITH PASSWORD=N'Kefico!@34', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[English], CHECK_POLICY=ON
GO
ALTER LOGIN [VPKI] ENABLE
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [VPKI]
GO
ALTER SERVER ROLE [securityadmin] ADD MEMBER [VPKI]
GO
ALTER SERVER ROLE [serveradmin] ADD MEMBER [VPKI]
GO
ALTER SERVER ROLE [setupadmin] ADD MEMBER [VPKI]
GO

View File

@ -0,0 +1,365 @@
/*
VPKI.AccountDB의 배포 스크립트
이 코드는 도구를 사용하여 생성되었습니다.
파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
변경 내용이 손실됩니다.
*/
GO
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
SET NUMERIC_ROUNDABORT OFF;
GO
/*
:setvar DatabaseName "VPKI.AccountDB"
:setvar DefaultFilePrefix "VPKI.AccountDB"
:setvar DefaultDataPath ""
:setvar DefaultLogPath ""
*/
GO
:on error exit
GO
/*
SQLCMD 모드가 지원되지 않으면 SQLCMD 모드를 검색하고 스크립트를 실행하지 않습니다.
SQLCMD 모드를 설정한 후에 이 스크립트를 다시 사용하려면 다음을 실행합니다.
SET NOEXEC OFF;
*/
:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
BEGIN
PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.';
SET NOEXEC ON;
END
GO
USE [master];
GO
IF (DB_ID(N'$(DatabaseName)') IS NOT NULL)
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE [$(DatabaseName)];
END
GO
PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...'
GO
CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS
GO
USE [$(DatabaseName)];
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET ANSI_NULLS ON,
ANSI_PADDING ON,
ANSI_WARNINGS ON,
ARITHABORT ON,
CONCAT_NULL_YIELDS_NULL ON,
NUMERIC_ROUNDABORT OFF,
QUOTED_IDENTIFIER ON,
ANSI_NULL_DEFAULT ON,
CURSOR_DEFAULT LOCAL,
RECOVERY SIMPLE,
CURSOR_CLOSE_ON_COMMIT OFF,
AUTO_CREATE_STATISTICS ON,
AUTO_SHRINK OFF,
AUTO_UPDATE_STATISTICS ON,
RECURSIVE_TRIGGERS OFF
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET ALLOW_SNAPSHOT_ISOLATION OFF;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET READ_COMMITTED_SNAPSHOT OFF
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET AUTO_UPDATE_STATISTICS_ASYNC OFF,
PAGE_VERIFY NONE,
DATE_CORRELATION_OPTIMIZATION OFF,
DISABLE_BROKER,
PARAMETERIZATION SIMPLE,
SUPPLEMENTAL_LOGGING OFF
WITH ROLLBACK IMMEDIATE;
END
GO
IF IS_SRVROLEMEMBER(N'sysadmin') = 1
BEGIN
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)]
SET TRUSTWORTHY OFF,
DB_CHAINING OFF
WITH ROLLBACK IMMEDIATE';
END
END
ELSE
BEGIN
PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.';
END
GO
IF IS_SRVROLEMEMBER(N'sysadmin') = 1
BEGIN
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)]
SET HONOR_BROKER_PRIORITY OFF
WITH ROLLBACK IMMEDIATE';
END
END
ELSE
BEGIN
PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.';
END
GO
ALTER DATABASE [$(DatabaseName)]
SET TARGET_RECOVERY_TIME = 0 SECONDS
WITH ROLLBACK IMMEDIATE;
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF),
CONTAINMENT = NONE
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF),
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF,
DELAYED_DURABILITY = DISABLED
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100)
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET QUERY_STORE = OFF
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0;
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY;
ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF;
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY;
ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON;
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY;
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF;
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET TEMPORAL_HISTORY_RETENTION ON
WITH ROLLBACK IMMEDIATE;
END
GO
IF fulltextserviceproperty(N'IsFulltextInstalled') = 1
EXECUTE sp_fulltext_database 'enable';
GO
PRINT N'테이블 [dbo].[tRefreshToken]을(를) 만드는 중...';
GO
CREATE TABLE [dbo].[tRefreshToken] (
[cAuid] NVARCHAR (250) NOT NULL,
[cRefreshToken] NVARCHAR (1000) NOT NULL,
PRIMARY KEY CLUSTERED ([cAuid] ASC)
);
GO
PRINT N'테이블 [dbo].[tRole]을(를) 만드는 중...';
GO
CREATE TABLE [dbo].[tRole] (
[cAuid] NVARCHAR (250) NOT NULL,
[cRoleID] TINYINT NOT NULL,
[cRoleName] NVARCHAR (20) NOT NULL,
PRIMARY KEY CLUSTERED ([cAuid] ASC)
);
GO
PRINT N'테이블 [dbo].[tUser]을(를) 만드는 중...';
GO
CREATE TABLE [dbo].[tUser] (
[cUserID] NVARCHAR (50) NOT NULL,
[cAuid] NVARCHAR (250) NOT NULL,
[cPasswordHashed] NVARCHAR (250) NOT NULL,
[cState] TINYINT NOT NULL,
[cCreateDateTime] DATETIME2 (7) NOT NULL,
[cLastLoginDateTime] DATETIME2 (7) NULL,
PRIMARY KEY CLUSTERED ([cUserID] ASC)
);
GO
-- 배포된 트랜잭션 로그를 사용하여 대상 서버를 업데이트하는 리팩터링 단계
IF OBJECT_ID(N'dbo.__RefactorLog') IS NULL
BEGIN
CREATE TABLE [dbo].[__RefactorLog] (OperationKey UNIQUEIDENTIFIER NOT NULL PRIMARY KEY)
EXEC sp_addextendedproperty N'microsoft_database_tools_support', N'refactoring log', N'schema', N'dbo', N'table', N'__RefactorLog'
END
GO
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '7ca1fbc9-cead-4c01-b8df-1a9a69e13266')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('7ca1fbc9-cead-4c01-b8df-1a9a69e13266')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '7e3c9cab-1b27-43f3-8519-960704ce037b')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('7e3c9cab-1b27-43f3-8519-960704ce037b')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = 'f0511507-0a0d-4bde-a3b2-39b5106c85f0')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('f0511507-0a0d-4bde-a3b2-39b5106c85f0')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = 'da1fde46-473c-41bb-aa02-260e3385475d')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('da1fde46-473c-41bb-aa02-260e3385475d')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '8f767203-3e50-46b7-a513-53461cf358ac')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('8f767203-3e50-46b7-a513-53461cf358ac')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '4b1fa7eb-a0b5-425d-8358-7a8ca6cff7ad')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('4b1fa7eb-a0b5-425d-8358-7a8ca6cff7ad')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '5e298150-8e73-458c-aad7-8bf15975edc0')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('5e298150-8e73-458c-aad7-8bf15975edc0')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '6b49864f-05d3-40ae-9c55-b7845af2d49e')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('6b49864f-05d3-40ae-9c55-b7845af2d49e')
GO
GO
/*
배포 후 스크립트 템플릿
--------------------------------------------------------------------------------------
이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다.
SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다.
예: :r .\myfile.sql
SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다.
예: :setvar TableName MyTable
SELECT * FROM [$(TableName)]
--------------------------------------------------------------------------------------
*/
IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'Alis')
BEGIN
INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime)
VALUES ('Alis', 'SuperUser' ,'oKLQCdunc2kT5aAVfK+POKwd8R3p8OZvs/NATwpg4gM=' ,1 ,GETDATE(), GETDATE());
INSERT INTO tRole(cAuid, cRoleID, cRoleName)
VALUES ('SuperUser','20','SuperUser');
END
GO
GO
DECLARE @VarDecimalSupported AS BIT;
SELECT @VarDecimalSupported = 0;
IF ((ServerProperty(N'EngineEdition') = 3)
AND (((@@microsoftversion / power(2, 24) = 9)
AND (@@microsoftversion & 0xffff >= 3024))
OR ((@@microsoftversion / power(2, 24) = 10)
AND (@@microsoftversion & 0xffff >= 1600))))
SELECT @VarDecimalSupported = 1;
IF (@VarDecimalSupported > 0)
BEGIN
EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON';
END
GO
ALTER DATABASE [$(DatabaseName)]
SET MULTI_USER
WITH ROLLBACK IMMEDIATE;
GO
PRINT N'업데이트가 완료되었습니다.';
GO

View File

@ -0,0 +1,380 @@
/*
VPKI.DataDB의 배포 스크립트
이 코드는 도구를 사용하여 생성되었습니다.
파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
변경 내용이 손실됩니다.
*/
GO
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
SET NUMERIC_ROUNDABORT OFF;
GO
/*
:setvar DatabaseName "VPKI.DataDB"
:setvar DefaultFilePrefix "VPKI.DataDB"
:setvar DefaultDataPath ""
:setvar DefaultLogPath ""
*/
GO
:on error exit
GO
/*
SQLCMD 모드가 지원되지 않으면 SQLCMD 모드를 검색하고 스크립트를 실행하지 않습니다.
SQLCMD 모드를 설정한 후에 이 스크립트를 다시 사용하려면 다음을 실행합니다.
SET NOEXEC OFF;
*/
:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
BEGIN
PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.';
SET NOEXEC ON;
END
GO
USE [master];
GO
IF (DB_ID(N'$(DatabaseName)') IS NOT NULL)
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE [$(DatabaseName)];
END
GO
PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...'
GO
CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS
GO
USE [$(DatabaseName)];
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET ANSI_NULLS ON,
ANSI_PADDING ON,
ANSI_WARNINGS ON,
ARITHABORT ON,
CONCAT_NULL_YIELDS_NULL ON,
NUMERIC_ROUNDABORT OFF,
QUOTED_IDENTIFIER ON,
ANSI_NULL_DEFAULT ON,
CURSOR_DEFAULT LOCAL,
RECOVERY SIMPLE,
CURSOR_CLOSE_ON_COMMIT OFF,
AUTO_CREATE_STATISTICS ON,
AUTO_SHRINK OFF,
AUTO_UPDATE_STATISTICS ON,
RECURSIVE_TRIGGERS OFF
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET ALLOW_SNAPSHOT_ISOLATION OFF;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET READ_COMMITTED_SNAPSHOT OFF
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET AUTO_UPDATE_STATISTICS_ASYNC OFF,
PAGE_VERIFY NONE,
DATE_CORRELATION_OPTIMIZATION OFF,
DISABLE_BROKER,
PARAMETERIZATION SIMPLE,
SUPPLEMENTAL_LOGGING OFF
WITH ROLLBACK IMMEDIATE;
END
GO
IF IS_SRVROLEMEMBER(N'sysadmin') = 1
BEGIN
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)]
SET TRUSTWORTHY OFF,
DB_CHAINING OFF
WITH ROLLBACK IMMEDIATE';
END
END
ELSE
BEGIN
PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.';
END
GO
IF IS_SRVROLEMEMBER(N'sysadmin') = 1
BEGIN
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)]
SET HONOR_BROKER_PRIORITY OFF
WITH ROLLBACK IMMEDIATE';
END
END
ELSE
BEGIN
PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.';
END
GO
ALTER DATABASE [$(DatabaseName)]
SET TARGET_RECOVERY_TIME = 0 SECONDS
WITH ROLLBACK IMMEDIATE;
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF),
CONTAINMENT = NONE
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF),
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF,
DELAYED_DURABILITY = DISABLED
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100)
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET QUERY_STORE = OFF
WITH ROLLBACK IMMEDIATE;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0;
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY;
ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF;
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY;
ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON;
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY;
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF;
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET TEMPORAL_HISTORY_RETENTION ON
WITH ROLLBACK IMMEDIATE;
END
GO
IF fulltextserviceproperty(N'IsFulltextInstalled') = 1
EXECUTE sp_fulltext_database 'enable';
GO
PRINT N'테이블 [dbo].[tVerifyResult]을(를) 만드는 중...';
GO
CREATE TABLE [dbo].[tVerifyResult] (
[cCuid] BIGINT NOT NULL,
[cResult] NCHAR (20) NOT NULL,
PRIMARY KEY CLUSTERED ([cCuid] ASC)
);
GO
PRINT N'테이블 [dbo].[tOcsp]을(를) 만드는 중...';
GO
CREATE TABLE [dbo].[tOcsp] (
[cCuid] BIGINT NOT NULL,
[cStatus] NVARCHAR (20) NOT NULL,
[cVerify] NVARCHAR (20) NOT NULL,
[cOcsp] NVARCHAR (MAX) NULL,
[cDateTime] DATETIME2 (7) NOT NULL,
PRIMARY KEY CLUSTERED ([cCuid] ASC)
);
GO
PRINT N'테이블 [dbo].[tTbscsr]을(를) 만드는 중...';
GO
CREATE TABLE [dbo].[tTbscsr] (
[cCuid] BIGINT IDENTITY (1, 1) NOT NULL,
[cIftid] NVARCHAR (100) NOT NULL,
[cMacaddr] NVARCHAR (100) NOT NULL,
[cWmi] NVARCHAR (20) NOT NULL,
[cIdType] NVARCHAR (10) NOT NULL,
[cSupplierId] NVARCHAR (10) NOT NULL,
[cDc] NVARCHAR (20) NOT NULL,
[cTierCode] NVARCHAR (20) NOT NULL,
[cUnitCode] NVARCHAR (20) NOT NULL,
[cPublickey] NVARCHAR (1024) NOT NULL,
[cCertType] NVARCHAR (20) NOT NULL,
[cOriginTbscsr] NVARCHAR (4000) NOT NULL,
[cHashedTbscsr] NVARCHAR (1024) NOT NULL,
[cPcid] NVARCHAR (50) NOT NULL,
[cDn] NVARCHAR (250) NOT NULL,
[cDateTime] DATETIME2 (7) NOT NULL,
PRIMARY KEY CLUSTERED ([cCuid] ASC)
);
GO
PRINT N'테이블 [dbo].[tCertificate]을(를) 만드는 중...';
GO
CREATE TABLE [dbo].[tCertificate] (
[cCuid] BIGINT NOT NULL,
[cCsrsignature] NVARCHAR (1024) NOT NULL,
[cTierCode] NVARCHAR (20) NOT NULL,
[cUnitCode] NVARCHAR (20) NOT NULL,
[cVehicleCode] NVARCHAR (20) NOT NULL,
[cLocalCode] NVARCHAR (20) NOT NULL,
[cBrandCode] NVARCHAR (20) NOT NULL,
[cCsr] NVARCHAR (2048) NOT NULL,
[cCert] NVARCHAR (2048) NOT NULL,
[cMessage] NVARCHAR (250) NOT NULL,
[cIssueCount] INT NOT NULL,
[cDateTime] DATETIME2 (7) NOT NULL,
PRIMARY KEY CLUSTERED ([cCuid] ASC)
);
GO
-- 배포된 트랜잭션 로그를 사용하여 대상 서버를 업데이트하는 리팩터링 단계
IF OBJECT_ID(N'dbo.__RefactorLog') IS NULL
BEGIN
CREATE TABLE [dbo].[__RefactorLog] (OperationKey UNIQUEIDENTIFIER NOT NULL PRIMARY KEY)
EXEC sp_addextendedproperty N'microsoft_database_tools_support', N'refactoring log', N'schema', N'dbo', N'table', N'__RefactorLog'
END
GO
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = 'aef5aa4e-a13d-46f1-b18e-e058c617b408')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('aef5aa4e-a13d-46f1-b18e-e058c617b408')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '648c532d-8e23-44f8-b657-11f87afbf718')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('648c532d-8e23-44f8-b657-11f87afbf718')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '9ee0544c-0be5-4023-8ef4-033987c586b8')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('9ee0544c-0be5-4023-8ef4-033987c586b8')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '88f4fb4b-2eb9-4f7f-a439-a365764395e2')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('88f4fb4b-2eb9-4f7f-a439-a365764395e2')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '5a0e9793-c50f-4b5b-8c05-283639a11124')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('5a0e9793-c50f-4b5b-8c05-283639a11124')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '3ba5afba-2388-4351-9e65-025f6cbe3c89')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('3ba5afba-2388-4351-9e65-025f6cbe3c89')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '98b90247-2504-4303-be66-2742a0bf0681')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('98b90247-2504-4303-be66-2742a0bf0681')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '8fa6e7d1-aa81-4b5d-afbe-2bbf9823e5e3')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('8fa6e7d1-aa81-4b5d-afbe-2bbf9823e5e3')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '192ddc5c-7dab-4713-b486-4f0b3afb9817')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('192ddc5c-7dab-4713-b486-4f0b3afb9817')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = 'c7631cfd-d064-4fce-b44f-9df70e6cc41e')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('c7631cfd-d064-4fce-b44f-9df70e6cc41e')
GO
GO
DECLARE @VarDecimalSupported AS BIT;
SELECT @VarDecimalSupported = 0;
IF ((ServerProperty(N'EngineEdition') = 3)
AND (((@@microsoftversion / power(2, 24) = 9)
AND (@@microsoftversion & 0xffff >= 3024))
OR ((@@microsoftversion / power(2, 24) = 10)
AND (@@microsoftversion & 0xffff >= 1600))))
SELECT @VarDecimalSupported = 1;
IF (@VarDecimalSupported > 0)
BEGIN
EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON';
END
GO
ALTER DATABASE [$(DatabaseName)]
SET MULTI_USER
WITH ROLLBACK IMMEDIATE;
GO
PRINT N'업데이트가 완료되었습니다.';
GO

View File

@ -0,0 +1,195 @@
/*
VPKI_DataDB의 배포 스크립트
이 코드는 도구를 사용하여 생성되었습니다.
파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
변경 내용이 손실됩니다.
*/
GO
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
SET NUMERIC_ROUNDABORT OFF;
GO
/*
:setvar DatabaseName "VPKI_DataDB"
:setvar DefaultFilePrefix "VPKI_DataDB"
:setvar DefaultDataPath "D:\MSSQL\DATA\"
:setvar DefaultLogPath "D:\MSSQL\DATA\"
*/
GO
:on error exit
GO
/*
SQLCMD 모드가 지원되지 않으면 SQLCMD 모드를 검색하고 스크립트를 실행하지 않습니다.
SQLCMD 모드를 설정한 후에 이 스크립트를 다시 사용하려면 다음을 실행합니다.
SET NOEXEC OFF;
*/
:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
BEGIN
PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.';
SET NOEXEC ON;
END
GO
USE [$(DatabaseName)];
GO
/*
[dbo].[tCertificate].[cDn] 열이 삭제되므로 데이터 손실이 발생할 수 있습니다.
테이블 [dbo].[tCertificate]의 열 [[dbo].[tCertificate].[cCsrsignature]]을(를) 추가해야 하지만 해당 열에 기본값이 없으며 NULL 값을 허용하지 않습니다. 테이블에 데이터가 있으면 ALTER 스크립트가 실행되지 않습니다. 이러한 문제를 방지하려면 열에 기본값을 추가 및 해당 열을 NULL 값을 허용하도록 표시하거나 스마트 기본값을 배포 옵션으로서 생성할 수 있도록 하십시오.
[dbo].[tCertificate] 테이블의 cCert 열을 NULL에서 NOT NULL로 변경해야 합니다. 테이블에 데이터가 있으면 ALTER 스크립트가 실행되지 않습니다. 이러한 문제를 방지하려면 모든 행에 대해 이 열에 값을 추가 또는 해당 열을 NULL 값을 허용하도록 표시하거나 스마트 기본값을 배포 옵션으로서 생성할 수 있도록 하십시오.
[dbo].[tCertificate] 테이블의 cMessage 열을 NULL에서 NOT NULL로 변경해야 합니다. 테이블에 데이터가 있으면 ALTER 스크립트가 실행되지 않습니다. 이러한 문제를 방지하려면 모든 행에 대해 이 열에 값을 추가 또는 해당 열을 NULL 값을 허용하도록 표시하거나 스마트 기본값을 배포 옵션으로서 생성할 수 있도록 하십시오.
*/
IF EXISTS (select top 1 1 from [dbo].[tCertificate])
RAISERROR (N'행이 발견되었습니다. 데이터가 손실될 수 있으므로 스키마 업데이트가 종료됩니다.', 16, 127) WITH NOWAIT
GO
/*
[dbo].[tTbscsr].[cCsrsignature] 열이 삭제되므로 데이터 손실이 발생할 수 있습니다.
[dbo].[tTbscsr].[cTbscsrOrigin] 열이 삭제되므로 데이터 손실이 발생할 수 있습니다.
테이블 [dbo].[tTbscsr]의 열 [[dbo].[tTbscsr].[cDn]]을(를) 추가해야 하지만 해당 열에 기본값이 없으며 NULL 값을 허용하지 않습니다. 테이블에 데이터가 있으면 ALTER 스크립트가 실행되지 않습니다. 이러한 문제를 방지하려면 열에 기본값을 추가 및 해당 열을 NULL 값을 허용하도록 표시하거나 스마트 기본값을 배포 옵션으로서 생성할 수 있도록 하십시오.
테이블 [dbo].[tTbscsr]의 열 [[dbo].[tTbscsr].[cOriginTbscsr]]을(를) 추가해야 하지만 해당 열에 기본값이 없으며 NULL 값을 허용하지 않습니다. 테이블에 데이터가 있으면 ALTER 스크립트가 실행되지 않습니다. 이러한 문제를 방지하려면 열에 기본값을 추가 및 해당 열을 NULL 값을 허용하도록 표시하거나 스마트 기본값을 배포 옵션으로서 생성할 수 있도록 하십시오.
*/
IF EXISTS (select top 1 1 from [dbo].[tTbscsr])
RAISERROR (N'행이 발견되었습니다. 데이터가 손실될 수 있으므로 스키마 업데이트가 종료됩니다.', 16, 127) WITH NOWAIT
GO
PRINT N'[dbo].[tCertificate] 테이블 다시 빌드 시작...';
GO
BEGIN TRANSACTION;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET XACT_ABORT ON;
CREATE TABLE [dbo].[tmp_ms_xx_tCertificate] (
[cCuid] BIGINT NOT NULL,
[cCsrsignature] NVARCHAR (1024) NOT NULL,
[cTierCode] NVARCHAR (20) NOT NULL,
[cUnitCode] NVARCHAR (20) NOT NULL,
[cVehicleCode] NVARCHAR (20) NOT NULL,
[cLocalCode] NVARCHAR (20) NOT NULL,
[cBrandCode] NVARCHAR (20) NOT NULL,
[cCsr] NVARCHAR (2048) NOT NULL,
[cCert] NVARCHAR (2048) NOT NULL,
[cMessage] NVARCHAR (250) NOT NULL,
[cIssueCount] INT NOT NULL,
[cDateTime] DATETIME2 (7) NOT NULL,
PRIMARY KEY CLUSTERED ([cCuid] ASC)
);
IF EXISTS (SELECT TOP 1 1
FROM [dbo].[tCertificate])
BEGIN
INSERT INTO [dbo].[tmp_ms_xx_tCertificate] ([cCuid], [cCsr], [cTierCode], [cUnitCode], [cVehicleCode], [cLocalCode], [cBrandCode], [cCert], [cMessage], [cIssueCount], [cDateTime])
SELECT [cCuid],
[cCsr],
[cTierCode],
[cUnitCode],
[cVehicleCode],
[cLocalCode],
[cBrandCode],
[cCert],
[cMessage],
[cIssueCount],
[cDateTime]
FROM [dbo].[tCertificate]
ORDER BY [cCuid] ASC;
END
DROP TABLE [dbo].[tCertificate];
EXECUTE sp_rename N'[dbo].[tmp_ms_xx_tCertificate]', N'tCertificate';
COMMIT TRANSACTION;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
GO
PRINT N'[dbo].[tTbscsr] 테이블 다시 빌드 시작...';
GO
BEGIN TRANSACTION;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET XACT_ABORT ON;
CREATE TABLE [dbo].[tmp_ms_xx_tTbscsr] (
[cCuid] BIGINT IDENTITY (1, 1) NOT NULL,
[cIftid] NVARCHAR (100) NOT NULL,
[cMacaddr] NVARCHAR (100) NOT NULL,
[cWmi] NVARCHAR (20) NOT NULL,
[cIdType] NVARCHAR (10) NOT NULL,
[cSupplierId] NVARCHAR (10) NOT NULL,
[cDc] NVARCHAR (20) NOT NULL,
[cTierCode] NVARCHAR (20) NOT NULL,
[cUnitCode] NVARCHAR (20) NOT NULL,
[cPublickey] NVARCHAR (1024) NOT NULL,
[cCertType] NVARCHAR (20) NOT NULL,
[cOriginTbscsr] NVARCHAR (4000) NOT NULL,
[cHashedTbscsr] NVARCHAR (1024) NOT NULL,
[cPcid] NVARCHAR (50) NOT NULL,
[cDn] NVARCHAR (250) NOT NULL,
[cDateTime] DATETIME2 (7) NOT NULL,
PRIMARY KEY CLUSTERED ([cCuid] ASC)
);
IF EXISTS (SELECT TOP 1 1
FROM [dbo].[tTbscsr])
BEGIN
SET IDENTITY_INSERT [dbo].[tmp_ms_xx_tTbscsr] ON;
INSERT INTO [dbo].[tmp_ms_xx_tTbscsr] ([cCuid], [cIftid], [cMacaddr], [cWmi], [cIdType], [cSupplierId], [cDc], [cTierCode], [cUnitCode], [cPublickey], [cCertType], [cHashedTbscsr], [cPcid], [cDateTime])
SELECT [cCuid],
[cIftid],
[cMacaddr],
[cWmi],
[cIdType],
[cSupplierId],
[cDc],
[cTierCode],
[cUnitCode],
[cPublickey],
[cCertType],
[cHashedTbscsr],
[cPcid],
[cDateTime]
FROM [dbo].[tTbscsr]
ORDER BY [cCuid] ASC;
SET IDENTITY_INSERT [dbo].[tmp_ms_xx_tTbscsr] OFF;
END
DROP TABLE [dbo].[tTbscsr];
EXECUTE sp_rename N'[dbo].[tmp_ms_xx_tTbscsr]', N'tTbscsr';
COMMIT TRANSACTION;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
GO
PRINT N'업데이트가 완료되었습니다.';
GO

View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<Operations Version="1.0" xmlns="http://schemas.microsoft.com/sqlserver/dac/Serialization/2012/02">
<Operation Name="Rename Refactor" Key="7ca1fbc9-cead-4c01-b8df-1a9a69e13266" ChangeDateTime="12/03/2024 00:57:27">
<Property Name="ElementName" Value="[dbo].[tUser].[Id]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tUser]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cGuid" />
</Operation>
<Operation Name="Rename Refactor" Key="7e3c9cab-1b27-43f3-8519-960704ce037b" ChangeDateTime="12/03/2024 00:57:30">
<Property Name="ElementName" Value="[dbo].[tUser].[username]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tUser]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cUsername" />
</Operation>
<Operation Name="Rename Refactor" Key="f0511507-0a0d-4bde-a3b2-39b5106c85f0" ChangeDateTime="12/03/2024 01:00:03">
<Property Name="ElementName" Value="[dbo].[tUser].[cGuid]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tUser]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cAuid" />
</Operation>
<Operation Name="Rename Refactor" Key="da1fde46-473c-41bb-aa02-260e3385475d" ChangeDateTime="12/03/2024 01:04:01">
<Property Name="ElementName" Value="[dbo].[tRole].[Id]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tRole]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cAuid" />
</Operation>
<Operation Name="Rename Refactor" Key="8f767203-3e50-46b7-a513-53461cf358ac" ChangeDateTime="12/03/2024 01:06:25">
<Property Name="ElementName" Value="[dbo].[tUser].[cUsername]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tUser]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cUserID" />
</Operation>
<Operation Name="Rename Refactor" Key="4b1fa7eb-a0b5-425d-8358-7a8ca6cff7ad" ChangeDateTime="12/03/2024 01:06:31">
<Property Name="ElementName" Value="[dbo].[tRole].[cRole]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tRole]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cRoleID" />
</Operation>
<Operation Name="Rename Refactor" Key="5e298150-8e73-458c-aad7-8bf15975edc0" ChangeDateTime="12/03/2024 01:08:52">
<Property Name="ElementName" Value="[dbo].[tRefreshToken].[Id]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tRefreshToken]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cAuid" />
</Operation>
<Operation Name="Rename Refactor" Key="6b49864f-05d3-40ae-9c55-b7845af2d49e" ChangeDateTime="01/20/2025 00:52:23">
<Property Name="ElementName" Value="[dbo].[tUser].[cBlock]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tUser]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cState" />
</Operation>
</Operations>

View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<Name>VPKI.AccountDB</Name>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>4.1</ProjectVersion>
<ProjectGuid>{6d9f945f-42ae-4c95-9656-a24fa23f4782}</ProjectGuid>
<DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
<OutputType>Database</OutputType>
<RootPath>
</RootPath>
<RootNamespace>VPKI.AccountDB</RootNamespace>
<AssemblyName>VPKI.AccountDB</AssemblyName>
<ModelCollation>1042,CI</ModelCollation>
<DefaultFileStructure>BySchemaAndSchemaType</DefaultFileStructure>
<DeployToDatabase>True</DeployToDatabase>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<TargetLanguage>CS</TargetLanguage>
<AppDesignerFolder>Properties</AppDesignerFolder>
<SqlServerVerification>False</SqlServerVerification>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseSet>True</TargetDatabaseSet>
<GenerateCreateScript>True</GenerateCreateScript>
<DefaultCollation>Korean_Wansung_CI_AS</DefaultCollation>
<Recovery>SIMPLE</Recovery>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
<!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
<SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
<VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
</PropertyGroup>
<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<ItemGroup>
<Folder Include="Properties" />
<Folder Include="dbo" />
<Folder Include="dbo\Tables" />
<Folder Include="dbo\StoredProcedures" />
<Folder Include="dbo\Functions" />
<Folder Include="dbo\Scripts" />
</ItemGroup>
<ItemGroup>
<Build Include="dbo\Tables\tUser.sql" />
<Build Include="dbo\Tables\tRole.sql" />
<Build Include="dbo\Tables\tRefreshToken.sql" />
</ItemGroup>
<ItemGroup>
<RefactorLog Include="VPKI.AccountDB.refactorlog" />
</ItemGroup>
<ItemGroup>
<PostDeploy Include="dbo\Scripts\scriptAfterBuild.sql" />
</ItemGroup>
<PropertyGroup>
<PostBuildEvent>xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)DBPatch\sqlScripts\
xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)DBPatch\sqlScripts\dacpac\</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,20 @@
/*
배포 후 스크립트 템플릿
--------------------------------------------------------------------------------------
이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다.
SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다.
예: :r .\myfile.sql
SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다.
예: :setvar TableName MyTable
SELECT * FROM [$(TableName)]
--------------------------------------------------------------------------------------
*/
IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'Alis')
BEGIN
INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime)
VALUES ('Alis', 'SuperUser' ,'oKLQCdunc2kT5aAVfK+POKwd8R3p8OZvs/NATwpg4gM=' ,1 ,GETDATE(), GETDATE());
INSERT INTO tRole(cAuid, cRoleID, cRoleName)
VALUES ('SuperUser','20','SuperUser');
END

View File

@ -0,0 +1,5 @@
CREATE TABLE [dbo].[tRefreshToken]
(
[cAuid] NVARCHAR(250) NOT NULL PRIMARY KEY,
[cRefreshToken] NVARCHAR(1000) NOT NULL
)

View File

@ -0,0 +1,6 @@
CREATE TABLE [dbo].[tRole]
(
[cAuid] NVARCHAR(250) NOT NULL PRIMARY KEY,
[cRoleID] TINYINT NOT NULL,
[cRoleName] NVARCHAR(20) NOT NULL
)

View File

@ -0,0 +1,10 @@
CREATE TABLE [dbo].[tUser]
(
[cUserID] NVARCHAR(50) NOT NULL,
[cAuid] NVARCHAR(250) NOT NULL ,
[cPasswordHashed] NVARCHAR(250) NOT NULL,
[cState] tinyint NOT NULL,
[cCreateDateTime] DATETIME2 NOT NULL,
[cLastLoginDateTime] DATETIME2 NULL,
PRIMARY KEY ([cUserID])
)

View File

@ -0,0 +1,35 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.9.34728.123
MinimumVisualStudioVersion = 10.0.40219.1
Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "VPKI.AccountDB", "VPKI.AccountDB\VPKI.AccountDB.sqlproj", "{6D9F945F-42AE-4C95-9656-A24FA23F4782}"
EndProject
Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "VPKI.DataDB", "VPKI.DataDB\VPKI.DataDB.sqlproj", "{85B3CD8C-6920-4E6D-A914-7D25B6924A22}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6D9F945F-42AE-4C95-9656-A24FA23F4782}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6D9F945F-42AE-4C95-9656-A24FA23F4782}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6D9F945F-42AE-4C95-9656-A24FA23F4782}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{6D9F945F-42AE-4C95-9656-A24FA23F4782}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6D9F945F-42AE-4C95-9656-A24FA23F4782}.Release|Any CPU.Build.0 = Release|Any CPU
{6D9F945F-42AE-4C95-9656-A24FA23F4782}.Release|Any CPU.Deploy.0 = Release|Any CPU
{85B3CD8C-6920-4E6D-A914-7D25B6924A22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{85B3CD8C-6920-4E6D-A914-7D25B6924A22}.Debug|Any CPU.Build.0 = Debug|Any CPU
{85B3CD8C-6920-4E6D-A914-7D25B6924A22}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{85B3CD8C-6920-4E6D-A914-7D25B6924A22}.Release|Any CPU.ActiveCfg = Release|Any CPU
{85B3CD8C-6920-4E6D-A914-7D25B6924A22}.Release|Any CPU.Build.0 = Release|Any CPU
{85B3CD8C-6920-4E6D-A914-7D25B6924A22}.Release|Any CPU.Deploy.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {783B428F-7368-4F65-98B6-DB3C2B2D0EB0}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<Operations Version="1.0" xmlns="http://schemas.microsoft.com/sqlserver/dac/Serialization/2012/02">
<Operation Name="Rename Refactor" Key="aef5aa4e-a13d-46f1-b18e-e058c617b408" ChangeDateTime="12/23/2024 01:59:13">
<Property Name="ElementName" Value="[dbo].[t_V1_Tbscsr].[cIftgid]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[t_V1_Tbscsr]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cIftid" />
</Operation>
<Operation Name="Rename Refactor" Key="648c532d-8e23-44f8-b657-11f87afbf718" ChangeDateTime="12/23/2024 02:09:55">
<Property Name="ElementName" Value="[dbo].[tTbscsrResponse].[Id]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tTbscsrResponse]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cCuid" />
</Operation>
<Operation Name="Rename Refactor" Key="9ee0544c-0be5-4023-8ef4-033987c586b8" ChangeDateTime="12/23/2024 02:10:31">
<Property Name="ElementName" Value="[dbo].[tTbscsrResponse].[status]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tTbscsrResponse]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cStatus" />
</Operation>
<Operation Name="Rename Refactor" Key="88f4fb4b-2eb9-4f7f-a439-a365764395e2" ChangeDateTime="12/23/2024 02:10:35">
<Property Name="ElementName" Value="[dbo].[tTbscsrResponse].[message]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tTbscsrResponse]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cMessage" />
</Operation>
<Operation Name="Rename Refactor" Key="5a0e9793-c50f-4b5b-8c05-283639a11124" ChangeDateTime="12/23/2024 05:58:10">
<Property Name="ElementName" Value="[dbo].[tCertificate].[Id]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tCertificate]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cId" />
</Operation>
<Operation Name="Rename Refactor" Key="3ba5afba-2388-4351-9e65-025f6cbe3c89" ChangeDateTime="12/23/2024 05:58:11">
<Property Name="ElementName" Value="[dbo].[tCertificate].[cert]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tCertificate]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cCert" />
</Operation>
<Operation Name="Rename Refactor" Key="98b90247-2504-4303-be66-2742a0bf0681" ChangeDateTime="12/23/2024 05:58:21">
<Property Name="ElementName" Value="[dbo].[tCertificate].[cId]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tCertificate]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cCuid" />
</Operation>
<Operation Name="Rename Refactor" Key="8fa6e7d1-aa81-4b5d-afbe-2bbf9823e5e3" ChangeDateTime="12/26/2024 06:42:10">
<Property Name="ElementName" Value="[dbo].[tTbscsrRequest].[cRequestDateTime]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tTbscsrRequest]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cDateTime" />
</Operation>
<Operation Name="Rename Refactor" Key="192ddc5c-7dab-4713-b486-4f0b3afb9817" ChangeDateTime="01/03/2025 06:30:17">
<Property Name="ElementName" Value="[dbo].[tVerifyResult].[Id]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tVerifyResult]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cCuid" />
</Operation>
<Operation Name="Rename Refactor" Key="c7631cfd-d064-4fce-b44f-9df70e6cc41e" ChangeDateTime="01/03/2025 06:55:20">
<Property Name="ElementName" Value="[dbo].[tCsrsignature].[Id]" />
<Property Name="ElementType" Value="SqlSimpleColumn" />
<Property Name="ParentElementName" Value="[dbo].[tCsrsignature]" />
<Property Name="ParentElementType" Value="SqlTable" />
<Property Name="NewName" Value="cCuid" />
</Operation>
</Operations>

View File

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<Name>VPKI.DataDB</Name>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>4.1</ProjectVersion>
<ProjectGuid>{85b3cd8c-6920-4e6d-a914-7d25b6924a22}</ProjectGuid>
<DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
<OutputType>Database</OutputType>
<RootPath>
</RootPath>
<RootNamespace>VPKI.DataDB</RootNamespace>
<AssemblyName>VPKI.DataDB</AssemblyName>
<ModelCollation>1042,CI</ModelCollation>
<DefaultFileStructure>BySchemaAndSchemaType</DefaultFileStructure>
<DeployToDatabase>True</DeployToDatabase>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<TargetLanguage>CS</TargetLanguage>
<AppDesignerFolder>Properties</AppDesignerFolder>
<SqlServerVerification>False</SqlServerVerification>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseSet>True</TargetDatabaseSet>
<GenerateCreateScript>True</GenerateCreateScript>
<DefaultCollation>Korean_Wansung_CI_AS</DefaultCollation>
<Recovery>SIMPLE</Recovery>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
<!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
<SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
<VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
</PropertyGroup>
<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<ItemGroup>
<Folder Include="Properties" />
<Folder Include="dbo" />
<Folder Include="dbo\Functions" />
<Folder Include="dbo\StoredProcedures" />
<Folder Include="dbo\Tables" />
</ItemGroup>
<ItemGroup>
<Build Include="dbo\Tables\tTbscsr.sql" />
<Build Include="dbo\Tables\tCertificate.sql" />
<Build Include="dbo\Tables\tVerifyResult.sql" />
<Build Include="dbo\Tables\tOcsp.sql" />
</ItemGroup>
<ItemGroup>
<RefactorLog Include="VPKI.DataDB.refactorlog" />
</ItemGroup>
<PropertyGroup>
<PostBuildEvent>xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)DBPatch\sqlScripts\
xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)DBPatch\sqlScripts\dacpac\</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,15 @@
CREATE TABLE [dbo].[tCertificate]
(
[cCuid] BIGINT NOT NULL PRIMARY KEY,
[cCsrsignature] NVARCHAR(1024) NOT NULL,
[cTierCode]NVARCHAR(20) NOT NULL,
[cUnitCode]NVARCHAR(20) NOT NULL,
[cVehicleCode]NVARCHAR(20) NOT NULL,
[cLocalCode]NVARCHAR(20) NOT NULL,
[cBrandCode]NVARCHAR(20) NOT NULL,
[cCsr] NVARCHAR(2048) NOT NULL,
[cCert] NVARCHAR(2048) NOT NULL,
[cMessage] NVARCHAR(250) NOT NULL,
[cIssueCount] INT NOT NULL,
[cDateTime] DATETIME2 NOT NULL
)

View File

@ -0,0 +1,8 @@
CREATE TABLE [dbo].[tOcsp]
(
[cCuid] BIGINT NOT NULL PRIMARY KEY,
[cStatus] NVARCHAR(20) NOT NULL,
[cVerify] NVARCHAR(20) NOT NULL,
[cOcsp] NVARCHAR(MAX) NULL,
[cDateTime] DATETIME2 NOT NULL
)

View File

@ -0,0 +1,19 @@
CREATE TABLE [dbo].[tTbscsr]
(
[cCuid] BIGINT NOT NULL PRIMARY KEY IDENTITY(1,1),
[cIftid] NVARCHAR(100) NOT NULL,
[cMacaddr] NVARCHAR(100) NOT NULL,
[cWmi] NVARCHAR(20) NOT NULL,
[cIdType] NVARCHAR(10)NOT NULL,
[cSupplierId] NVARCHAR(10) NOT NULL,
[cDc] NVARCHAR(20) NOT NULL,
[cTierCode]NVARCHAR(20) NOT NULL,
[cUnitCode]NVARCHAR(20) NOT NULL,
[cPublickey]NVARCHAR(1024) NOT NULL,
[cCertType]NVARCHAR(20) NOT NULL,
[cOriginTbscsr] NVARCHAR(4000) NOT NULL,
[cHashedTbscsr] NVARCHAR(1024) NOT NULL,
[cPcid] NVARCHAR(50) NOT NULL,
[cDn]NVARCHAR(250) NOT NULL,
[cDateTime] DATETIME2 NOT NULL
)

View File

@ -0,0 +1,5 @@
CREATE TABLE [dbo].[tVerifyResult]
(
[cCuid] BIGINT NOT NULL PRIMARY KEY,
[cResult] NCHAR(20) NOT NULL
)

View File

@ -0,0 +1,30 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
!**/.gitignore
!.git/HEAD
!.git/config
!.git/packed-refs
!.git/refs/heads/**

View File

@ -0,0 +1,80 @@
{
"Server": {
"Address": "https://*",
"Port": 8080,
"IIS": false
},
"API": [
{
"ApiName": "vpkira",
"Address": "https://vpkira.hmckmc.co.kr/"
//"Address": "https://vpkira-dev.hmckmc.co.kr/"
},
//{
// "ApiName": "ocsp",
// "Address": "http://ocsp.hmckmc.co.kr/"
// //"Address": "http://d-ocsp.hmckmc.co.kr/"
//},
//{
// "ApiName": "d-crl",
// "Address": "http://crl.hmckmc.co.kr/"
// //"Address": "http://d-crl.hmckmc.co.kr/"
//}
],
"Auth": {
"issuer": "vpki.api",
"audience": "vpki",
"accessTokenSecret": "t6zdogyrT0U1bYw3gJvMm3JHmj2Iyawr7O2WKE2truX+MK0l/XNGmpU2ofagdUWBN4DxAUv7c8xSYVv/8abL6A==",
"accessTokenExpires": 60, //minutes
"refreshTokenSecret": "1vVuoGqIqkStFI3QUXHMr0/yO1feLPnhqcfFGjZyk478+4WY7dhrUjCfVeWjmmSZYgb+rtP0X6ec+3iL35Yezw==",
"refreshTokenExpires": 1440 //minuts, 60*24 (1day)
},
"DataBase": [
{
"IP": "127.0.0.1",
"Port": 1433,
"DBName": "VPKI_AccountDB",
"DBID": 1,
"DBContext": "VpkiAccountDbContext",
"UserID": "VPKI",
"Password": "Kefico!@34"
},
{
"IP": "127.0.0.1",
"Port": 1433,
"DBName": "VPKI_AccountDB_DEV",
"DBID": 2,
"DBContext": "VpkiAccountDbContext",
"UserID": "VPKI",
"Password": "Kefico!@34"
},
{
"IP": "127.0.0.1",
"Port": 1433,
"DBName": "VPKI_DataDB",
"DBID": 1,
"DBContext": "VpkiDataDbContext",
"UserID": "VPKI",
"Password": "Kefico!@34"
},
{
"IP": "127.0.0.1",
"Port": 1433,
"DBName": "VPKI_DataDB_DEV",
"DBID": 2,
"DBContext": "VpkiDataDbContext",
"UserID": "VPKI",
"Password": "Kefico!@34"
}
],
"Openssl": {
"Path": "C:/Program Files/OpenSSL-Win64/bin/openssl.exe",
"SubCAPath": "../SubCA/",
"SubCA": {
"prov_v1": "SubCA_P02OEM.pem",
"prov_cert": "SubCA_P20OEM.pem",
"vehicle_cert": "SubCA_P20VHC.pem"
},
"RootCA": "hkmcrootca.pem"
}
}

View File

@ -0,0 +1,14 @@
{
"Server": {
"Address": "https://*",
"Port": 8000,
"IIS": false
},
"Api": [
{
"ApiName": "VPKI.API",
"Address": "https://127.0.0.1",
"Port": 8080
}
]
}

View File

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<root>
<level value="ALL"/>
<appender-ref ref="Console"/>
<appender-ref ref="file"/>
<appender-ref ref="fatal_file"/>
</root>
<appender name="Console" type="log4net.Appender.ManagedColoredConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date] [%thread] %-6level: %message%newline" />
</layout>
<mapping>
<level value="FATAL" />
<foreColor value="White" />
<backColor value="Red" />
</mapping>
<mapping>
<level value="ERROR" />
<foreColor value="Red" />
</mapping>
<mapping>
<level value="WARN" />
<foreColor value="Yellow" />
</mapping>
<mapping>
<level value="INFO" />
<foreColor value="Green" />
</mapping>
<mapping>
<level value="DEBUG" />
<foreColor value="Blue" />
</mapping>
<mapping>
<level value="DB" />
<foreColor value="DarkMagenta" />
</mapping>
<mapping>
<level value="HTTP" />
<foreColor value="DarkYellow" />
</mapping>
<mapping>
<level value="SOCKET" />
<foreColor value="DarkCyan" />
</mapping>
<mapping>
<level value="CONTROLLER" />
<foreColor value="DarkGreen" />
</mapping>
</appender>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="log/" />
<datepattern value="yyyy////MM////yyyy-MM-dd'.log'"/>
<appendToFile value="true" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date] [%thread] %level %logger - %message%newline" />
</layout>
</appender>
<appender name="fatal_file" type="log4net.Appender.RollingFileAppender">
<file value="log/" />
<datepattern value="yyyy////MM////yyyy-MM-dd'_fatal.log'"/>
<appendToFile value="true" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="FATAL" />
<param name="LevelMax" value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date] [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>

View File

@ -0,0 +1,16 @@
events {
worker_connections 1000;
}
http {
upstream vpki.web.api {
server vpki.web.api:5555;
}
server {
listen 80;
location / {
proxy_pass https://vpki.web.api/;
}
}
}

View 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-----

View 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-----

View 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-----

View File

@ -0,0 +1,12 @@
-----BEGIN CERTIFICATE-----
MIIBwTCCAWigAwIBAgIUCeUMZnQywRQfK13l7kWUsltWGOAwCgYIKoZIzj0EAwIw
PjELMAkGA1UEBhMCS1IxDTALBgNVBAoMBEhLTUMxDDAKBgNVBAsMA0VDQzESMBAG
A1UEAwwJUm9vdENBMDAxMCAXDTE5MDUwOTAwNDEwMFoYDzIxMDkwNTA5MjM1OTU5
WjA+MQswCQYDVQQGEwJLUjENMAsGA1UECgwESEtNQzEMMAoGA1UECwwDRUNDMRIw
EAYDVQQDDAlSb290Q0EwMDEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR/ROoS
YMi4T9nJ+KGujVjnWWxHMy2+8TZ69QcfFqO5Rg0ipl7t9N1BQWj1BqfsYEjzCpQZ
9jppik7NeknLgZ9Io0IwQDAdBgNVHQ4EFgQUtb1h+pq4EbbZHRwPLC3Tw6oUP30w
DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDRwAw
RAIgPQ/HKZJI3cuz38yNJTrmlOz5vwB5QfAOU8lwk+7pmCoCIFMk1HQSpARINQH/
Pm27xACoQY4OTElHcJ1EKOTOnIDp
-----END CERTIFICATE-----

View File

@ -0,0 +1,83 @@
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace DB.VPKI_AccountDB;
public partial class VpkiAccountDbContext : DbContext
{
public VpkiAccountDbContext()
{
}
public VpkiAccountDbContext(DbContextOptions<VpkiAccountDbContext> options)
: base(options)
{
}
public virtual DbSet<TRefreshToken> TRefreshTokens { get; set; }
public virtual DbSet<TRole> TRoles { get; set; }
public virtual DbSet<TUser> TUsers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263.
=> optionsBuilder.UseSqlServer("server=127.0.0.1; user id=VPKI; password=Kefico!@34; database=VPKI_AccountDB; TrustServerCertificate=true;");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<TRefreshToken>(entity =>
{
entity.HasKey(e => e.CAuid).HasName("PK__tRefresh__FBF0855408955D04");
entity.ToTable("tRefreshToken");
entity.Property(e => e.CAuid)
.HasMaxLength(250)
.HasColumnName("cAuid");
entity.Property(e => e.CRefreshToken)
.HasMaxLength(1000)
.HasColumnName("cRefreshToken");
});
modelBuilder.Entity<TRole>(entity =>
{
entity.HasKey(e => e.CAuid).HasName("PK__tRole__FBF0855456FE2E20");
entity.ToTable("tRole");
entity.Property(e => e.CAuid)
.HasMaxLength(250)
.HasColumnName("cAuid");
entity.Property(e => e.CRoleId).HasColumnName("cRoleID");
entity.Property(e => e.CRoleName)
.HasMaxLength(20)
.HasColumnName("cRoleName");
});
modelBuilder.Entity<TUser>(entity =>
{
entity.HasKey(e => e.CUserId).HasName("PK__tUser__A75DC19A1C6A7C5E");
entity.ToTable("tUser");
entity.Property(e => e.CUserId)
.HasMaxLength(50)
.HasColumnName("cUserID");
entity.Property(e => e.CAuid)
.HasMaxLength(250)
.HasColumnName("cAuid");
entity.Property(e => e.CCreateDateTime).HasColumnName("cCreateDateTime");
entity.Property(e => e.CLastLoginDateTime).HasColumnName("cLastLoginDateTime");
entity.Property(e => e.CPasswordHashed)
.HasMaxLength(250)
.HasColumnName("cPasswordHashed");
entity.Property(e => e.CState).HasColumnName("cState");
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
namespace DB.VPKI_AccountDB;
public partial class TRefreshToken
{
public string CAuid { get; set; } = null!;
public string CRefreshToken { get; set; } = null!;
}

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
namespace DB.VPKI_AccountDB;
public partial class TRole
{
public string CAuid { get; set; } = null!;
public byte CRoleId { get; set; }
public string CRoleName { get; set; } = null!;
}

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
namespace DB.VPKI_AccountDB;
public partial class TUser
{
public string CUserId { get; set; } = null!;
public string CAuid { get; set; } = null!;
public string CPasswordHashed { get; set; } = null!;
public byte CState { get; set; }
public DateTime CCreateDateTime { get; set; }
public DateTime? CLastLoginDateTime { get; set; }
}

View File

@ -0,0 +1,162 @@
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace DB.VPKI_DataDB;
public partial class VpkiDataDbContext : DbContext
{
public VpkiDataDbContext()
{
}
public VpkiDataDbContext(DbContextOptions<VpkiDataDbContext> options)
: base(options)
{
}
public virtual DbSet<TCertificate> TCertificates { get; set; }
public virtual DbSet<TOcsp> TOcsps { get; set; }
public virtual DbSet<TTbscsr> TTbscsrs { get; set; }
public virtual DbSet<TVerifyResult> TVerifyResults { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263.
=> optionsBuilder.UseSqlServer("server=127.0.0.1; user id=VPKI; password=Kefico!@34; database=VPKI_DataDB; TrustServerCertificate=true;");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<TCertificate>(entity =>
{
entity.HasKey(e => e.CCuid).HasName("PK__tCertifi__2AA00D94B11718A8");
entity.ToTable("tCertificate");
entity.Property(e => e.CCuid)
.ValueGeneratedNever()
.HasColumnName("cCuid");
entity.Property(e => e.CBrandCode)
.HasMaxLength(20)
.HasColumnName("cBrandCode");
entity.Property(e => e.CCert)
.HasMaxLength(2048)
.HasColumnName("cCert");
entity.Property(e => e.CCsr)
.HasMaxLength(2048)
.HasColumnName("cCsr");
entity.Property(e => e.CCsrsignature)
.HasMaxLength(1024)
.HasColumnName("cCsrsignature");
entity.Property(e => e.CDateTime).HasColumnName("cDateTime");
entity.Property(e => e.CIssueCount).HasColumnName("cIssueCount");
entity.Property(e => e.CLocalCode)
.HasMaxLength(20)
.HasColumnName("cLocalCode");
entity.Property(e => e.CMessage)
.HasMaxLength(250)
.HasColumnName("cMessage");
entity.Property(e => e.CTierCode)
.HasMaxLength(20)
.HasColumnName("cTierCode");
entity.Property(e => e.CUnitCode)
.HasMaxLength(20)
.HasColumnName("cUnitCode");
entity.Property(e => e.CVehicleCode)
.HasMaxLength(20)
.HasColumnName("cVehicleCode");
});
modelBuilder.Entity<TOcsp>(entity =>
{
entity.HasKey(e => e.CCuid).HasName("PK__tOcsp__2AA00D941E2BA200");
entity.ToTable("tOcsp");
entity.Property(e => e.CCuid)
.ValueGeneratedNever()
.HasColumnName("cCuid");
entity.Property(e => e.CDateTime).HasColumnName("cDateTime");
entity.Property(e => e.COcsp).HasColumnName("cOcsp");
entity.Property(e => e.CStatus)
.HasMaxLength(20)
.HasColumnName("cStatus");
entity.Property(e => e.CVerify)
.HasMaxLength(20)
.HasColumnName("cVerify");
});
modelBuilder.Entity<TTbscsr>(entity =>
{
entity.HasKey(e => e.CCuid).HasName("PK__tTbscsr__2AA00D94155F4FC3");
entity.ToTable("tTbscsr");
entity.Property(e => e.CCuid).HasColumnName("cCuid");
entity.Property(e => e.CCertType)
.HasMaxLength(20)
.HasColumnName("cCertType");
entity.Property(e => e.CDateTime).HasColumnName("cDateTime");
entity.Property(e => e.CDc)
.HasMaxLength(20)
.HasColumnName("cDc");
entity.Property(e => e.CDn)
.HasMaxLength(250)
.HasColumnName("cDn");
entity.Property(e => e.CHashedTbscsr)
.HasMaxLength(1024)
.HasColumnName("cHashedTbscsr");
entity.Property(e => e.CIdType)
.HasMaxLength(10)
.HasColumnName("cIdType");
entity.Property(e => e.CIftid)
.HasMaxLength(100)
.HasColumnName("cIftid");
entity.Property(e => e.CMacaddr)
.HasMaxLength(100)
.HasColumnName("cMacaddr");
entity.Property(e => e.COriginTbscsr)
.HasMaxLength(4000)
.HasColumnName("cOriginTbscsr");
entity.Property(e => e.CPcid)
.HasMaxLength(50)
.HasColumnName("cPcid");
entity.Property(e => e.CPublickey)
.HasMaxLength(1024)
.HasColumnName("cPublickey");
entity.Property(e => e.CSupplierId)
.HasMaxLength(10)
.HasColumnName("cSupplierId");
entity.Property(e => e.CTierCode)
.HasMaxLength(20)
.HasColumnName("cTierCode");
entity.Property(e => e.CUnitCode)
.HasMaxLength(20)
.HasColumnName("cUnitCode");
entity.Property(e => e.CWmi)
.HasMaxLength(20)
.HasColumnName("cWmi");
});
modelBuilder.Entity<TVerifyResult>(entity =>
{
entity.HasKey(e => e.CCuid).HasName("PK__tVerifyR__2AA00D94A7EE4DE6");
entity.ToTable("tVerifyResult");
entity.Property(e => e.CCuid)
.ValueGeneratedNever()
.HasColumnName("cCuid");
entity.Property(e => e.CResult)
.HasMaxLength(20)
.IsFixedLength()
.HasColumnName("cResult");
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}

View File

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
namespace DB.VPKI_DataDB;
public partial class TCertificate
{
public long CCuid { get; set; }
public string CCsrsignature { get; set; } = null!;
public string CTierCode { get; set; } = null!;
public string CUnitCode { get; set; } = null!;
public string CVehicleCode { get; set; } = null!;
public string CLocalCode { get; set; } = null!;
public string CBrandCode { get; set; } = null!;
public string CCsr { get; set; } = null!;
public string CCert { get; set; } = null!;
public string CMessage { get; set; } = null!;
public int CIssueCount { get; set; }
public DateTime CDateTime { get; set; }
}

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
namespace DB.VPKI_DataDB;
public partial class TOcsp
{
public long CCuid { get; set; }
public string CStatus { get; set; } = null!;
public string CVerify { get; set; } = null!;
public string? COcsp { get; set; }
public DateTime CDateTime { get; set; }
}

View File

@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
namespace DB.VPKI_DataDB;
public partial class TTbscsr
{
public long CCuid { get; set; }
public string CIftid { get; set; } = null!;
public string CMacaddr { get; set; } = null!;
public string CWmi { get; set; } = null!;
public string CIdType { get; set; } = null!;
public string CSupplierId { get; set; } = null!;
public string CDc { get; set; } = null!;
public string CTierCode { get; set; } = null!;
public string CUnitCode { get; set; } = null!;
public string CPublickey { get; set; } = null!;
public string CCertType { get; set; } = null!;
public string COriginTbscsr { get; set; } = null!;
public string CHashedTbscsr { get; set; } = null!;
public string CPcid { get; set; } = null!;
public string CDn { get; set; } = null!;
public DateTime CDateTime { get; set; }
}

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
namespace DB.VPKI_DataDB;
public partial class TVerifyResult
{
public long CCuid { get; set; }
public string CResult { get; set; } = null!;
}

View File

@ -0,0 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
<NoWarn>1701;1702;1030</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
<NoWarn>1701;1702;1030</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.11">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.11">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace VPKI.Library.Config.Model
{
public class Api
{
[JsonPropertyName("ApiName")]
public string? ApiName { get; set; }
[JsonPropertyName("Address")]
public string? Address { get; set; }
[JsonPropertyName("Port")]
public int Port { get; set; }
}
}

View File

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace VPKI.Library.Config.Model
{
public class Auth
{
//jwt common
[JsonPropertyName("issuer")]
public string? issuer { get; set; }
[JsonPropertyName("audience")]
public string? audience { get; set; }
//access token
[JsonPropertyName("accessTokenSecret")]
public string? accessTokenSecret { get; set; }
[JsonPropertyName("accessTokenExpires")]
public uint? accessTokenExpires { get; set; }
//refresh token
[JsonPropertyName("refreshTokenSecret")]
public string? refreshTokenSecret { get; set; }
[JsonPropertyName("refreshTokenExpires")]
public uint? refreshTokenExpires { get; set; }
}
}

View File

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace VPKI.Library.Config.Model
{
public class DataBase
{
[JsonPropertyName("IP")]
public string? IP { get; set; }
[JsonPropertyName("Port")]
public int Port { get; set; }
[JsonPropertyName("DBName")]
public string? DBName { get; set; }
[JsonPropertyName("DBID")]
public int DBID { get; set; }
[JsonPropertyName("DBContext")]
public string? DBContext { get; set; }
[JsonPropertyName("UserID")]
public string? UserID { get; set; }
[JsonPropertyName("Password")]
public string? Password { get; set; }
}
}

View File

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace VPKI.Library.Config.Model
{
public class Openssl
{
[JsonPropertyName("Path")]
public string? Path { get; set; }
[JsonPropertyName("SubCAPath")]
public string? SubCAPath { get; set; }
[JsonPropertyName("SubCA")]
public SubCA? SubCA { get; set; }
[JsonPropertyName("RootCA")]
public string? RootCA { get; set; }
}
public class SubCA
{
[JsonPropertyName("prov_v1")]
public string? prov_v1 { get; set; }
[JsonPropertyName("prov_cert")]
public string? prov_cert { get; set; }
[JsonPropertyName("vehicle_cert")]
public string? vehicle_cert { get; set; }
}
}

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace VPKI.Library.Config.Model
{
public class Server
{
[JsonPropertyName("Address")]
public string? Address { get; set; }
[JsonPropertyName("Port")]
public int Port { get; set; }
[JsonPropertyName("IIS")]
public bool IIS { get; set; }
}
}

View File

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using VPKI.Library.Config.Model;
namespace VPKI.Library.Config
{
public class WebApiConfig : WebCommonConfig
{
[JsonPropertyName("Api")]
public List<Api>? Api { get; set; }
[JsonPropertyName("Auth")]
public Auth? Auth { get; set; }
[JsonPropertyName("DataBase")]
public List<DataBase>? DataBase { get; set; }
[JsonPropertyName("Openssl")]
public Openssl? Openssl { get; set; }
}
}

Some files were not shown because too many files have changed in this diff Show More