Computer >> Máy Tính >  >> Hệ thống >> máy chủ Windows

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

Đa số quản trị viên Windows, những người quen thuộc với PKI, đều biết về MakeCert.exe công cụ này cho phép tạo chứng chỉ tự ký. Công cụ này là một phần của Microsoft .NET Framework SDK và Microsoft Windows SDK. Trên các phiên bản Windows hiện đại (Windows 10 / 8.1 và Windows Server 2019/2016 / 2012R2), bạn có thể tạo chứng chỉ tự ký bằng cách sử dụng lệnh ghép ngắn PowerShell tích hợp sẵn New-SelfSignedCertificate mà không cần sử dụng các công cụ bổ sung.

Sử dụng Cmdlet PowerShell Mới Tự ký Chứng chỉ để Tạo Chứng chỉ Tự ký

Để tạo chứng chỉ tự ký với PowerShell, bạn có thể sử dụng Chứng chỉ tự ký mới lệnh ghép ngắn, là một phần của PoSh PKI (Cơ sở hạ tầng khóa công khai):

Để liệt kê tất cả các lệnh ghép ngắn có sẵn trong mô-đun PKI, hãy chạy lệnh.

Get-Command -Module PKI

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

Bạn nên sử dụng chứng chỉ tự ký cho mục đích thử nghiệm hoặc cung cấp chứng chỉ cho các dịch vụ Intranet nội bộ (IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess, v.v.) nếu bạn không thể triển khai cơ sở hạ tầng PKI / CA hoặc mua một thiết bị đáng tin cậy chứng chỉ từ nhà cung cấp bên ngoài.

Mẹo . Đừng quên rằng bạn có thể dễ dàng nhận được chứng chỉ SSL miễn phí từ Let’s Encrypt. Dưới đây là một ví dụ về cách phát hành chứng chỉ SSL của Let’s Encrypt và liên kết nó với trang IIS trên Windows Server.

Để tạo chứng chỉ, bạn phải chỉ định các giá trị của –DnsName (tên máy chủ, tên có thể tùy ý và khác với tên máy chủ cục bộ) và -CertStoreLocation (một kho lưu trữ chứng chỉ cục bộ trong đó chứng chỉ đã tạo sẽ được đặt). Bạn có thể sử dụng lệnh ghép ngắn để tạo chứng chỉ tự ký trên Windows 10 (trong ví dụ này), Windows 8.1 và Windows Server 2019/2016/2012 R2 / 2012.

Để tạo chứng chỉ SSL mới (thuộc loại SSLServerAuthentication mặc định) cho tên DNS test.contoso.com (sử dụng tên FQDN) và đặt nó vào danh sách chứng chỉ cá nhân trên máy tính, hãy chạy lệnh sau:

New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:\ LocalMachine \ My

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint                               Subject
----------                               -------
2175A76B10F843676951965F52A718F635FFA043   CN=test.contoso.com
Nếu bạn chạy lệnh này trong phiên PowerShell không nâng cao (không có quyền quản trị cục bộ), lỗi sẽ xuất hiện:

New-SelfSignedCertificate : CertEnroll::CX509Enrollment::_CreateRequest: Access denied. 0x80090010 (-2146893808 NTE_PERM)

Ví dụ:nếu bạn đã chỉ định nhà cung cấp mật mã không chuẩn (CSP), sử dụng -KeyAlgorithm "ECDSA_secP256r1" -Provider "Microsoft Smart Card Key Storage Key" , hãy đảm bảo rằng nó được cài đặt trên máy tính của bạn (mặc định là Microsoft Enhanced Cryptographic Provider CSP). Nếu không, lỗi sẽ xuất hiện:

New-SelfSignedCertificate: CertEnroll::CX509Enrollment::_CreateRequest: Provider type not defined. 0x80090017 (-2146893801 NTE_PROV_TYPE_NOT_DEF).

Lệnh này tạo chứng chỉ mới và nhập chứng chỉ đó vào kho lưu trữ chứng chỉ cá nhân của máy tính. Mở certlm.msc MMC đính kèm, đảm bảo rằng chứng chỉ mới xuất hiện trong Cá nhân phần của kho lưu trữ chứng chỉ.

Theo mặc định, chứng chỉ tự ký được tạo với các cài đặt sau:

  • Thuật toán mật mã: RSA ;
  • Độ dài khóa: 2048 bit ;
  • Cách sử dụng khóa được chấp nhận: Xác thực ứng dụng khách Xác thực máy chủ ;
  • Chứng chỉ có thể được sử dụng cho: Chữ ký số , Sự kỷ luật chính ;
  • Thời hạn hiệu lực của chứng chỉ: 1 năm .
Như bạn có thể thấy, các thuộc tính chứng chỉ cho biết rằng chứng chỉ này có thể được sử dụng để Xác thực Máy khách, nhưng nó cũng hợp lệ cho Xác thực Máy chủ.

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

Sử dụng lệnh ghép ngắn Get-ChildItem, bạn có thể hiển thị tất cả các tham số của chứng chỉ đã tạo bằng Thumbprint của nó:

Get-ChildItem -Path "Cert:\ LocalMachine \ My" | Dấu vết ở đâu-Đối tượng -eq 2175A76B10F843676951965F52A718F635FFA043 | Chọn-Đối tượng *

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

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
Lưu ý . Chứng chỉ tự ký như vậy sẽ hết hạn sau 1 năm kể từ ngày tạo. Bạn có thể đặt thời hạn hiệu lực chứng chỉ khác bằng cách sử dụng –NotAfter Lựa chọn. Ví dụ:bạn có thể phát hành chứng chỉ SSL / TLS với thời hạn hiệu lực ba năm bằng các lệnh sau:

$ todaydt =Get-Date
$ 3years =$ todaydt.AddYears (3)
New-SelfSignedCertificate -dnsname test.contoso.com -not sau $ 3years -CertStoreLocation cert:\ LocalMachine \ My

Bạn có thể tạo một chuỗi chứng chỉ. Đầu tiên, chứng chỉ gốc (CA) được tạo và dựa trên nó, chứng chỉ máy chủ SSL được tạo:

$ rootCert =New-SelfSignedCertificate -Subject 'CN =TestRootCA, O =TestRootCA, OU =TestRootCA' -KeyExportPolicy Exportable -KeyUsage CertSign, CRLSign, DigitalSignature -KeyLength 2048 -KeyUsageProperty All -Key ' -Các nhà cung cấp 'Microsoft Enhanced RSA và AES Cryptographic Provider'
New-SelfSignedCertificate -CertStoreLocation cert:\ LocalMachine \ My -DnsName "test2.contoso.com" -Signer $ rootCert -KeyUsage KeyEncipherment, DigitalSignature

Để xuất chứng chỉ đã tạo bằng khóa riêng sang tệp PFX được bảo vệ bằng mật khẩu, bạn cần chỉ định Dấu tay của nó. Nó có thể được sao chép từ kết quả của lệnh New-SelfSignedCertificate. Bạn cũng cần chỉ định mật khẩu bảo mật chứng chỉ và chuyển đổi nó sang định dạng SecureString:

$ CertPassword =ConvertTo-SecureString -String “YourPassword” -Force –AsPlainText
Export-PfxCertificate -Cert cert:\ LocalMachine \ My \ 2779C7928D055B21AAA0Cfe2F6BE1Aert5C2CAword83B30 -Pass.p mã Certf C2CAword83B30 -Pass.p C>

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

Khóa công khai của chứng chỉ có thể được xuất như sau:

Export-Certificate -Cert Cert:\ LocalMachine \ My \ 2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:\ tstcert.cer

Đảm bảo rằng tệp chứng chỉ * .cer (PFX) xuất hiện trong thư mục được chỉ định. Nếu bạn nhấp chuột phải vào nó và chọn “ Cài đặt chứng chỉ ”, Bạn có thể sử dụng Trình hướng dẫn nhập chứng chỉ để thêm chứng chỉ vào chứng chỉ gốc đáng tin cậy trên máy tính của bạn.

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

Chọn vị trí Cert Store -> Máy cục bộ , Đặt tất cả chứng chỉ vào cửa hàng sau -> Tổ chức phát hành chứng chỉ gốc đáng tin cậy .

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

Bạn có thể tạo chứng chỉ và nhập ngay vào kho lưu trữ Chứng chỉ gốc đáng tin cậy của máy tính bằng các lệnh:
$ SelfSignCert =New-SelfSignedCertificate… ..
$ certFile =Export-Certificate -ert $ SelfSignCert -FilePath C:\ ps \ export-certname.cer
Import-Certificate -CertStoreLocation Cert:\ LocalMachine \ AuthRoot -FilePath $ certFile.FullName

Khóa công khai này hoặc bản thân tệp chứng chỉ có thể được triển khai cho tất cả các máy tính và máy chủ trong miền Active Directory bằng GPO (Cách triển khai chứng chỉ trên máy tính miền sử dụng GPO?).

Tạo Chứng chỉ Tự ký với Tên Thay thế Chủ đề

Một trong những tính năng hữu ích của lệnh ghép ngắn New-SelfSignedCertificate là khả năng tạo chứng chỉ với một số tên khác nhau, Tên thay thế chủ đề (SAN) .

Lưu ý . Makecert.exe , không giống như lệnh ghép ngắn New-SelfSignedCertificate, không thể tạo chứng chỉ SAN và Wildcard.

Nếu bạn muốn tạo chứng chỉ có nhiều tên, tên đầu tiên của tham số DnsName sẽ được sử dụng làm CN (Tên chung) của chứng chỉ. Ví dụ:hãy tạo chứng chỉ SAN tự ký với các tên sau:

  • Tên chủ đề (CN):adfs1.contoso.com
  • Tên Thay thế Chủ đề (DNS):web_gw.contoso.com
  • Tên Thay thế Chủ đề (DNS):enterprise_reg.contoso.com

Lệnh tạo chứng chỉ sẽ giống như sau:

New-SelfSignedCertificate -DnsName adfs1.contoso.com, web_gw.contoso.com, enterprise_reg.contoso.com -CertStoreLocation cert:\ LocalMachine \ My

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

Ngoài ra, bạn cũng có thể tạo ký tự đại diện chứng chỉ cho toàn bộ không gian tên miền. Để thực hiện, hãy chỉ định * .contoso.com dưới dạng tên máy chủ.

New-SelfSignedCertificate -certstorelocation cert:\ localmachine \ my -dnsname * .contoso.com

Tạo chứng chỉ tự ký để ký mã trên Windows

Trong PoweShell 3.0, lệnh ghép ngắn New-SelfSifgnedCertificate chỉ tạo chứng chỉ SSL không thể được sử dụng để ký trình điều khiển, ứng dụng hoặc mã tập lệnh (không giống như các chứng chỉ được tạo bởi tiện ích MakeCert).

Trong PowerShell phiên bản 5.0 trở lên, phiên bản mới của lệnh ghép ngắn New-SelfSifgnedCertificate hiện có thể được sử dụng để phát hành Ký mã chứng chỉ.

Để tạo chứng chỉ ký mã ứng dụng tự ký, hãy chạy lệnh:

$ cert =New-SelfSignedCertificate -Subject "My Code Signing Certificate" -Type CodeSignedCert -CertStoreLocation cert:\ LocalMachine \ My

Giờ đây, bạn có thể ký Tập lệnh PowerShell của mình bằng chứng chỉ tự ký:

Set-AuthenticodeSignature -FilePath C:\ PS \ my_posh_script.ps1 -Certificate $ cert

Nếu bạn đang nhận được một UnknownError cảnh báo khi thực thi lệnh, điều này có nghĩa là chứng chỉ không được tin cậy vì nó nằm trong kho lưu trữ chứng chỉ cá nhân của người dùng.

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

Bạn cần phải di chuyển nó vào kho lưu trữ Chứng chỉ gốc đáng tin cậy (đừng quên quét định kỳ kho lưu trữ gốc chứng chỉ Windows để tìm các chứng chỉ đáng tin cậy và đáng ngờ cũng như cập nhật danh sách các chứng chỉ gốc đáng tin cậy).

Move-Item -Path $ cert.PSPath -Destination "Cert:\ CurrentUser \ Root"

Sau đó, bạn có thể ký tập lệnh PowerShell của mình bằng chứng chỉ tự ký này.

Sử dụng Chứng chỉ SSL tự ký SHA-256 trong IIS trên Windows Server IIS

Xin lưu ý rằng khi tạo chứng chỉ tự ký cho IIS thông qua bảng điều khiển Trình quản lý thông tin Internet ( Tạo chứng chỉ tự ký mục menu hành động), chứng chỉ SSL được tạo bằng thuật toán mã hóa SHA-1. Các chứng chỉ như vậy được nhiều trình duyệt coi là không đáng tin cậy và không thể được sử dụng để thiết lập kết nối an toàn (hoặc bạn có thể thấy các lỗi SSL khác). Lệnh ghép ngắn New-SelfSignedCertificate cho phép bạn tạo một loại chứng chỉ phổ biến hơn bằng cách sử dụng thuật toán mã hóa SHA-256.

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

Bạn có thể liên kết chứng chỉ SHA-256 tự ký được tạo bằng PowerShell với trang IIS trên Windows Server. Nếu bạn tạo chứng chỉ SSL bằng PowerShell và đưa nó vào kho lưu trữ chứng chỉ của máy tính, chứng chỉ này sẽ tự động có sẵn trên các trang web IIS.

Làm cách nào để tạo chứng chỉ tự ký trong Windows với PowerShell?

Khởi động bảng điều khiển Trình quản lý IIS, chọn trang web của bạn, sau đó trong Liên kết trang web tùy chọn, chọn chứng chỉ bạn đã tạo và lưu các thay đổi của bạn.