修复生成CA证书时缺少CA标识扩展的bug
This commit is contained in:
		
							parent
							
								
									02c051511d
								
							
						
					
					
						commit
						97135abe3b
					
				@ -1,5 +1,4 @@
 | 
				
			|||||||
using Org.BouncyCastle.Asn1;
 | 
					using Org.BouncyCastle.Asn1.Pkcs;
 | 
				
			||||||
using Org.BouncyCastle.Asn1.Pkcs;
 | 
					 | 
				
			||||||
using Org.BouncyCastle.Asn1.X509;
 | 
					using Org.BouncyCastle.Asn1.X509;
 | 
				
			||||||
using Org.BouncyCastle.Asn1.X9;
 | 
					using Org.BouncyCastle.Asn1.X9;
 | 
				
			||||||
using Org.BouncyCastle.Crypto;
 | 
					using Org.BouncyCastle.Crypto;
 | 
				
			||||||
@ -41,7 +40,7 @@ namespace FastGithub.ReverseProxy
 | 
				
			|||||||
        public static void GenerateBySelf(IEnumerable<string> domains, int keySizeBits, DateTime validFrom, DateTime validTo, string caPublicCerPath, string caPrivateKeyPath)
 | 
					        public static void GenerateBySelf(IEnumerable<string> domains, int keySizeBits, DateTime validFrom, DateTime validTo, string caPublicCerPath, string caPrivateKeyPath)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var keys = GenerateRsaKeyPair(keySizeBits);
 | 
					            var keys = GenerateRsaKeyPair(keySizeBits);
 | 
				
			||||||
            var cert = GenerateCertificate(domains, keys.Public, validFrom, validTo, domains.First(), null, keys.Private, null);
 | 
					            var cert = GenerateCertificate(domains, keys.Public, validFrom, validTo, domains.First(), null, keys.Private);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            using var priWriter = new StreamWriter(caPrivateKeyPath);
 | 
					            using var priWriter = new StreamWriter(caPrivateKeyPath);
 | 
				
			||||||
            var priPemWriter = new PemWriter(priWriter);
 | 
					            var priPemWriter = new PemWriter(priWriter);
 | 
				
			||||||
@ -85,7 +84,7 @@ namespace FastGithub.ReverseProxy
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            var caSubjectName = GetSubjectName(caCert);
 | 
					            var caSubjectName = GetSubjectName(caCert);
 | 
				
			||||||
            var keys = GenerateRsaKeyPair(keySizeBits);
 | 
					            var keys = GenerateRsaKeyPair(keySizeBits);
 | 
				
			||||||
            var cert = GenerateCertificate(domains, keys.Public, validFrom, validTo, caSubjectName, caCert.GetPublicKey(), caPrivateKey, null);
 | 
					            var cert = GenerateCertificate(domains, keys.Public, validFrom, validTo, caSubjectName, caCert.GetPublicKey(), caPrivateKey);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return GeneratePfx(cert, keys.Private, password);
 | 
					            return GeneratePfx(cert, keys.Private, password);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -113,9 +112,8 @@ namespace FastGithub.ReverseProxy
 | 
				
			|||||||
        /// <param name="issuerName"></param>
 | 
					        /// <param name="issuerName"></param>
 | 
				
			||||||
        /// <param name="issuerPublic"></param>
 | 
					        /// <param name="issuerPublic"></param>
 | 
				
			||||||
        /// <param name="issuerPrivate"></param> 
 | 
					        /// <param name="issuerPrivate"></param> 
 | 
				
			||||||
        /// <param name="CA_PathLengthConstraint"></param>
 | 
					 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        private static X509Certificate GenerateCertificate(IEnumerable<string> domains, AsymmetricKeyParameter subjectPublic, DateTime validFrom, DateTime validTo, string issuerName, AsymmetricKeyParameter? issuerPublic, AsymmetricKeyParameter issuerPrivate, int? CA_PathLengthConstraint)
 | 
					        private static X509Certificate GenerateCertificate(IEnumerable<string> domains, AsymmetricKeyParameter subjectPublic, DateTime validFrom, DateTime validTo, string issuerName, AsymmetricKeyParameter? issuerPublic, AsymmetricKeyParameter issuerPrivate)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var signatureFactory = issuerPrivate is ECPrivateKeyParameters
 | 
					            var signatureFactory = issuerPrivate is ECPrivateKeyParameters
 | 
				
			||||||
                ? new Asn1SignatureFactory(X9ObjectIdentifiers.ECDsaWithSha256.ToString(), issuerPrivate)
 | 
					                ? new Asn1SignatureFactory(X9ObjectIdentifiers.ECDsaWithSha256.ToString(), issuerPrivate)
 | 
				
			||||||
