Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
T
Titanium-Web-Proxy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Titanium-Web-Proxy
Commits
e2144f40
Commit
e2144f40
authored
May 02, 2017
by
Jehonathan Thomas
Committed by
GitHub
May 02, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #202 from justcoding121/develop
#199 Fix subject alt names for Bouncy Castle
parents
7a32d7ba
fb35218a
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
24 additions
and
8 deletions
+24
-8
BCCertificateMaker.cs
Titanium.Web.Proxy/Network/Certificate/BCCertificateMaker.cs
+24
-8
No files found.
Titanium.Web.Proxy/Network/Certificate/BCCertificateMaker.cs
View file @
e2144f40
...
@@ -50,7 +50,8 @@ namespace Titanium.Web.Proxy.Network.Certificate
...
@@ -50,7 +50,8 @@ namespace Titanium.Web.Proxy.Network.Certificate
/// <param name="issuerPrivateKey">The issuer private key.</param>
/// <param name="issuerPrivateKey">The issuer private key.</param>
/// <returns>X509Certificate2 instance.</returns>
/// <returns>X509Certificate2 instance.</returns>
/// <exception cref="PemException">Malformed sequence in RSA private key</exception>
/// <exception cref="PemException">Malformed sequence in RSA private key</exception>
private
static
X509Certificate2
GenerateCertificate
(
string
subjectName
,
private
static
X509Certificate2
GenerateCertificate
(
string
hostName
,
string
subjectName
,
string
issuerName
,
DateTime
validFrom
,
string
issuerName
,
DateTime
validFrom
,
DateTime
validTo
,
int
keyStrength
=
2048
,
DateTime
validTo
,
int
keyStrength
=
2048
,
string
signatureAlgorithm
=
"SHA256WithRSA"
,
string
signatureAlgorithm
=
"SHA256WithRSA"
,
...
@@ -76,6 +77,18 @@ namespace Titanium.Web.Proxy.Network.Certificate
...
@@ -76,6 +77,18 @@ namespace Titanium.Web.Proxy.Network.Certificate
certificateGenerator
.
SetNotBefore
(
validFrom
);
certificateGenerator
.
SetNotBefore
(
validFrom
);
certificateGenerator
.
SetNotAfter
(
validTo
);
certificateGenerator
.
SetNotAfter
(
validTo
);
if
(
hostName
!=
null
)
{
//add subject alternative names
var
subjectAlternativeNames
=
new
Asn1Encodable
[]
{
new
GeneralName
(
GeneralName
.
DnsName
,
hostName
),
};
var
subjectAlternativeNamesExtension
=
new
DerSequence
(
subjectAlternativeNames
);
certificateGenerator
.
AddExtension
(
X509Extensions
.
SubjectAlternativeName
.
Id
,
false
,
subjectAlternativeNamesExtension
);
}
// Subject Public Key
// Subject Public Key
var
keyGenerationParameters
=
new
KeyGenerationParameters
(
secureRandom
,
keyStrength
);
var
keyGenerationParameters
=
new
KeyGenerationParameters
(
secureRandom
,
keyStrength
);
var
keyPairGenerator
=
new
RsaKeyPairGenerator
();
var
keyPairGenerator
=
new
RsaKeyPairGenerator
();
...
@@ -117,13 +130,15 @@ namespace Titanium.Web.Proxy.Network.Certificate
...
@@ -117,13 +130,15 @@ namespace Titanium.Web.Proxy.Network.Certificate
/// Makes the certificate internal.
/// Makes the certificate internal.
/// </summary>
/// </summary>
/// <param name="isRoot">if set to <c>true</c> [is root].</param>
/// <param name="isRoot">if set to <c>true</c> [is root].</param>
/// <param name="fullSubject">The full subject.</param>
/// <param name="hostName">hostname for certificate</param>
/// <param name="subjectName">The full subject.</param>
/// <param name="validFrom">The valid from.</param>
/// <param name="validFrom">The valid from.</param>
/// <param name="validTo">The valid to.</param>
/// <param name="validTo">The valid to.</param>
/// <param name="signingCertificate">The signing certificate.</param>
/// <param name="signingCertificate">The signing certificate.</param>
/// <returns>X509Certificate2 instance.</returns>
/// <returns>X509Certificate2 instance.</returns>
/// <exception cref="System.ArgumentException">You must specify a Signing Certificate if and only if you are not creating a root.</exception>
/// <exception cref="System.ArgumentException">You must specify a Signing Certificate if and only if you are not creating a root.</exception>
private
X509Certificate2
MakeCertificateInternal
(
bool
isRoot
,
string
fullSubject
,
private
X509Certificate2
MakeCertificateInternal
(
bool
isRoot
,
string
hostName
,
string
subjectName
,
DateTime
validFrom
,
DateTime
validTo
,
X509Certificate2
signingCertificate
)
DateTime
validFrom
,
DateTime
validTo
,
X509Certificate2
signingCertificate
)
{
{
if
(
isRoot
!=
(
null
==
signingCertificate
))
if
(
isRoot
!=
(
null
==
signingCertificate
))
...
@@ -132,8 +147,8 @@ namespace Titanium.Web.Proxy.Network.Certificate
...
@@ -132,8 +147,8 @@ namespace Titanium.Web.Proxy.Network.Certificate
}
}
return
isRoot
return
isRoot
?
GenerateCertificate
(
fullSubject
,
fullSubject
,
validFrom
,
validTo
)
?
GenerateCertificate
(
null
,
subjectName
,
subjectName
,
validFrom
,
validTo
)
:
GenerateCertificate
(
fullSubject
,
signingCertificate
.
Subject
,
validFrom
,
validTo
,
issuerPrivateKey
:
DotNetUtilities
.
GetKeyPair
(
signingCertificate
.
PrivateKey
).
Private
);
:
GenerateCertificate
(
hostName
,
subjectName
,
signingCertificate
.
Subject
,
validFrom
,
validTo
,
issuerPrivateKey
:
DotNetUtilities
.
GetKeyPair
(
signingCertificate
.
PrivateKey
).
Private
);
}
}
/// <summary>
/// <summary>
...
@@ -143,9 +158,10 @@ namespace Titanium.Web.Proxy.Network.Certificate
...
@@ -143,9 +158,10 @@ namespace Titanium.Web.Proxy.Network.Certificate
/// <param name="isRoot">if set to <c>true</c> [is root].</param>
/// <param name="isRoot">if set to <c>true</c> [is root].</param>
/// <param name="switchToMtaIfNeeded">if set to <c>true</c> [switch to MTA if needed].</param>
/// <param name="switchToMtaIfNeeded">if set to <c>true</c> [switch to MTA if needed].</param>
/// <param name="signingCert">The signing cert.</param>
/// <param name="signingCert">The signing cert.</param>
/// <param name="cancellationToken">Task cancellation token</param>
/// <returns>X509Certificate2.</returns>
/// <returns>X509Certificate2.</returns>
private
X509Certificate2
MakeCertificateInternal
(
string
subject
,
bool
isRoot
,
private
X509Certificate2
MakeCertificateInternal
(
string
subject
,
bool
isRoot
,
bool
switchToMtaIfNeeded
,
X509Certificate2
signingCert
=
null
,
bool
switchToMtaIfNeeded
,
X509Certificate2
signingCert
=
null
,
CancellationToken
cancellationToken
=
default
(
CancellationToken
))
CancellationToken
cancellationToken
=
default
(
CancellationToken
))
{
{
X509Certificate2
certificate
=
null
;
X509Certificate2
certificate
=
null
;
...
@@ -170,7 +186,7 @@ namespace Titanium.Web.Proxy.Network.Certificate
...
@@ -170,7 +186,7 @@ namespace Titanium.Web.Proxy.Network.Certificate
return
certificate
;
return
certificate
;
}
}
return
MakeCertificateInternal
(
isRoot
,
$"CN=
{
subject
}
"
,
DateTime
.
UtcNow
.
AddDays
(-
CertificateGraceDays
),
DateTime
.
UtcNow
.
AddDays
(
CertificateValidDays
),
isRoot
?
null
:
signingCert
);
return
MakeCertificateInternal
(
isRoot
,
subject
,
$"CN=
{
subject
}
"
,
DateTime
.
UtcNow
.
AddDays
(-
CertificateGraceDays
),
DateTime
.
UtcNow
.
AddDays
(
CertificateValidDays
),
isRoot
?
null
:
signingCert
);
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment