- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 this question 的后续.
我使用以下脚本生成并信任了自签名证书:
#create a SAN cert for both host.docker.internal and localhost
#$cert = New-SelfSignedCertificate -DnsName "host.docker.internal", "localhost" -CertStoreLocation "cert:\LocalMachine\Root"
# does not work: New-SelfSignedCertificate : A new certificate can only be installed into MY store.
$cert = New-SelfSignedCertificate -DnsName "host.docker.internal", "localhost" -CertStoreLocation cert:\localmachine\my
#export it for docker container to pick up later
$password = ConvertTo-SecureString -String "password_here" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath "$env:USERPROFILE\.aspnet\https\aspnetapp.pfx" -Password $password
# trust it on your host machine
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store [System.Security.Cryptography.X509Certificates.StoreName]::Root,"LocalMachine"
$store.Open("ReadWrite")
$store.Add($cert)
$store.Close()
访问时
https://host.docker.internal:5500/.well-known/openid-configuration
和
https://localhost:5500/.well-known/openid-configuration
在主机上,它按预期工作(证书没问题)。
web_api | System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://host.docker.internal:5500/.well-known/openid-configuration'.
web_api | ---> System.IO.IOException: IDX20804: Unable to retrieve document from: 'https://host.docker.internal:5500/.well-known/openid-configuration'.
web_api | ---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
web_api | ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
web_api | at System.Net.Security.SslStream.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, ExceptionDispatchInfo exception)
API 的 docker-compose 文件如下(仅相关部分):
web.api:
image: web_api_image
build:
context: .
dockerfile: ProjectApi/Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=ContainerDev
container_name: web_api
ports:
- "5600:80"
networks:
- backend
- data_layer
depends_on:
- identity.server
- mssqlserver
- web.cache
identity.server:
image: identity_server_image
build:
context: .
dockerfile: MyProject.IdentityServer/Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=ContainerDev
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_Kestrel__Certificates__Default__Password=password_here
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
volumes:
- ~/.aspnet/https:/https:ro
container_name: identity_server
ports:
- "5500:443"
- "5501:80"
networks:
- backend
- data_layer
depends_on:
- mssqlserver
我怎样才能使这项工作?
/// <summary>
/// configures authentication and authorization
/// </summary>
/// <param name="services"></param>
/// <param name="configuration"></param>
public static void ConfigureSecurity(this IServiceCollection services, IConfiguration configuration)
{
string baseUrl = configuration.GetSection("Idam").GetValue<string>("BaseUrl");
Console.WriteLine($"Authentication server base URL = {baseUrl}");
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(o =>
{
o.MetadataAddress = $"{baseUrl}/.well-known/openid-configuration";
o.Authority = "dev_identity_server";
o.Audience = configuration.GetSection("Idam").GetValue<string>("Audience");
o.RequireHttpsMetadata = false;
});
services.AddAuthorization();
}
public void ConfigureServices(IServiceCollection services)
{
string connectionStr = Configuration.GetConnectionString("Default");
Console.WriteLine($"[Identity server] Connection string = {connectionStr}");
services.AddDbContext<AppIdentityDbContext>(options => options.UseSqlServer(connectionStr));
services.AddTransient<AppIdentityDbContextSeedData>();
services.AddIdentity<AppUser, IdentityRole>()
.AddEntityFrameworkStores<AppIdentityDbContext>()
.AddDefaultTokenProviders();
services.AddIdentityServer(act =>
{
act.IssuerUri = "dev_identity_server";
})
.AddDeveloperSigningCredential()
// this adds the operational data from DB (codes, tokens, consents)
.AddOperationalStore(options =>
{
options.ConfigureDbContext = builder => builder.UseSqlServer(Configuration.GetConnectionString("Default"));
// this enables automatic token cleanup. this is optional.
options.EnableTokenCleanup = true;
options.TokenCleanupInterval = 30; // interval in seconds
})
//.AddInMemoryPersistedGrants()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients(Configuration))
.AddAspNetIdentity<AppUser>();
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"\\UNC-PATH"));
services.AddTransient<IProfileService, IdentityClaimsProfileService>();
services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()));
services.AddMvc(options =>
{
options.EnableEndpointRouting = false;
}).SetCompatibilityVersion(CompatibilityVersion.Latest);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public static void Configure(IApplicationBuilder app, IWebHostEnvironment env,
ILoggerFactory loggerFactory, AppIdentityDbContextSeedData seeder)
{
seeder.SeedTestUsers();
IdentityModelEventSource.ShowPII = true;
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseExceptionHandler(builder =>
{
builder.Run(async context =>
{
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
var error = context.Features.Get<IExceptionHandlerFeature>();
if (error != null)
{
context.Response.AddApplicationError(error.Error.Message);
await context.Response.WriteAsync(error.Error.Message).ConfigureAwait(false);
}
});
});
// app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCors("AllowAll");
app.UseIdentityServer();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
最佳答案
几次尝试后,我放弃了让 docker 容器信任由 New-SelfSignedCertificate
生成的证书的尝试。 (您可以尝试让它工作 - 概念完全相同,只是证书在某种程度上有所不同)。然而,我确实在 OpenSSL 上取得了成功:
$certPass = "password_here"
$certSubj = "host.docker.internal"
$certAltNames = "DNS:localhost,DNS:host.docker.internal,DNS:identity_server" # i believe you can also add individual IP addresses here like so: IP:127.0.0.1
$opensslPath="path\to\openssl\binaries" #assuming you can download OpenSSL, I believe no installation is necessary
$workDir="path\to\your\project" # i assume this will be your solution root
$dockerDir=Join-Path $workDir "ProjectApi" #you probably want to check if my assumptions about your folder structure are correct
#generate a self-signed cert with multiple domains
Start-Process -NoNewWindow -Wait -FilePath (Join-Path $opensslPath "openssl.exe") -ArgumentList "req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ",
(Join-Path $workDir aspnetapp.key),
"-out", (Join-Path $dockerDir aspnetapp.crt),
"-subj `"/CN=$certSubj`" -addext `"subjectAltName=$certAltNames`""
# this time round we convert PEM format into PKCS#12 (aka PFX) so .net core app picks it up
Start-Process -NoNewWindow -Wait -FilePath (Join-Path $opensslPath "openssl.exe") -ArgumentList "pkcs12 -export -in ",
(Join-Path $dockerDir aspnetapp.crt),
"-inkey ", (Join-Path $workDir aspnetapp.key),
"-out ", (Join-Path $workDir aspnetapp.pfx),
"-passout pass:$certPass"
$password = ConvertTo-SecureString -String $certPass -Force -AsPlainText
$cert = Get-PfxCertificate -FilePath (Join-Path $workDir "aspnetapp.pfx") -Password $password
# and still, trust it on your host machine
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store [System.Security.Cryptography.X509Certificates.StoreName]::Root,"LocalMachine"
$store.Open("ReadWrite")
$store.Add($cert)
$store.Close()
wget
但快速检查表明 Microsoft 镜像将支持相同的构建步骤:
FROM ubuntu:14.04
RUN apt-get update \
&& apt-get install -y wget \
&& rm -rf /var/lib/apt/lists/*
USER root
###### you probably only care about the following three lines
ADD ./aspnetapp.crt /usr/local/share/ca-certificates/asp_dev/
RUN chmod -R 644 /usr/local/share/ca-certificates/asp_dev/
RUN update-ca-certificates --fresh
######
ENTRYPOINT tail -f /dev/null
docker-compose
和你的差不多。为了完整起见,我将在此处列出:
version: '3'
services:
web_api:
build: ./ProjectApi
container_name: web_api
ports:
- "5600:80"
depends_on:
- identity_server
identity_server:
image: mcr.microsoft.com/dotnet/core/samples:aspnetapp
environment:
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_Kestrel__Certificates__Default__Password=password_here
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
volumes:
- ~/.aspnet/https/:/https/:ro
container_name: identity_server
ports:
- "5500:443"
- "5501:80"
wget https://identity_server.docker.internal
命令行。
关于docker - ASP.NET Core Web API 客户端不信任 Identity Server 实例使用的自签名证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62065739/
从今天早上开始,我的证书在 Android 上不再受信任,然后我的应用程序无法再连接: Catch exception while startHandshake: javax.net.ssl.SSL
我想知道是否有人有解决方案允许从usize类型(从访问数组索引或获取矢量长度中获得)的隐式转换为i32?可能吗? 当然,我假设矢量长度和数组范围在i32限制之内。 最佳答案 您可以在函数参数中使用 T
我用 mitmproxy从离开我们网络的出站 AS2 (HTTP) 请求中收集情报。架构是这样的: Mendelson AS2 ➡ mitmproxy ➡ partner AS2 server
我有几个实例,我的 Javascript 代码似乎在泄漏内存,但我不确定我应该从垃圾收集器那里得到什么。 例如 var = new Object() 在 Firefox 中运行的间隔计时器函数似乎会随
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwa
我想我在这里没有想法。 我正在尝试使用具有 ssl 证书的 java 中的 Web 服务。 我创建了一个 keystore 文件,并在其中添加了证书。该文件位于我的项目文件夹中。 我使用以下方式导入它
我在/etc/pki/ca-trust/source/anchors 中添加了一个 crt,这样服务器证书就可以被 ssl 客户端信任。所以,例如,当我 curl https://证书自动受信任。 有
我搜索了很多帖子,但找不到任何解决方案或问题的答案。如何从安装了中间证书的站点下载文件?使用 DownloadManager 时,出现错误“java.security.cert.CertPathVal
我无法使用 SSL: 我从服务器下载了证书,它运行良好。 我还使用本文中的代码将 myCertificate.cert 添加到我的 iPhone 钥匙串(keychain)线程:Importing a
首先,我知道信任所有证书可能存在的风险,但是出于某些测试目的,我必须实现这一点。 如何强制我的客户信任所有证书?我正在使用 javax.websocket 来实现 我所做的只是像连接到 ws 一样 W
信任 $_SERVER['REMOTE_ADDR'] 是否安全?可以通过更改请求的 header 或类似的东西来代替吗? 这样写安全吗? if ($_SERVER['REMOTE_ADDR'] ==
我有一个产品由内部 ASP.NET/MVC 网站组成,所有网站都使用 WIF 通过自定义 STS/IdP 服务启用 SSO。我们现在有一个新的合作伙伴站点托管在我们网络之外的另一个域上,并且希望在用户
我在我开始构建的 Rails 应用程序上使用 sendgrid。我处于测试模式,主要做本地工作,但我发送了很多电子邮件来检查我的流程或电子邮件布局。 我用来接收电子邮件的电子邮件是在 Gmail 上。
我一直在研究我得到的原因: java.util.concurrent.ExecutionException: javax.net.ssl.SSLException: Received fatal al
我有 SVN 服务器通过 HTTPS 在 Apache 下运行 这是我的服务器端配置,“/etc/httpd/conf.d/subversion.conf”: SSLRequireSSL S
我有一个用于开发测试的自签名证书。我已将它添加到证书管理器中的“受信任的根证书颁发机构”文件夹下,当在 IE 或 Chrome 下访问该站点时,它被认为是有效的(在 Firefox 下它不喜欢它是自签
我遇到了 android 4 设备的问题,这些设备在连接到服务器时收到以下异常: java.security.cert.CertPathValidatorException: Trust anchor
我是一个安卓新手。这个问题已经被问过很多次了,但我已经解决了这里几乎所有的问题。 我正在尝试在 Node.Js 服务器(使用 express)和 Android 上的 Volley 上使用自签名证书。
我想使用 WebClient 从安全服务器检索 JSON 文件,但我的 Windows Phone 8 不允许我这样做,因为如果 WebCLient 不信任 SSL 证书,它会抛出异常。 问题在于它不
我正在编写服务器以支持适用于 iOS 和 Android 的基于位置的应用程序。该应用程序要求我们验证用户的身份及其位置。我知道如何做前者,但不知道后者。 是否可以验证客户端发送给我的纬度/经度实际上
我是一名优秀的程序员,十分优秀!