@ -134,10 +132,9 @@ namespace FastGithub.ReverseProxy
 | 
				
			|||||||
                var akis = new AuthorityKeyIdentifierStructure(issuerPublic);
 | 
					                var akis = new AuthorityKeyIdentifierStructure(issuerPublic);
 | 
				
			||||||
                certGenerator.AddExtension(X509Extensions.AuthorityKeyIdentifier, false, akis);
 | 
					                certGenerator.AddExtension(X509Extensions.AuthorityKeyIdentifier, false, akis);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (CA_PathLengthConstraint != null && CA_PathLengthConstraint >= 0)
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var extension = new X509Extension(true, new DerOctetString(new BasicConstraints(CA_PathLengthConstraint.Value)));
 | 
					                certGenerator.AddExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(cA: true)); ;
 | 
				
			||||||
                certGenerator.AddExtension(X509Extensions.BasicConstraints, extension.IsCritical, extension.GetParsedValue());
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var names = domains.Select(domain =>
 | 
					            var names = domains.Select(domain =>
 | 
				
			||||||
 | 
				
			|||||||
@ -37,8 +37,8 @@ namespace FastGithub
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            const string CAPATH = "CACert";
 | 
					            const string CAPATH = "CACert";
 | 
				
			||||||
            Directory.CreateDirectory(CAPATH);
 | 
					            Directory.CreateDirectory(CAPATH);
 | 
				
			||||||
            var caPublicCerPath = $"{CAPATH}/{Environment.MachineName}.cer";
 | 
					            var caPublicCerPath = $"{CAPATH}/{nameof(FastGithub)}.cer";
 | 
				
			||||||
            var caPrivateKeyPath = $"{CAPATH}/{Environment.MachineName}.key";
 | 
					            var caPrivateKeyPath = $"{CAPATH}/{nameof(FastGithub)}.key";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            GeneratorCaCert(caPublicCerPath, caPrivateKeyPath);
 | 
					            GeneratorCaCert(caPublicCerPath, caPrivateKeyPath);
 | 
				
			||||||
            InstallCaCert(caPublicCerPath, logger);
 | 
					            InstallCaCert(caPublicCerPath, logger);
 | 
				
			||||||
 | 
				
			|||||||
@ -22,7 +22,7 @@ namespace FastGithub.Controllers
 | 
				
			|||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        public async Task<IActionResult> Cert()
 | 
					        public async Task<IActionResult> Cert()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var certFile = $"CACert/{Environment.MachineName}.cer";
 | 
					            var certFile = $"CACert/{nameof(FastGithub)}.cer";
 | 
				
			||||||
            this.Response.ContentType = "application/x-x509-ca-cert";
 | 
					            this.Response.ContentType = "application/x-x509-ca-cert";
 | 
				
			||||||
            this.Response.Headers.Add("Content-Disposition", $"attachment;filename={nameof(FastGithub)}.cer");
 | 
					            this.Response.Headers.Add("Content-Disposition", $"attachment;filename={nameof(FastGithub)}.cer");
 | 
				
			||||||
            await this.Response.SendFileAsync(certFile);
 | 
					            await this.Response.SendFileAsync(certFile);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user