2014-10-21 34 views
8

Tôi hiện đang thiết lập triển khai tự động mới và muốn biết cách đăng ký liên kết https với SNI được bật trên IIS 8 theo lập trình. Trang web đã tồn tại và chứng chỉ SSL đã được cài đặt.Đăng ký https ràng buộc với SNI được bật trong IIS 8 với PowerShell Script

Các PowerShell script có các thông số sau thông qua vào:

  • tên trang web
  • Giấy chứng nhận SSL vân tay
  • miền để ràng buộc

Giả Giấy chứng nhận SSL đã được cài đặt.

Có ai có thể giúp tôi không?

Trả lời

13

Nếu như bạn nói giấy chứng nhận đã được cài đặt và bản sắc bơi ứng dụng có quyền khóa riêng sau đó bạn sẽ có thể đăng ký một liên kết mới như sau:

New-WebBinding -Name $WebsiteName -Protocol "https" -Port 443 -IPAddress $IPAddress -HostHeader $HostHeader -SslFlags $sslFlags 

Tất nhiên, bạn cần đặt các biến trước khi chạy mã này những điều này nên tự giải thích.

Khi thiết lập các giá trị của biến $ sslFlags này nên được đặt theo bảng sau:

0 No SNI 
1 SNI Enabled 
2 Non SNI binding which uses Central Certificate Store. 
3 SNI binding which uses Central Certificate store 

Trong trường hợp của bạn này nên được đặt thành 1 kể từ khi bạn không sử dụng các cửa hàng giấy chứng nhận trung tâm.

Khi bạn đã có liên kết SSL tại chỗ, bạn cần liên kết ràng buộc với chứng chỉ chính xác. Tôi đã tìm thấy thông qua kinh nghiệm rằng cách dễ nhất để làm điều này là sử dụng lệnh netsh.exe. Có thể sử dụng Powershell trực tiếp tuy nhiên sau nhiều giờ điều tra và giải quyết các vấn đề khác nhau tôi thấy netsh chỉ đáng tin cậy hơn.

Cú pháp ở đây phụ thuộc vào cách gắn kết sẽ được thiết lập tuy nhiên nếu bạn đang sử dụng SNI thì bạn sẽ cần cú pháp sau: (đừng lo lắng về appid, điều quan trọng là giá trị là gì)

netsh http add sslcert hostnameport=$($HostHeader):$($Port) certhash=$Thumbprint appid='{4dc3e181-e14b-4a21-b022-59fc669b0914}' certstorename=MY 

Mã này cũng yêu cầu phải đặt các biến. Tiêu đề máy chủ phải là tên DNS mà trang web của bạn bị ràng buộc, cổng rất có thể là 443 và biến $ Thumbprint cần chứa dấu vân tay hoặc mã băm của chứng chỉ mà bạn sẽ sử dụng.Bạn có thể tìm thấy điều này bằng cách sử dụng nhà cung cấp chứng chỉ như trong mã này:

$Thumbprint = (Get-ChildItem -Path cert:\LocalMachine\My | Where-Object {$_.GetNameInfo("SimpleName",$false) -eq "my cert common name"}).Thumbprint 

Hy vọng điều này sẽ giúp, nếu bạn cần thêm trợ giúp, sau đó cập nhật câu hỏi. Tôi đã làm rất nhiều công việc trong lĩnh vực này.

0

Nếu các ràng buộc allready tồn tại nhưng chứng là mất tích (giả sử trang web của bạn sử dụng cổng 443):

cd IIS:\sslbindings 
get-item cert:\certpath\$thumbprint | new-item 0.0.0.0!443 

Để Truy cập IIS PS-Drive, bạn phải nhập các module webadministration.

Nếu các ràng buộc chưa tồn tại, bạn có thể tạo ra nó với

New-WebBinding -Name $siteName -IP "*" -Port 443 -Protocol https 

Trân

3

Nếu bạn không muốn sử dụng Netsh, bạn cũng có thể thêm liên kết SNI (với chỉ số "Yêu cầu tên máy chủ" cờ!) Chỉ sử dụng Powershell.

Đây là phương pháp đơn giản nhất tôi có thể tìm cho IIS8:

# Parameters: 
$WebsiteName = "Your Site Name" # this is the Sites name as displayed in IIS Manager 
$port = 443 # SSL Port, when using SNI most likely the default port 443 
$hostHeader = "www.example.com" # the domain/host-header this binding should listen for 
$thumbprint = "AAABBBCCCDDDEEEFFF000111222333444555666" # the certificate thumbprint 
# Commands: 
New-Item -Path "IIS:\SslBindings\!$port!$hostHeader" -Thumbprint $thumbprint -SSLFlags 1 
New-WebBinding -Name $WebsiteName -Protocol "https" -Port $port -HostHeader $hostHeader -SslFlags 1 

Hy vọng điều này sẽ giúp người! :-)

+1

The (không có giấy tờ) '1' -SSLFlags trên' New-mục 'và bỏ qua địa chỉ IP đã làm điều đó cho tôi. Cảm ơn bạn, nó đã giúp rất nhiều! –

1

Có thực sự là một phương pháp trên đối tượng ràng buộc thêm một SSL mà dường như làm việc tốt hơn so với cả hai tùy chọn ở trên

$Name = '' 
$IP = '' 
$HostHeader = '' 

#ymmv here. if host header doesnt match subject name you need to adjust how you're getting the cert 
$Cert = (gci cert:\LocalMachine\My) | ? { (($_.Subject | SLS '^(?:CN=)(.*?)(?=,)').matches.groups.value[-1]) -eq $HostHeader} 

New-WebBinding -Name $Name -Protocol 'https' -Port 443 -IPAddress $IP -HostHeader $HostHeader -SslFlags 1 
$NewBinding = get-webbinding -hostheader $HostHeader -protocol https 
$NewBinding.AddSSLCertificate("$($cert.getcerthashstring())","MY") 
Các vấn đề liên quan