PKI에 익숙한 대부분의 Windows 관리자는 MakeCert.exe
에 대해 알고 있습니다. 자체 서명된 인증서를 생성할 수 있는 도구입니다. 이 도구는 Microsoft .NET Framework SDK 및 Microsoft Windows SDK의 일부입니다. 최신 Windows 버전(Windows 10/8.1 및 Windows Server 2019/2016/2012R2)에서는 기본 제공 PowerShell cmdlet New-SelfSignedCertificate
를 사용하여 자체 서명된 인증서를 만들 수 있습니다. 추가 도구를 사용하지 않고.
New-SelfSignedCertificate PowerShell Cmdlet을 사용하여 자체 서명된 인증서 만들기
PowerShell로 자체 서명된 인증서를 생성하려면 New-SelfSignedCertificate 를 사용할 수 있습니다. PoSh PKI의 일부인 cmdlet (공개 키 인프라) 모듈:
PKI 모듈에서 사용 가능한 모든 cmdlet을 나열하려면 명령을 실행하십시오.
명령 받기 - 모듈 PKI
테스트 목적으로 자체 서명된 인증서를 사용하거나 PKI/CA 인프라를 배포할 수 없거나 신뢰할 수 있는 제품을 구입할 수 없는 경우 내부 인트라넷 서비스(IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess 등)에 대한 인증서를 제공하는 것이 좋습니다. 외부 공급자의 인증서입니다.
팁 . Let's Encrypt에서 무료 SSL 인증서를 쉽게 얻을 수 있다는 것을 잊지 마십시오. 다음은 Let's Encrypt SSL 인증서를 발급하고 Windows Server의 IIS 사이트에 바인딩하는 방법의 예입니다.인증서를 생성하려면 –DnsName 값을 지정해야 합니다. (서버 이름, 이름은 임의적이며 localhost 이름과 다를 수 있음) 및 -CertStoreLocation (생성된 인증서가 저장될 로컬 인증서 저장소). cmdlet을 사용하여 Windows 10(이 예에서는), Windows 8.1 및 Windows Server 2019/2016/2012 R2 /2012에서 자체 서명된 인증서를 만들 수 있습니다.
DNS 이름 test.contoso.com(FQDN 이름 사용)에 대한 새 SSL 인증서(기본 SSLServerAuthentication 유형)를 만들고 컴퓨터의 개인 인증서 목록에 배치하려면 다음 명령을 실행합니다.
New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:\LocalMachine\My
Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My Thumbprint Subject ---------- ------- 2175A76B10F843676951965F52A718F635FFA043 CN=test.contoso.com상승되지 않은 PowerShell 세션(로컬 관리자 권한 없이)에서 이 명령을 실행하면 오류가 나타납니다.
New-SelfSignedCertificate : CertEnroll::CX509Enrollment::_CreateRequest: Access denied. 0x80090010 (-2146893808 NTE_PERM)
예를 들어 -KeyAlgorithm "ECDSA_secP256r1" -Provider "Microsoft Smart Card Key Storage Provider"
를 사용하여 비표준 CSP(암호화 공급자)를 지정한 경우 매개변수가 컴퓨터에 설치되어 있는지 확인하십시오(기본값은 Microsoft Enhanced Cryptographic Provider CSP임). 그렇지 않으면 오류가 나타납니다:
New-SelfSignedCertificate: CertEnroll::CX509Enrollment::_CreateRequest: Provider type not defined. 0x80090017 (-2146893801 NTE_PROV_TYPE_NOT_DEF).
이 명령은 새 인증서를 만들고 컴퓨터의 개인 인증서 저장소로 가져옵니다. certlm.msc 를 엽니다. MMC 스냅인, 새 인증서가 개인 인증서 저장소 섹션.
기본적으로 다음 설정으로 자체 서명된 인증서가 생성됩니다.
- 암호화 알고리즘: RSA;
- 키 길이:2048비트;
- 허용되는 키 사용: 클라이언트 인증 및 서버 인증;
- 인증서는 다음 용도로 사용할 수 있습니다. 디지털 서명 , 키 암호화;
- 인증서 유효 기간:1년 .
Get-ChildItem cmdlet을 사용하면 생성된 인증서의 모든 매개 변수를 지문으로 표시할 수 있습니다.
Get-ChildItem -경로 "Cert:\LocalMachine\My" | Where-Object 지문 -eq 2175A76B10F843676951965F52A718F635FFA043 | 개체 선택 *
Microsoft.PowerShell.Security \ 인증서 ::LocalMachine \ 내 \ 2175A76B10F843676951965F52A718F635FFA043PSParentPath :Microsoft.PowerShell.Security \ 인증서 ::LocalMachine \ MyPSChildName :2175A76B10F843676951965F52A718F635FFA043PSDrive :CertPSProvider :Microsoft.PowerShell.Security \ CertificatePSIsContainer :FalseEnhancedKeyUsageList :{클라이언트 인증 PSPath
PSPath : Microsoft.PowerShell.Security\Certificate::LocalMachine\My\2175A76B10F843676951965F52A718F635FFA043 PSParentPath : Microsoft.PowerShell.Security\Certificate::LocalMachine\My PSChildName : 2175A76B10F843676951965F52A718F635FFA043 PSDrive : Cert PSProvider : Microsoft.PowerShell.Security\Certificate PSIsContainer : False EnhancedKeyUsageList : {Client Authentication (1.3.6.1.5.5.7.3.2), Server Authentication (1.3.6.1.5.5.7.3.1)} DnsNameList : {test.contoso.com} SendAsTrustedIssuer : False EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty PolicyId : Archived : False Extensions : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oid} FriendlyName : IssuerName : System.Security.Cryptography.X509Certificates.X500DistinguishedName NotAfter : 05/11/2021 06:19:42 NotBefore : 05/11/2020 05:59:42 HasPrivateKey : True PrivateKey : PublicKey : System.Security.Cryptography.X509Certificates.PublicKey RawData : {48, 130, 3, 45...} SerialNumber : 6797F5E3F870478D4D3798BEB291DBF3 SubjectName : System.Security.Cryptography.X509Certificates.X500DistinguishedName SignatureAlgorithm : System.Security.Cryptography.Oid Thumbprint : 2175A76B10F843676951965F52A718F635FFA043 Version : 3 Handle : 2834444631568 Issuer : CN=test.contoso.com Subject : CN=test.contoso.com참고 . 이러한 자체 서명된 인증서는 생성일로부터 1년 후에 만료됩니다. –NotAfter를 사용하여 다른 인증서 유효 기간을 설정할 수 있습니다. 옵션. 예를 들어 다음 명령을 사용하여 유효 기간이 3년인 SSL/TLS 인증서를 발급할 수 있습니다.
$todaydt =Get-Date
$3years =$todaydt.AddYears(3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $3years -CertStoreLocation cert:\LocalMachine\My
인증서 체인을 생성할 수 있습니다. 먼저 루트 인증서(CA)가 생성되고 이를 기반으로 SSL 서버 인증서가 생성됩니다.
$rootCert =New-SelfSignedCertificate -Subject 'CN=TestRootCA,O=TestRootCA,OU=TestRootCA' -KeyExportPolicy 내보내기 가능 -KeyUsage CertSign,CRLSign,DigitalSignature -KeyLength 2048 -KeyUsageProperty 모든 -KeyAlgorithm '-Hash'RSHA -Provider 'Microsoft Enhanced RSA 및 AES 암호화 공급자'
New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName "test2.contoso.com" -Signer $rootCert -KeyUsage KeyEncipherment,DigitalSignature
개인 키로 생성된 인증서를 암호로 보호된 PFX 파일로 내보내려면 지문을 지정해야 합니다. New-SelfSignedCertificate 명령의 결과에서 복사할 수 있습니다. 또한 인증서 보안 암호를 지정하고 SecureString 형식으로 변환해야 합니다.
$CertPassword =ConvertTo-SecureString -String "YourPassword" -Force -AsPlainText
Export-PfxCertificate -Cert cert:\LocalMachine\My\2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:
인증서 공개 키는 다음과 같이 내보낼 수 있습니다.
Export-Certificate -Cert Cert:\LocalMachine\My\2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:\tstcert.cer
*.cer(PFX) 인증서 파일이 지정된 디렉토리에 나타나는지 확인하십시오. 마우스 오른쪽 버튼으로 클릭하고 "인증서 설치를 선택하면 " 메뉴 항목에서 인증서 가져오기 마법사를 사용할 수 있습니다. 컴퓨터의 신뢰할 수 있는 루트 인증서에 인증서를 추가합니다.
Cert Store 위치 선택 -> 로컬 머신 , 모든 인증서를 다음 저장소에 저장 -> 신뢰할 수 있는 루트 인증 기관 .
다음 명령을 사용하여 인증서를 만들고 컴퓨터의 신뢰할 수 있는 루트 인증서 저장소로 즉시 가져올 수 있습니다.
$SelfSignCert=New-SelfSignedCertificate …...
$certFile =Export-Certificate -Cert $SelfSignCert -FilePath C:\ps\export-certname.cer
Import-Certificate -CertStoreLocation 인증서:\LocalMachine\AuthRoot -FilePath $certFile.FullName
이 공개 키 또는 인증서 파일 자체는 GPO를 사용하여 Active Directory 도메인의 모든 컴퓨터 및 서버에 배포할 수 있습니다(GPO를 사용하여 도메인 컴퓨터에 인증서를 배포하는 방법?).
주체 대체 이름으로 자체 서명된 인증서 만들기
New-SelfSignedCertificate cmdlet의 유용한 기능 중 하나는 SAN(주체 대체 이름)과 같은 여러 다른 이름으로 인증서를 만드는 기능입니다. .
참고 .Makecert.exe
이 도구는 New-SelfSignedCertificate cmdlet과 달리 SAN 및 와일드카드 인증서를 생성할 수 없습니다. 여러 이름으로 인증서를 생성하려는 경우 DnsName 매개변수의 이름이 인증서의 CN(일반 이름)으로 사용됩니다. 예를 들어 다음 이름으로 자체 서명된 SAN 인증서를 생성해 보겠습니다.
- 주제 이름(CN):adfs1.contoso.com
- 주체 대체 이름(DNS):web_gw.contoso.com
- 주체 대체 이름(DNS):enterprise_reg.contoso.com
인증서 생성 명령은 다음과 같습니다.
New-SelfSignedCertificate -DnsName adfs1.contoso.com,web_gw.contoso.com,enterprise_reg.contoso.com -CertStoreLocation 인증서:\LocalMachine\My
또한 와일드 카드를 생성할 수도 있습니다. 전체 도메인 네임스페이스에 대한 인증서입니다. 이를 수행하려면 *.contoso.com 을 지정합니다. 서버 이름으로.
New-SelfSignedCertificate -certstorelocation 인증서:\localmachine\my -dnsname *.contoso.com
Windows에서 코드 서명을 위한 자체 서명 인증서 생성
PoweShell 3.0에서 New-SelfSifgnedCertificate cmdlet은 드라이버, 응용 프로그램 또는 스크립트 코드에 서명하는 데 사용할 수 없는 SSL 인증서만 생성합니다(MakeCert 유틸리티에서 생성된 인증서와 다름).
PowerShell 버전 5.0 이상에서는 이제 New-SelfSifgnedCertificate cmdlet의 새 버전을 사용하여 코드 서명을 발급할 수 있습니다. 인증서.
자체 서명된 애플리케이션 코드 서명 인증서를 생성하려면 다음 명령을 실행하십시오.
$cert =New-SelfSignedCertificate -제목 "내 코드 서명 인증서" -Type CodeSigningCert -CertStoreLocation cert:\LocalMachine\My
이제 자체 서명된 인증서로 PowerShell 스크립트에 서명할 수 있습니다.
Set-AuthenticodeSignature -FilePath C:\PS\my_posh_script.ps1 -인증서 $cert
알 수 없는 오류를 수신하는 경우 명령을 실행할 때 경고는 사용자의 개인 인증서 저장소에 있기 때문에 인증서를 신뢰할 수 없음을 의미합니다.
신뢰할 수 있는 루트 인증서 저장소로 이동해야 합니다(Windows 인증서 루트 저장소에서 신뢰할 수 없고 의심스러운 인증서를 정기적으로 검색하고 신뢰할 수 있는 루트 인증서 목록을 업데이트하는 것을 잊지 마십시오).
Move-Item -Path $cert.PSPath -Destination "Cert:\CurrentUser\Root"
그런 다음 이 자체 서명된 인증서로 PowerShell 스크립트에 서명할 수 있습니다.
Windows Server IIS의 IIS에서 SHA-256 자체 서명된 SSL 인증서 사용
Internet Information Manager 콘솔을 통해 IIS용 자체 서명 인증서를 생성할 때(자체 서명 인증서 생성 action 메뉴 항목), SSL 인증서는 SHA-1 암호화 알고리즘을 사용하여 생성됩니다. 이러한 인증서는 많은 브라우저에서 신뢰할 수 없는 것으로 간주되며 보안 연결을 설정하는 데 사용할 수 없습니다(또는 다른 SSL 오류가 표시될 수 있음). New-SelfSignedCertificate cmdlet을 사용하면 SHA-256 암호화 알고리즘을 사용하여 보다 널리 사용되는 인증서 유형을 만들 수 있습니다.
PowerShell로 생성된 자체 서명된 SHA-256 인증서를 Windows Server의 IIS 사이트에 바인딩할 수 있습니다. PowerShell을 사용하여 SSL 인증서를 만들어 컴퓨터의 인증서 저장소에 넣으면 IIS 사이트에서 자동으로 사용할 수 있습니다.
IIS 관리자 콘솔을 시작하고 사이트를 선택한 다음 사이트 바인딩 옵션에서 생성한 인증서를 선택하고 변경 사항을 저장합니다.