[성현모] VPKI 반복 테스트 코드 수정
This commit is contained in:
Binary file not shown.
@ -15,7 +15,7 @@ namespace SystemX.Core.Communication
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="url">https://127.0.0.1:443</param>
|
/// <param name="url">https://127.0.0.1:443</param>
|
||||||
/// <param name="timeOutSeconds">Range 5~30 secconds</param>
|
/// <param name="timeOutSeconds">Range 5~30 secconds</param>
|
||||||
public virtual async Task<RESPONSE?> PostJsonAsync<REQUEST, RESPONSE>(string url, REQUEST request, string bearerToken = "", short timeOutSeconds = 5) where REQUEST : class where RESPONSE : class
|
public virtual async Task<RESPONSE?> PostJsonAsync<REQUEST, RESPONSE>(string url, REQUEST request, string bearerToken = "", short timeOutSeconds = 10) where REQUEST : class where RESPONSE : class
|
||||||
{
|
{
|
||||||
RESPONSE? response = default(RESPONSE);
|
RESPONSE? response = default(RESPONSE);
|
||||||
Guid guid = Guid.NewGuid();
|
Guid guid = Guid.NewGuid();
|
||||||
|
|||||||
@ -242,6 +242,21 @@ IF fulltextserviceproperty(N'IsFulltextInstalled') = 1
|
|||||||
EXECUTE sp_fulltext_database 'enable';
|
EXECUTE sp_fulltext_database 'enable';
|
||||||
|
|
||||||
|
|
||||||
|
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
|
GO
|
||||||
PRINT N'테이블 [dbo].[tVerifyResult]을(를) 만드는 중...';
|
PRINT N'테이블 [dbo].[tVerifyResult]을(를) 만드는 중...';
|
||||||
|
|
||||||
@ -255,15 +270,22 @@ CREATE TABLE [dbo].[tVerifyResult] (
|
|||||||
|
|
||||||
|
|
||||||
GO
|
GO
|
||||||
PRINT N'테이블 [dbo].[tOcsp]을(를) 만드는 중...';
|
PRINT N'테이블 [dbo].[tCertificate]을(를) 만드는 중...';
|
||||||
|
|
||||||
|
|
||||||
GO
|
GO
|
||||||
CREATE TABLE [dbo].[tOcsp] (
|
CREATE TABLE [dbo].[tCertificate] (
|
||||||
[cCuid] BIGINT NOT NULL,
|
[cCuid] BIGINT NOT NULL,
|
||||||
[cStatus] NVARCHAR (20) NOT NULL,
|
[cCsrsignature] NVARCHAR (1024) NOT NULL,
|
||||||
[cVerify] NVARCHAR (20) NOT NULL,
|
[cTierCode] NVARCHAR (20) NOT NULL,
|
||||||
[cOcsp] NVARCHAR (MAX) 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,
|
[cDateTime] DATETIME2 (7) NOT NULL,
|
||||||
PRIMARY KEY CLUSTERED ([cCuid] ASC)
|
PRIMARY KEY CLUSTERED ([cCuid] ASC)
|
||||||
);
|
);
|
||||||
@ -290,28 +312,7 @@ CREATE TABLE [dbo].[tTbscsr] (
|
|||||||
[cHashedTbscsr] NVARCHAR (1024) NOT NULL,
|
[cHashedTbscsr] NVARCHAR (1024) NOT NULL,
|
||||||
[cPcid] NVARCHAR (50) NOT NULL,
|
[cPcid] NVARCHAR (50) NOT NULL,
|
||||||
[cDn] NVARCHAR (250) NOT NULL,
|
[cDn] NVARCHAR (250) NOT NULL,
|
||||||
[cDateTime] DATETIME2 (7) NOT NULL,
|
[cHasCertificate] TINYINT 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,
|
[cDateTime] DATETIME2 (7) NOT NULL,
|
||||||
PRIMARY KEY CLUSTERED ([cCuid] ASC)
|
PRIMARY KEY CLUSTERED ([cCuid] ASC)
|
||||||
);
|
);
|
||||||
|
|||||||
Binary file not shown.
@ -15,5 +15,6 @@
|
|||||||
[cHashedTbscsr] NVARCHAR(1024) NOT NULL,
|
[cHashedTbscsr] NVARCHAR(1024) NOT NULL,
|
||||||
[cPcid] NVARCHAR(50) NOT NULL,
|
[cPcid] NVARCHAR(50) NOT NULL,
|
||||||
[cDn]NVARCHAR(250) NOT NULL,
|
[cDn]NVARCHAR(250) NOT NULL,
|
||||||
|
[cHasCertificate] TINYINT NOT NULL,
|
||||||
[cDateTime] DATETIME2 NOT NULL
|
[cDateTime] DATETIME2 NOT NULL
|
||||||
)
|
)
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
"issuer": "vpki.api",
|
"issuer": "vpki.api",
|
||||||
"audience": "vpki",
|
"audience": "vpki",
|
||||||
"accessTokenSecret": "t6zdogyrT0U1bYw3gJvMm3JHmj2Iyawr7O2WKE2truX+MK0l/XNGmpU2ofagdUWBN4DxAUv7c8xSYVv/8abL6A==",
|
"accessTokenSecret": "t6zdogyrT0U1bYw3gJvMm3JHmj2Iyawr7O2WKE2truX+MK0l/XNGmpU2ofagdUWBN4DxAUv7c8xSYVv/8abL6A==",
|
||||||
"accessTokenExpires": 60, //minutes
|
"accessTokenExpires": 1440, //minutes
|
||||||
"refreshTokenSecret": "1vVuoGqIqkStFI3QUXHMr0/yO1feLPnhqcfFGjZyk478+4WY7dhrUjCfVeWjmmSZYgb+rtP0X6ec+3iL35Yezw==",
|
"refreshTokenSecret": "1vVuoGqIqkStFI3QUXHMr0/yO1feLPnhqcfFGjZyk478+4WY7dhrUjCfVeWjmmSZYgb+rtP0X6ec+3iL35Yezw==",
|
||||||
"refreshTokenExpires": 1440 //minuts, 60*24 (1day)
|
"refreshTokenExpires": 1440 //minuts, 60*24 (1day)
|
||||||
},
|
},
|
||||||
|
|||||||
@ -31,7 +31,7 @@ public partial class VpkiDataDbContext : DbContext
|
|||||||
{
|
{
|
||||||
modelBuilder.Entity<TCertificate>(entity =>
|
modelBuilder.Entity<TCertificate>(entity =>
|
||||||
{
|
{
|
||||||
entity.HasKey(e => e.CCuid).HasName("PK__tCertifi__2AA00D94B11718A8");
|
entity.HasKey(e => e.CCuid).HasName("PK__tCertifi__2AA00D94094D05AF");
|
||||||
|
|
||||||
entity.ToTable("tCertificate");
|
entity.ToTable("tCertificate");
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ public partial class VpkiDataDbContext : DbContext
|
|||||||
|
|
||||||
modelBuilder.Entity<TOcsp>(entity =>
|
modelBuilder.Entity<TOcsp>(entity =>
|
||||||
{
|
{
|
||||||
entity.HasKey(e => e.CCuid).HasName("PK__tOcsp__2AA00D941E2BA200");
|
entity.HasKey(e => e.CCuid).HasName("PK__tOcsp__2AA00D942266A4EC");
|
||||||
|
|
||||||
entity.ToTable("tOcsp");
|
entity.ToTable("tOcsp");
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ public partial class VpkiDataDbContext : DbContext
|
|||||||
|
|
||||||
modelBuilder.Entity<TTbscsr>(entity =>
|
modelBuilder.Entity<TTbscsr>(entity =>
|
||||||
{
|
{
|
||||||
entity.HasKey(e => e.CCuid).HasName("PK__tTbscsr__2AA00D94155F4FC3");
|
entity.HasKey(e => e.CCuid).HasName("PK__tTbscsr__2AA00D94D6B62535");
|
||||||
|
|
||||||
entity.ToTable("tTbscsr");
|
entity.ToTable("tTbscsr");
|
||||||
|
|
||||||
@ -105,6 +105,7 @@ public partial class VpkiDataDbContext : DbContext
|
|||||||
entity.Property(e => e.CDn)
|
entity.Property(e => e.CDn)
|
||||||
.HasMaxLength(250)
|
.HasMaxLength(250)
|
||||||
.HasColumnName("cDn");
|
.HasColumnName("cDn");
|
||||||
|
entity.Property(e => e.CHasCertificate).HasColumnName("cHasCertificate");
|
||||||
entity.Property(e => e.CHashedTbscsr)
|
entity.Property(e => e.CHashedTbscsr)
|
||||||
.HasMaxLength(1024)
|
.HasMaxLength(1024)
|
||||||
.HasColumnName("cHashedTbscsr");
|
.HasColumnName("cHashedTbscsr");
|
||||||
@ -142,7 +143,7 @@ public partial class VpkiDataDbContext : DbContext
|
|||||||
|
|
||||||
modelBuilder.Entity<TVerifyResult>(entity =>
|
modelBuilder.Entity<TVerifyResult>(entity =>
|
||||||
{
|
{
|
||||||
entity.HasKey(e => e.CCuid).HasName("PK__tVerifyR__2AA00D94A7EE4DE6");
|
entity.HasKey(e => e.CCuid).HasName("PK__tVerifyR__2AA00D94F7E2869E");
|
||||||
|
|
||||||
entity.ToTable("tVerifyResult");
|
entity.ToTable("tVerifyResult");
|
||||||
|
|
||||||
|
|||||||
@ -35,5 +35,7 @@ public partial class TTbscsr
|
|||||||
|
|
||||||
public string CDn { get; set; } = null!;
|
public string CDn { get; set; } = null!;
|
||||||
|
|
||||||
|
public byte CHasCertificate { get; set; }
|
||||||
|
|
||||||
public DateTime CDateTime { get; set; }
|
public DateTime CDateTime { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -558,13 +558,14 @@ namespace VPKI.Library.Services
|
|||||||
return derDecStr;
|
return derDecStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CsrHashedModel SignHashed02(string? csr, AsymmetricCipherKeyPair? keyPair)
|
public async Task<CsrHashedModel> SignHashed02(string? csr, AsymmetricCipherKeyPair? keyPair)
|
||||||
{
|
{
|
||||||
CsrHashedModel hashedCsr = new CsrHashedModel();
|
CsrHashedModel hashedCsr = new CsrHashedModel();
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(csr))
|
if (string.IsNullOrWhiteSpace(csr))
|
||||||
return hashedCsr;
|
return hashedCsr;
|
||||||
|
|
||||||
|
await Task.Run(async () => {
|
||||||
List<byte> vnRHashVal = Convert.FromBase64String(csr).ToList();
|
List<byte> vnRHashVal = Convert.FromBase64String(csr).ToList();
|
||||||
List<byte> vnSignedHash = GetBouncyCastleECDSASignedHashKey(vnRHashVal, GetPrivateKeyBC(keyPair), ECDSAType.SHA256WITHECDSA);
|
List<byte> vnSignedHash = GetBouncyCastleECDSASignedHashKey(vnRHashVal, GetPrivateKeyBC(keyPair), ECDSAType.SHA256WITHECDSA);
|
||||||
List<byte> vnDEREncVal = EncodeDERSignature_02(vnSignedHash);
|
List<byte> vnDEREncVal = EncodeDERSignature_02(vnSignedHash);
|
||||||
@ -574,27 +575,44 @@ namespace VPKI.Library.Services
|
|||||||
hashedCsr.EncodedSignedCsr = GetKeyBase64Encrypted(vnDEREncVal);
|
hashedCsr.EncodedSignedCsr = GetKeyBase64Encrypted(vnDEREncVal);
|
||||||
hashedCsr.Verify = bVerfRst;
|
hashedCsr.Verify = bVerfRst;
|
||||||
|
|
||||||
|
Log4net.WriteLine($"SignHashed02 csr::{csr}", LogType.Fatal);
|
||||||
|
Log4net.WriteLine($"SignHashed02 Public Key::{GetKeyBase64Encrypted(GetPublicKeyBC(keyPair)!.Q.GetEncoded()!.ToList())}", LogType.Fatal);
|
||||||
|
Log4net.WriteLine($"SignHashed02 SignedCsr::{hashedCsr.SignedCsr}", LogType.Fatal);
|
||||||
|
Log4net.WriteLine($"SignHashed02 EncodedSignedCsr::{hashedCsr.EncodedSignedCsr}", LogType.Fatal);
|
||||||
|
|
||||||
var decoded = DecodeDERSignature_02(vnDEREncVal);
|
var decoded = DecodeDERSignature_02(vnDEREncVal);
|
||||||
|
|
||||||
|
await Task.CompletedTask;
|
||||||
|
});
|
||||||
|
|
||||||
return hashedCsr;
|
return hashedCsr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CsrHashedModel SignHashed20(string? csr, AsymmetricCipherKeyPair? keyPair)
|
public async Task<CsrHashedModel> SignHashed20(string? csr, AsymmetricCipherKeyPair? keyPair)
|
||||||
{
|
{
|
||||||
CsrHashedModel hashedCsr = new CsrHashedModel();
|
CsrHashedModel hashedCsr = new CsrHashedModel();
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(csr))
|
if (string.IsNullOrWhiteSpace(csr))
|
||||||
return hashedCsr;
|
return hashedCsr;
|
||||||
|
|
||||||
|
await Task.Run(async () =>
|
||||||
|
{
|
||||||
List<byte> vnRHashVal = Convert.FromBase64String(csr).ToList();
|
List<byte> vnRHashVal = Convert.FromBase64String(csr).ToList();
|
||||||
List<byte> vnSignedHash = GetBouncyCastleECDSASignedHashKey(vnRHashVal, GetPrivateKeyBC(keyPair), ECDSAType.NONEWITHECDSA);
|
List<byte> vnSignedHash = GetBouncyCastleECDSASignedHashKey(vnRHashVal, GetPrivateKeyBC(keyPair), ECDSAType.NONEWITHECDSA);
|
||||||
List<byte> vnDEREncVal = EncodeDERSignature_20(vnSignedHash);
|
List<byte> vnDEREncVal = EncodeDERSignature_20(vnSignedHash);
|
||||||
bool bVerfRst = VerifyHashBC(vnSignedHash, vnRHashVal, GetPublicKeyBC(keyPair), ECDSAType.NONEWITHECDSA);
|
bool bVerfRst = VerifyHashBC(vnSignedHash, vnRHashVal, GetPublicKeyBC(keyPair), ECDSAType.NONEWITHECDSA);
|
||||||
|
|
||||||
|
Log4net.WriteLine($"SignHashed20 csr::{csr}", LogType.Fatal);
|
||||||
|
Log4net.WriteLine($"SignHashed20 Public Key::{GetKeyBase64Encrypted(GetPublicKeyBC(keyPair)!.Q.GetEncoded()!.ToList())}", LogType.Fatal);
|
||||||
|
Log4net.WriteLine($"SignHashed20 bVerfRst::{bVerfRst}", LogType.Fatal);
|
||||||
|
|
||||||
hashedCsr.SignedCsr = GetKeyBase64Encrypted(vnSignedHash);
|
hashedCsr.SignedCsr = GetKeyBase64Encrypted(vnSignedHash);
|
||||||
hashedCsr.EncodedSignedCsr = GetKeyBase64Encrypted(vnDEREncVal);
|
hashedCsr.EncodedSignedCsr = GetKeyBase64Encrypted(vnDEREncVal);
|
||||||
hashedCsr.Verify = bVerfRst;
|
hashedCsr.Verify = bVerfRst;
|
||||||
|
|
||||||
|
await Task.CompletedTask;
|
||||||
|
});
|
||||||
|
|
||||||
return hashedCsr;
|
return hashedCsr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -82,6 +82,7 @@ namespace VPKI.Web.Api.Services
|
|||||||
COriginTbscsr = csrOrigin,
|
COriginTbscsr = csrOrigin,
|
||||||
CHashedTbscsr = tbaCsrHashed,
|
CHashedTbscsr = tbaCsrHashed,
|
||||||
CPcid = pcid,
|
CPcid = pcid,
|
||||||
|
CHasCertificate = 0,
|
||||||
CDn = $"{dn}",
|
CDn = $"{dn}",
|
||||||
|
|
||||||
CDateTime = DateTime.Now
|
CDateTime = DateTime.Now
|
||||||
@ -159,7 +160,7 @@ namespace VPKI.Web.Api.Services
|
|||||||
string cCertType = "prov_v1";
|
string cCertType = "prov_v1";
|
||||||
|
|
||||||
TTbscsr tbscsr = new TTbscsr();
|
TTbscsr tbscsr = new TTbscsr();
|
||||||
foreach (var csr in await context.TTbscsrs.AsNoTracking().Where(x => x.CCertType == cCertType).OrderByDescending(x => x.CCuid).ToListAsync())
|
foreach (var csr in await context.TTbscsrs.Where(x => x.CCertType == cCertType && x.CHasCertificate == 0).Take(1000).OrderByDescending(x => x.CCuid).ToListAsync())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -177,10 +178,19 @@ namespace VPKI.Web.Api.Services
|
|||||||
tbscsr = csr;
|
tbscsr = csr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var publicKeyPem = $"{_certificateService.ConvertToPEM(Convert.FromBase64String(csr.CPublickey))}";
|
||||||
|
Log4net.WriteLine($"Failed HashedTbscsr::{csr.CHashedTbscsr}", LogType.Fatal);
|
||||||
|
Log4net.WriteLine($"Failed Signature::{request.csrsignature}", LogType.Fatal);
|
||||||
|
Log4net.WriteLine($"Failed PublicKey::{csr.CPublickey}", LogType.Fatal);
|
||||||
|
Log4net.WriteLine($"Failed PublicKey::{publicKeyPem}", LogType.Fatal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
e.ToString();
|
Log4net.WriteLine($"RequestCertificate Exception::{csr.CHashedTbscsr}", LogType.Error);
|
||||||
|
Log4net.WriteLine(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -239,6 +249,9 @@ namespace VPKI.Web.Api.Services
|
|||||||
CDateTime = DateTime.Now
|
CDateTime = DateTime.Now
|
||||||
};
|
};
|
||||||
await context.AddAsync(certificate);
|
await context.AddAsync(certificate);
|
||||||
|
|
||||||
|
tbscsr.CHasCertificate = 1;
|
||||||
|
context.Update(tbscsr);
|
||||||
}
|
}
|
||||||
transactionResult = await context.CloseTransactionAsync(transaction);
|
transactionResult = await context.CloseTransactionAsync(transaction);
|
||||||
}
|
}
|
||||||
@ -266,7 +279,7 @@ namespace VPKI.Web.Api.Services
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
response.status = Status.error.ToString();
|
response.status = Status.error.ToString();
|
||||||
response.message += "verify fialed";
|
response.message += "verify failed";
|
||||||
}
|
}
|
||||||
|
|
||||||
//db error
|
//db error
|
||||||
|
|||||||
@ -89,6 +89,7 @@ namespace VPKI.Web.Api.Services
|
|||||||
COriginTbscsr = csrOrigin,
|
COriginTbscsr = csrOrigin,
|
||||||
CHashedTbscsr = tbaCsrHashed,
|
CHashedTbscsr = tbaCsrHashed,
|
||||||
CPcid = pcid,
|
CPcid = pcid,
|
||||||
|
CHasCertificate = 0,
|
||||||
CDn = $"{dn}",
|
CDn = $"{dn}",
|
||||||
|
|
||||||
CDateTime = DateTime.Now
|
CDateTime = DateTime.Now
|
||||||
@ -170,7 +171,7 @@ namespace VPKI.Web.Api.Services
|
|||||||
string cCertType = vpkiType.ToString();
|
string cCertType = vpkiType.ToString();
|
||||||
|
|
||||||
TTbscsr tbscsr = new TTbscsr();
|
TTbscsr tbscsr = new TTbscsr();
|
||||||
foreach (var csr in await context.TTbscsrs.AsNoTracking().Where(x => x.CCertType == cCertType).OrderByDescending(x => x.CCuid).ToListAsync())
|
foreach (var csr in await context.TTbscsrs.Where(x => x.CCertType == cCertType && x.CHasCertificate == 0).Take(1000).OrderByDescending(x => x.CCuid).ToListAsync())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -188,10 +189,19 @@ namespace VPKI.Web.Api.Services
|
|||||||
tbscsr = csr;
|
tbscsr = csr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var publicKeyPem = $"{_certificateService.ConvertToPEM(Convert.FromBase64String(csr.CPublickey))}";
|
||||||
|
Log4net.WriteLine($"Failed HashedTbscsr::{csr.CHashedTbscsr}", LogType.Fatal);
|
||||||
|
Log4net.WriteLine($"Failed Signature::{request.csrsignature}", LogType.Fatal);
|
||||||
|
Log4net.WriteLine($"Failed PublicKey::{csr.CPublickey}", LogType.Fatal);
|
||||||
|
Log4net.WriteLine($"Failed PublicKey::{publicKeyPem}", LogType.Fatal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
e.ToString();
|
Log4net.WriteLine($"RequestCertificate Exception::{csr.CHashedTbscsr}", LogType.Error);
|
||||||
|
Log4net.WriteLine(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -249,6 +259,9 @@ namespace VPKI.Web.Api.Services
|
|||||||
CDateTime = DateTime.Now
|
CDateTime = DateTime.Now
|
||||||
};
|
};
|
||||||
await context.AddAsync(certificate);
|
await context.AddAsync(certificate);
|
||||||
|
|
||||||
|
tbscsr.CHasCertificate = 1;
|
||||||
|
context.Update(tbscsr);
|
||||||
}
|
}
|
||||||
transactionResult = await context.CloseTransactionAsync(transaction);
|
transactionResult = await context.CloseTransactionAsync(transaction);
|
||||||
}
|
}
|
||||||
@ -257,7 +270,7 @@ namespace VPKI.Web.Api.Services
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
response.status = Status.error.ToString();
|
response.status = Status.error.ToString();
|
||||||
response.message += "verify fialed";
|
response.message += "verify failed";
|
||||||
}
|
}
|
||||||
|
|
||||||
//db error
|
//db error
|
||||||
|
|||||||
@ -2,7 +2,8 @@
|
|||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Information",
|
"Default": "Information",
|
||||||
"Microsoft.AspNetCore": "Warning"
|
"Microsoft.AspNetCore": "Warning",
|
||||||
|
"Microsoft.EntityFrameworkCore.Database": "None"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,8 @@
|
|||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Information",
|
"Default": "Information",
|
||||||
"Microsoft.AspNetCore": "Warning"
|
"Microsoft.AspNetCore": "Warning",
|
||||||
|
"Microsoft.EntityFrameworkCore.Database": "None"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AllowedHosts": "*"
|
"AllowedHosts": "*"
|
||||||
|
|||||||
@ -113,12 +113,13 @@
|
|||||||
CreateCsrHash(ecdsa);
|
CreateCsrHash(ecdsa);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnClickSignedHash()
|
public async Task OnClickSignedHash()
|
||||||
{
|
{
|
||||||
SignedHash();
|
await SignedHash();
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SignedHash()
|
private async Task SignedHash()
|
||||||
{
|
{
|
||||||
if (TbscsrContainer.KeyPair != null && TbscsrContainer.ResponseTbscsr.data != null)
|
if (TbscsrContainer.KeyPair != null && TbscsrContainer.ResponseTbscsr.data != null)
|
||||||
{
|
{
|
||||||
@ -129,12 +130,12 @@
|
|||||||
{
|
{
|
||||||
ecdsa = ECDSAType.SHA256WITHECDSA.ToString();
|
ecdsa = ECDSAType.SHA256WITHECDSA.ToString();
|
||||||
var pKey = TbscsrContainer.PublicKey;
|
var pKey = TbscsrContainer.PublicKey;
|
||||||
CertificateContainer.CsrHashed = CertificateService.SignHashed02(TbscsrContainer.ResponseTbscsr.data.hashedtbscsr, TbscsrContainer.KeyPair);
|
CertificateContainer.CsrHashed = await CertificateService.SignHashed02(TbscsrContainer.ResponseTbscsr.data.hashedtbscsr, TbscsrContainer.KeyPair);
|
||||||
}
|
}
|
||||||
else if (TbscsrContainer.VpkiType == VpkiType.prov_cert || TbscsrContainer.VpkiType == VpkiType.vehicle_cert)
|
else if (TbscsrContainer.VpkiType == VpkiType.prov_cert || TbscsrContainer.VpkiType == VpkiType.vehicle_cert)
|
||||||
{
|
{
|
||||||
ecdsa = ECDSAType.NONEWITHECDSA.ToString();
|
ecdsa = ECDSAType.NONEWITHECDSA.ToString();
|
||||||
CertificateContainer.CsrHashed = CertificateService.SignHashed20(TbscsrContainer.ResponseTbscsr.data.hashedtbscsr, TbscsrContainer.KeyPair);
|
CertificateContainer.CsrHashed = await CertificateService.SignHashed20(TbscsrContainer.ResponseTbscsr.data.hashedtbscsr, TbscsrContainer.KeyPair);
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateCsrHash(ecdsa);
|
CreateCsrHash(ecdsa);
|
||||||
@ -161,7 +162,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnClickGenerateCertificate()
|
public async Task OnClickGenerateCertificate()
|
||||||
{
|
{
|
||||||
CertificateContainer.RequestCertificate.csrsignature = CertificateContainer.CsrHashed.EncodedSignedCsr;
|
CertificateContainer.RequestCertificate.csrsignature = CertificateContainer.CsrHashed.EncodedSignedCsr;
|
||||||
if (TbscsrContainer.VpkiType == VpkiType.prov_cert || TbscsrContainer.VpkiType == VpkiType.vehicle_cert)
|
if (TbscsrContainer.VpkiType == VpkiType.prov_cert || TbscsrContainer.VpkiType == VpkiType.vehicle_cert)
|
||||||
@ -170,6 +171,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
CertificateContainer.StrRequest = $"{CertificateContainer.RequestCertificate.ToJson()}";
|
CertificateContainer.StrRequest = $"{CertificateContainer.RequestCertificate.ToJson()}";
|
||||||
|
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task OnClickSendCertificate()
|
public async Task OnClickSendCertificate()
|
||||||
@ -210,6 +213,7 @@
|
|||||||
TbscsrContainer.StrResponse = $"Request Context Error{Environment.NewLine}{ex.Message}";
|
TbscsrContainer.StrResponse = $"Request Context Error{Environment.NewLine}{ex.Message}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
DialogService.CloseIndicator();
|
DialogService.CloseIndicator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -112,10 +112,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
//mac address
|
//mac address
|
||||||
public void OnClickRandomMacaddresss()
|
public async Task OnClickRandomMacaddresss()
|
||||||
{
|
{
|
||||||
var randomMac = CreateRandomMacAddress();
|
var randomMac = CreateRandomMacAddress();
|
||||||
TbscsrContainer.RequestTbscsr.cnInfo.macaddr = randomMac;
|
TbscsrContainer.RequestTbscsr.cnInfo.macaddr = randomMac;
|
||||||
|
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string CreateRandomMacAddress()
|
private string CreateRandomMacAddress()
|
||||||
@ -127,12 +129,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
//generate key
|
//generate key
|
||||||
public void OnClickGenerateKey()
|
public async Task OnClickGenerateKey()
|
||||||
{
|
{
|
||||||
GenerateKey();
|
await GenerateKey();
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GenerateKey()
|
private async Task GenerateKey()
|
||||||
{
|
{
|
||||||
if (TbscsrContainer.ISOType == VpkiIsoType.ISO15118_02)
|
if (TbscsrContainer.ISOType == VpkiIsoType.ISO15118_02)
|
||||||
{
|
{
|
||||||
@ -159,6 +162,8 @@
|
|||||||
var publicKey = (ECPublicKeyParameters)TbscsrContainer.KeyPair.Public;
|
var publicKey = (ECPublicKeyParameters)TbscsrContainer.KeyPair.Public;
|
||||||
|
|
||||||
SetKeyPairString();
|
SetKeyPairString();
|
||||||
|
|
||||||
|
await Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetKeyPairString()
|
private void SetKeyPairString()
|
||||||
@ -170,10 +175,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
//request tbscsr
|
//request tbscsr
|
||||||
public void OnClickGenerateTbscsr()
|
public async Task OnClickGenerateTbscsr()
|
||||||
{
|
{
|
||||||
TbscsrContainer.RequestTbscsr.publickey = TbscsrContainer.PublicKey;
|
TbscsrContainer.RequestTbscsr.publickey = TbscsrContainer.PublicKey;
|
||||||
TbscsrContainer.StrRequest = $"{TbscsrContainer.RequestTbscsr.ToJson()}";
|
TbscsrContainer.StrRequest = $"{TbscsrContainer.RequestTbscsr.ToJson()}";
|
||||||
|
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task OnClickSendTbscsr()
|
public async Task OnClickSendTbscsr()
|
||||||
@ -215,6 +222,7 @@
|
|||||||
Log4net.WriteLine(ex);
|
Log4net.WriteLine(ex);
|
||||||
TbscsrContainer.StrResponse = $"Request Context Error{Environment.NewLine}{ex.Message}";
|
TbscsrContainer.StrResponse = $"Request Context Error{Environment.NewLine}{ex.Message}";
|
||||||
}
|
}
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
DialogService.CloseIndicator();
|
DialogService.CloseIndicator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,66 @@
|
|||||||
|
@page "/vpki/utils"
|
||||||
|
@using System.Security.Cryptography
|
||||||
|
|
||||||
|
<h3>Utils</h3>
|
||||||
|
|
||||||
|
<AuthorizeView Roles="@($"{UserRole.Admin.ToString()},{UserRole.SuperUser.ToString()}")">
|
||||||
|
<Authorized Context="AuthContext">
|
||||||
|
<div style="width:50%;">
|
||||||
|
<div>
|
||||||
|
<RadzenLabel Text="Public Key"></RadzenLabel>
|
||||||
|
<RadzenTextArea Style="width:500px;" @bind-Value="@PubicKey"></RadzenTextArea>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
<RadzenLabel Text="Hashed Csr"></RadzenLabel>
|
||||||
|
<RadzenTextArea Style="width:500px;" @bind-Value="@HashdCsr"></RadzenTextArea>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
<RadzenLabel Text="Siganture"></RadzenLabel>
|
||||||
|
<RadzenTextArea Style="width:500px;" @bind-Value="@Signature"></RadzenTextArea>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
<RadzenButton Text="Verify02" Click="@OnClickVerify02"></RadzenButton>
|
||||||
|
<RadzenButton Text="Verify20" Click="@OnClickVerify20"></RadzenButton>
|
||||||
|
<RadzenLabel Text="@IsVerify.ToString()"></RadzenLabel>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Authorized>
|
||||||
|
<NotAuthorized>
|
||||||
|
<RadzenLabel Text="Not Authorized"></RadzenLabel>
|
||||||
|
</NotAuthorized>
|
||||||
|
</AuthorizeView>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private string PubicKey = string.Empty;
|
||||||
|
private string HashdCsr = string.Empty;
|
||||||
|
private string Signature = string.Empty;
|
||||||
|
private bool IsVerify = false;
|
||||||
|
|
||||||
|
private async Task OnClickVerify02()
|
||||||
|
{
|
||||||
|
using (ECDsa ecdsa = ECDsa.Create(ECCurve.NamedCurves.nistP256))
|
||||||
|
{
|
||||||
|
//var publicKeyPem = $"{_certificateService.ConvertToPEM(Convert.FromBase64String(csr.CPublickey))}";
|
||||||
|
ecdsa.ImportSubjectPublicKeyInfo(Convert.FromBase64String(PubicKey), out _);
|
||||||
|
|
||||||
|
var hachedTbsCsr = Convert.FromBase64String(HashdCsr);
|
||||||
|
IsVerify = ecdsa.VerifyHash(hachedTbsCsr, Convert.FromBase64String($"{Signature}"));
|
||||||
|
}
|
||||||
|
|
||||||
|
await Task.Delay(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task OnClickVerify20()
|
||||||
|
{
|
||||||
|
using (ECDsa ecdsa = ECDsa.Create(ECCurve.NamedCurves.nistP521))
|
||||||
|
{
|
||||||
|
//var publicKeyPem = $"{_certificateService.ConvertToPEM(Convert.FromBase64String(csr.CPublickey))}";
|
||||||
|
ecdsa.ImportSubjectPublicKeyInfo(Convert.FromBase64String(PubicKey), out _);
|
||||||
|
|
||||||
|
var hachedTbsCsr = Convert.FromBase64String(HashdCsr);
|
||||||
|
IsVerify = ecdsa.VerifyHash(hachedTbsCsr, Convert.FromBase64String($"{Signature}"));
|
||||||
|
}
|
||||||
|
|
||||||
|
await Task.Delay(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -73,25 +73,25 @@
|
|||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
//tbscsr
|
//tbscsr
|
||||||
await Task.Delay(3000);
|
await Task.Delay(10000);
|
||||||
|
|
||||||
if (isAutoRun == false)
|
if (isAutoRun == false)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
await InvokeAsync(() => refVPKIApiTbscsr.OnClickRandomMacaddresss());
|
await InvokeAsync(async() => await refVPKIApiTbscsr.OnClickRandomMacaddresss());
|
||||||
await Task.Delay(100);
|
await Task.Delay(300);
|
||||||
await InvokeAsync(() => refVPKIApiTbscsr.OnClickGenerateKey());
|
await InvokeAsync(async() => await refVPKIApiTbscsr.OnClickGenerateKey());
|
||||||
await Task.Delay(100);
|
await Task.Delay(300);
|
||||||
await InvokeAsync(() => refVPKIApiTbscsr.OnClickGenerateTbscsr());
|
await InvokeAsync(async() => await refVPKIApiTbscsr.OnClickGenerateTbscsr());
|
||||||
await Task.Delay(100);
|
await Task.Delay(300);
|
||||||
await InvokeAsync(async () => await refVPKIApiTbscsr.OnClickSendTbscsr());
|
await InvokeAsync(async () => await refVPKIApiTbscsr.OnClickSendTbscsr());
|
||||||
await Task.Delay(2000);
|
await Task.Delay(10000);
|
||||||
|
|
||||||
//certificate
|
//certificate
|
||||||
await InvokeAsync(() => refVPKIApiCertificate.OnClickSignedHash());
|
await InvokeAsync(async() => await refVPKIApiCertificate.OnClickSignedHash());
|
||||||
await Task.Delay(100);
|
await Task.Delay(300);
|
||||||
await InvokeAsync(() => refVPKIApiCertificate.OnClickGenerateCertificate());
|
await InvokeAsync(async() => await refVPKIApiCertificate.OnClickGenerateCertificate());
|
||||||
await Task.Delay(100);
|
await Task.Delay(300);
|
||||||
await InvokeAsync(async () => await refVPKIApiCertificate.OnClickSendCertificate());
|
await InvokeAsync(async () => await refVPKIApiCertificate.OnClickSendCertificate());
|
||||||
|
|
||||||
cnt += 1;
|
cnt += 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user