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