Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

रूट सीए हस्ताक्षरकर्ता के साथ स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करें

मेरे मामले में अंतिम समाधान, मेकर्ट और ओपनसेल से बचना पॉवर्सशेल और बाउंसीकास्टल का उपयोग करना था। मैंने PSBouncyCastle रेपो को PSBouncyCastle से फोर्क किया है। RLipscombe द्वारा और 1.8.1 बाउंसी कैसल को धक्का दिया। मेरा फोर्कड संस्करण वह है जिसे मैंने स्क्रिप्ट के लिए उपयोग किया है, कांटा फोर्कड:PSBouncyCastle.New .

मैंने तब StackOverflow:C# जनरेट सर्टिफिकेट ऑन द फ्लाई का इस्तेमाल किया निम्नलिखित शक्तियों को नीचे लिखने के लिए प्रेरणा के रूप में, मैं इसे अपने GitHub में जोड़ूंगा और टिप्पणी करूंगा, और जैसे ही मैं करूंगा, मैं इसमें संशोधन करूंगा :

Import-Module -Name PSBouncyCastle.New

function New-SelfSignedCertificate {
  [CmdletBinding()]
  param (
    [string]$SubjectName,
    [string]$FriendlyName = "New Certificate",
    [object]$Issuer,
    [bool]$IsCA = $false,
    [int]$KeyStrength = 2048,
    [int]$ValidYears = 2,
    [hashtable]$EKU = @{}
  )

  # Needed generators
  $random = New-SecureRandom
  $certificateGenerator = New-CertificateGenerator

  if($Issuer -ne $null -and $Issuer.HasPrivateKey -eq $true)
  {
    $IssuerName = $Issuer.IssuerName.Name
    $IssuerPrivateKey = $Issuer.PrivateKey
  }
  # Create and set a random certificate serial number
  $serial = New-SerialNumber -Random $random
  $certificateGenerator.SetSerialNumber($serial)

  # The signature algorithm
  $certificateGenerator.SetSignatureAlgorithm('SHA256WithRSA')

  # Basic Constraints - certificate is allowed to be used as intermediate.
  # Powershell requires either a $null or reassignment or it will return this from the function
  $certificateGenerator = Add-BasicConstraints -isCertificateAuthority $IsCA -certificateGenerator $certificateGenerator

  # Key Usage
  if($EKU.Count -gt 0) 
  {
    $certificateGenerator = $certificateGenerator | Add-ExtendedKeyUsage @EKU
  }
  # Create and set the Issuer and Subject name
  $subjectDN = New-X509Name -Name ($SubjectName)
  if($Issuer -ne $null) {
    $IssuerDN = New-X509Name -Name ($IssuerName)
  }
  else 
  {
    $IssuerDN = New-X509Name -Name ($SubjectName)
  }  
  $certificateGenerator.SetSubjectDN($subjectDN)
  $certificateGenerator.SetIssuerDN($IssuerDN)

  # Authority Key and Subject Identifier
  if($Issuer -ne $null)
  {
    $IssuerKeyPair = ConvertTo-BouncyCastleKeyPair -PrivateKey $IssuerPrivateKey
    $IssuerSerial = [Org.BouncyCastle.Math.BigInteger]$Issuer.GetSerialNumber()
    $authorityKeyIdentifier = New-AuthorityKeyIdentifier -name $Issuer.IssuerName.Name -publicKey $IssuerKeyPair.Public -serialNumber $IssuerSerial
    $certificateGenerator = Add-AuthorityKeyIdentifier -certificateGenerator $certificateGenerator -authorityKeyIdentifier $authorityKeyIdentifier
  }

  # Validity range of the certificate
  [DateTime]$notBefore = (Get-Date).AddDays(-1)
  if($ValidYears -gt 0) {
    [DateTime]$notAfter = $notBefore.AddYears($ValidYears)
  }
  $certificateGenerator.SetNotBefore($notBefore)
  $certificateGenerator.SetNotAfter($notAfter)


  # Subject public key ~and private
  $subjectKeyPair = New-KeyPair -Strength $keyStrength -Random $random
  if($IssuerPrivateKey -ne $null)
  {
    $IssuerKeyPair = [Org.BouncyCastle.Security.DotNetUtilities]::GetKeyPair($IssuerPrivateKey)
  }
  else 
  {
    $IssuerKeyPair = $subjectKeyPair
  }
  $certificateGenerator.SetPublicKey($subjectKeyPair.Public)

  # Create the Certificate
  $IssuerKeyPair = $subjectKeyPair
  $certificate = $certificateGenerator.Generate($IssuerKeyPair.Private, $random)
  # At this point you have the certificate and need to convert it and export, I return the private key for signing the next cert
  $pfxCertificate = ConvertFrom-BouncyCastleCertificate -certificate $certificate -subjectKeyPair $subjectKeyPair -friendlyName $FriendlyName
  return $pfxCertificate
}

