NET Core Kestrel部署HTTPS 一個伺服器綁一個證書 一個伺服器綁多個證書
.net core 3.0 網站釋出到centos後,繫結ssl證書,一個伺服器綁一個證書,一個伺服器綁多個證書
開始之前:對於windows伺服器不存在這個問題,在iis中繫結證書是非常簡單的一件事,不是本篇部落格討論的範圍,繫結多個證書一樣
3.0中指定url的方式可以通過在配置檔案中加urls:"http://*:5000"這種方式來指定
釋出到centos的.net core網站我是用 Kestrel託管的。這裡也只針對這一種情況進行描述
1,在program.cs中CreateHostBuilder 替換成如下內容:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .UseKestrel((context, options) => { options.Configure(context.Configuration.GetSection("Kestrel")); }); });
這段程式碼描述的是Kestrel服務的option從配置檔案中讀取
緊接著在startup中增加 app.UseHttpsRedirection(); app.UseHsts();//預設是開啟的,如果是,就不用管它
2,在配置檔案appsettings.json中增加,這是單獨的配置節點 ,其中path,是pfx檔案的位置,password是證書的密碼,在阿里雲申請的證書,下載iis版的就有這兩
"Kestrel": { "Limits": { "MaxRequestBodySize": 9223372036854775807, "MaxRequestBufferSize": 9223372036854775807, "MaxRequestLineSize": 9223372036854775807 }, "Endpoints": { "Https": { "Url": "https://*:443", "Certificate": { "Path": "/home/cert/www.xxxx.pfx", "Password": "xxx" } } } }
這裡的配置項可以參考微軟的文件,基本上大多數需要程式碼顯式指定的配置在appsettings.json中都是可以直接配置的
參考文件地址:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#endpoint-configuration
如果一臺伺服器裡邊只有一個需要ssl證書的網站,那麼到這裡,問題就解決了。
很不幸,我的目標是在一臺伺服器裡邊使用兩個ssl證書,分別對兩個網站做ssl傳輸加密,在查過微軟的部分文件後,沒有找到相關的解決方案,反而是找到了nginx。在linux用nginx可以解決一臺伺服器繫結兩個ssl的問題
首先是安裝:yum install nginx,一路y,安裝完畢後,nginx的主配置檔案是 /etc/nginx/nginx.conf 直接修改這個檔案,分別對N個需要ssl的站點進行配置,如下,監聽埠都是443,區別是server_name ,根據需要配置的域名,分別寫對應的server_name,
加粗部分是需要特別關注的,pem,和key這兩 如果是在阿里雲申請的ssl,下載的時候選擇 nginx版的,就包含下邊需要的兩檔案,可以放到任意位置,這裡填寫的是這兩檔案的路徑,location裡邊的內容是轉發的本地埠對應的就是域名對應的子網站。子網站必須是釋出了的,可訪問的站點,另外需要特別注意一下子網站不需要任何證書,只需要可以訪問即可
server { listen 443; server_name serverName1.com; ssl on; root '/'; ssl_certificate 'xxxx.pem'; ssl_certificate_key 'xxxx.key'; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers PROFILE=SYSTEM; ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; location / { proxy_pass http://127.0.0.1:5000; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
server { listen 443; server_name serverName2.com; ssl on; root '/'; ssl_certificate 'xxxx.pem'; ssl_certificate_key 'xxxx.key'; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers PROFILE=SYSTEM; ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; location / { proxy_pass http://127.0.0.1:5001; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
然後啟動nginx服務 systemctl restart nginx.service .如果配置檔案寫的有問題,服務會啟動失敗,錯誤日誌位置在nginx.conf中可以找到
服務啟動完畢後,就可以看到效果了