इस पॉवरशेल के उपयोग के कुछ उदाहरण होंगे:

रूट CA जनरेट करें

$TestRootCA = New-SelfSignedCertificate -subjectName "CN=TestRootCA" -IsCA $true
Export-Certificate -Certificate $test -OutputFile "TestRootCA.pfx" -X509ContentType Pfx

एक मानक स्व-हस्ताक्षरित उत्पन्न करें

$TestSS = New-SelfSignedCertificate -subjectName "CN=TestLocal"
Export-Certificate -Certificate $TestSS -OutputFile "TestLocal.pfx" -X509ContentType Pfx

रूट प्रमाणपत्र के साथ हस्ताक्षर करते हुए प्रमाणपत्र जेनरेट करें

$TestRootCA = New-SelfSignedCertificate -subjectName "CN=TestRootCA" -IsCA $true
$TestSigned = New-SelfSignedCertificate -subjectName "CN=TestSignedByRoot" -issuer $TestRootCA

Export-Certificate -Certificate $test -OutputFile "TestRootCA.pfx" -X509ContentType Pfx
Export-Certificate -Certificate $test -OutputFile "TestRootCA.pfx" -X509ContentType Pfx

विशिष्ट उपयोग के साथ स्व-हस्ताक्षरित बनाएं

$TestServerCert = New-SelfSignedCertificate -subjectName "CN=TestServerCert" -EKU @{ "ServerAuthentication" = $true }

ध्यान दें कि -ईकेयू पैरामीटर splatting के माध्यम से स्वीकार करता है, यह यह सुनिश्चित करने के लिए करता है कि Add-ExtendedKeyUsage में जोड़ा गया कुछ भी वैध रूप से पारित हो गया है। यह निम्नलिखित प्रमाणपत्र उपयोगों को स्वीकार करता है:

  • डिजिटल सिग्नेचर
  • अस्वीकृति
  • कुंजी गूढ़लेख
  • डेटा एनक्रिप्शन
  • कुंजी अनुबंध
  • कीसर्टसाइन
  • CrlSign
  • केवल कूटलेखन
  • केवल समझने के लिए

यह मेरी आवश्यकता के अनुरूप है और उन सभी विंडोज़ प्लेटफ़ॉर्म पर काम करता प्रतीत होता है जिनका उपयोग हम गतिशील वातावरण के लिए कर रहे हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में पुनरावर्ती क्वेरी

  2. विशिष्ट तिथियां लौटना

  3. SQL सर्वर प्रबंधन स्टूडियो त्रुटि सहेजी गई सेटिंग्स फ़ाइल नहीं मिल सकती है

  4. SQL सर्वर में कस्टम समुच्चय फ़ंक्शन (concat)

  5. SQL सर्वर में लॉजिकल ऑपरेटर क्या नहीं है - SQL सर्वर / TSQL ट्यूटोरियल पार्ट 121