具有 azurewebsites.net 域的 Identityserver4 - 如何获取 ssl 指纹

2023-12-29

我想在 azurewebsites.net https 上托管身份服务器 4,但我不确定如何找到我的 someapp.azurewebsites.net 子域的 ssl 证书,以便我可以将其用作指纹?是否有可能获得在 azurewebsites.net 子域上的 web 应用程序上运行的 ssl 证书?


使用自签名证书。由于 Identity Server 仅在内部使用证书,因此它们是否由受信任的 CA 签名并不重要,您也不会将它们呈现给其他人。我将签名证书作为序列化机密存储在 Azure Key Vault 中。 Key Vault 非常便宜,但您必须缓存结果,它不适合高流量。

请记住在网站、Function App 或任何其他正在检索值的地方启用托管服务身份,并将它们添加到具有 Secret 读取访问权限的 Key Vault SAS 列表中。

Powershell:创建签名证书

[CmdletBinding()]
param(
    [Parameter(Mandatory=$true)][string]$password = "",
    [Parameter(Mandatory=$true)][string]$rootDomain = ""
)

$cwd = Convert-Path .
$sCerFile = "$cwd\token_signing.cer"
$sPfxFile = "$cwd\token_signing.pfx"
$vCerFile = "$cwd\token_validation.cer"
$vPfxFile = "$cwd\token_validation.pfx"

# abort if files exist
if((Test-Path($sPfxFile)) -or (Test-Path($sCerFile)) -or (Test-Path($vPfxFile)) -or (Test-Path($vCerFile)))
{
    Write-Warning "Failed, token_signing or token_validation files already exist in current directory."
    Exit
}

function Get-NewCert ([string]$name)
{
    New-SelfSignedCertificate `
        -Subject $rootDomain `
        -DnsName $rootDomain `
        -FriendlyName $name `
        -NotBefore (Get-Date) `
        -NotAfter (Get-Date).AddYears(10) `
        -CertStoreLocation "cert:CurrentUser\My" `
        -KeyAlgorithm RSA `
        -KeyLength 4096 `
        -HashAlgorithm SHA256 `
        -KeyUsage DigitalSignature, KeyEncipherment, DataEncipherment `
        -Type Custom,DocumentEncryptionCert `
        -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.1")
}

$securePass = ConvertTo-SecureString -String $password -Force -AsPlainText

# token signing certificate
$cert = Get-NewCert("IdentityServer Token Signing Credentials")
$store = 'Cert:\CurrentUser\My\' + ($cert.ThumbPrint)  
Export-PfxCertificate -Cert $store -FilePath $sPfxFile -Password $securePass
Export-Certificate -Cert $store -FilePath $sCerFile
Write-Host "Token-signing thumbprint: " $cert.Thumbprint

# token validation certificate
$cert =  Get-NewCert("IdentityServer Token Validation Credentials")
$store = 'Cert:\CurrentUser\My\' + ($cert.ThumbPrint)  
Export-PfxCertificate -Cert $store -FilePath $vPfxFile -Password $securePass
Export-Certificate -Cert $store -FilePath $vCerFile
Write-Host "Token-validation thumbprint: " $cert.Thumbprint

Powershell:将证书上传到 Azure Key Vault

[CmdletBinding()]
param(
    [Parameter(Mandatory=$true)][string]$password = "",
    [Parameter(Mandatory=$true)][string]$pfxFilename = "",
    [Parameter(Mandatory=$true)][string]$keyVaultName = "",
    [Parameter(Mandatory=$true)][string]$secretName = ""
)

$cwd = Convert-Path .
$pfxFile = "$cwd\$pfxFilename.pfx"

# abort when file not found
if(!(Test-Path($pfxFile)))
{
    Write-Warning "Failed, $pfxFilename.pfx not found $cwd"
    Exit
}

# force Azure login, if needed
function CheckLogin
{
    $needLogin = $true
    Try 
    {
        $content = Get-AzureRmContext
        if ($content) 
        {
            $needLogin = ([string]::IsNullOrEmpty($content.Account))
        } 
    } 
    Catch 
    {
        if ($_ -like "*Login-AzureRmAccount to login*") 
        {
            $needLogin = $true
        } 
        else 
        {
            throw
        }
    }

    if ($needLogin)
    {
        Login-AzureRmAccount
    }
}

CheckLogin

# load the PFX
$flag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
$coll = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection 
$coll.Import($pfxFile, $password, $flag)

# export to byte array
$type = [System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12
$bytes = $coll.Export($type)

# base64 encode
$base64 = [System.Convert]::ToBase64String($bytes)
$value = ConvertTo-SecureString -String $base64 -AsPlainText –Force

# send it to Azure KeyVault
$type = 'application/x-pkcs12'
Set-AzureKeyVaultSecret -VaultName $keyVaultName -Name $secretName -SecretValue $value -ContentType $type

线程安全 Key Vault 缓存

public class KeyVaultCache
{
    private KeyVaultClient _KeyVaultClient = null;
    public KeyVaultClient KeyVaultClient
    {
        get
        {
            if(_KeyVaultClient is null)
            {
                var provider = new AzureServiceTokenProvider();
                _KeyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(provider.KeyVaultTokenCallback));
            }
            return _KeyVaultClient;
        }
    }

    private ConcurrentDictionary<string, string> SecretsCache = new ConcurrentDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
    public async Task<string> GetCachedSecret(string secretName)
    {
        if(!SecretsCache.ContainsKey(secretName))
        {
            var secretBundle = await KeyVaultClient.GetSecretAsync($"{AzureUris.KeyVaultSecrets}{secretName}").ConfigureAwait(false);
            SecretsCache.TryAdd(secretName, secretBundle.Value);
        }
        return SecretsCache.ContainsKey(secretName) ? SecretsCache[secretName] : string.Empty;
    }
}

检索反序列化证书

public async Task<X509Certificate2> TokenValidationCertificate() => PfxStringToCert(await cache.GetCachedSecret("x509-token-validation"));
public async Task<X509Certificate2> TokenSigningCertificate() => PfxStringToCert(await cache.GetCachedSecret("x509-token-signing"));

private X509Certificate2 PfxStringToCert(string pfx)
{
    var bytes = Convert.FromBase64String(pfx);
    var coll = new X509Certificate2Collection();
    coll.Import(bytes, null, X509KeyStorageFlags.Exportable);
    return coll[0];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有 azurewebsites.net 域的 Identityserver4 - 如何获取 ssl 指纹 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现

随机推荐

  • Azure Service Fabric 有状态服务中的可靠字典对象自动过期

    是否有任何内置方法可以将可靠字典对象的过期时间设置为在特定时间后过期 尝试看看我们是否可以开始使用可靠的集合来存储用户会话对象 无状态服务可以访问有状态服务创建的字典对象吗 抱歉 如果这些都是蹩脚的问题 尝试理解这些概念 Thanks 不
  • 估计面板中​​常见集合成员随时间变化的百分比

    我有一个时间序列面板数据集 其结构如下 有 2 个基金 每个基金在每个时间段都拥有不同的股票 df lt data frame fund id c 1 1 1 1 1 1 1 1 1 2 2 2 2 time Q c 1 1 1 2 2 2
  • 如何模拟 PHPUnit 的 Guzzle 请求

    我有一堂这样的课 class CategoryClient private categories Constructor Retrieves JSON File public function construct Client client
  • Mac OS X 上 cblas.h 的包含路径是什么

    我正在尝试在 Accelerate 框架中使用 blas cblas OS X 10 13 如果有的话 我找到了链接器选项 framework Accelerate 但找不到使 cblas h 找到的编译器选项 我没有使用 Xcode 左右
  • 如何使用java“打开”和“保存”

    我想用java制作一个 打开 和 保存 对话框 我想要的示例如下图所示 Open Save 我该怎么做呢 你想使用一个JFileChooser目的 它将打开并处于模式状态 并阻塞在打开它的线程中 直到您选择一个文件 Open JFileCh
  • scala 中的“:_*”是什么意思? (当使用列表过滤数据帧时)[重复]

    这个问题在这里已经有答案了 当看到一些同事的 Scala Spark 代码时 有时我会遇到他们使用列表来过滤数据帧 如下例所示 val myList List String List 0661 0239 0949 0380 0279 031
  • vscode python 转到符号不起作用

    我刚刚下载了 vscode 1 0 版 我真的很喜欢它 然而 转到符号 似乎不适用于 python 源文件 我尝试安装不同的扩展 但似乎无法正常工作 这不是完全支持吗 我确实在 node js 项目文件夹中尝试过 并且转到符号在那里完美地工
  • LayoutParams 重力不起作用

    我有一个父 LinearLayout 宽度和高度为 MATCH PARENT 我试图用 java 代码找出设置重力和布局重力 LinearLayout l new LinearLayout this l setGravity Gravity
  • 优雅地处理 Hibernate/Spring 事务中的过时数据库连接

    我有一个在测试中运行良好的系统 但现在我已将它们移至生产服务器并准备好切换 我遇到了问题 如果应用程序空闲大约 15 分钟 Spring 事务服务中的数据库连接就会断开 发生这种情况后 第一个访问该应用程序的人会收到此消息 org spri
  • 部署到 Heroku 后引导程序样式丢失

    根据我过去两天的谷歌搜索 我加入了数百 如果不是数千 在部署到 Heroku 时丢失引导程序样式的人 与其他人一样 引导样式在本地计算机上运行良好 但在部署的 Heroku 站点上不存在 我很困惑 我使用的是 Rails 4 2 4 和 r
  • SQL 中的分页 - 性能问题

    我正在尝试使用分页 我在 SO 中得到了完美的链接 https stackoverflow com a 109290 1481690 https stackoverflow com a 109290 1481690 SELECT FROM
  • 如何绘制散点趋势线?

    我想在 matplot 上画一条散点趋势线 我怎样才能做到这一点 Python import pandas as pd import matplotlib pyplot as plt csv pd read csv tmp test csv
  • 特权指令、陷阱和系统调用之间的关系

    我试图了解虚拟机监视器 VMM 如何虚拟化 CPU 我现在的理解是 当CPU处于用户模式时 当即将执行特权指令时 CPU会发出保护故障中断 在 C 等高级语言中 特权指令被包装在系统调用中 例如 当应用程序需要当前日期和时间 与I O设备交
  • “没有为此目标安装系统映像”Xamarin AVD Manager

    每当我为 Google API 选择目标时 它都会告诉我没有可用的系统映像 我已经完全删除并重新安装了 SDK 管理器中的每个可用选项 对于我尝试使用的 API 级别 我安装了所有可用的映像 我还尝试按照另一个问题的答案的建议将图像复制到默
  • 如何更改 WordPress 中单个页面的 URL?

    我使用 WordPress 作为 CMS 我开发了一个自定义插件来显示经销商信息 下面是网址 91是用于从数据库获取数据的经销商 ID 我可以更改为如下网址吗 http example nl dealer info dealer infor
  • 无法让 ToMany 在 Tastypie 中工作

    我正在关注 Tastypie 文档 但发现自己完全陷入困境 我有以下内容 API class ProjectResource ModelResource milestones fields ToManyField ProjectTracke
  • 路径控制器未找到或未实现 IController

    我有一个带有语言选择的 MVC4 项目 en nl fr de 1 个主要部分 About 通用 用于菜单 Contact Faq Home 以及3个领域 Admin 顾客 Shop 在每个区域我至少有一个控制器 例如在管理中我有控制器ov
  • SQL:查找每个类别中评分最高的文章

    我有一张桌子articles 有字段id rating 1 10 的整数 以及category id 一个整数表示它属于哪个类别 如何在一个 MySQL 查询中找到每个类别中评分最高的单篇文章 ORDER BY and LIMIT我想 这通
  • Java(匿名或非匿名)内部类:使用它们好吗?

    在我的一些项目和一些书中据说not使用内部类 匿名或非匿名 静态或非静态 除非在某些受限条件下 例如EventListeners or Runnables 是最佳实践 它们甚至在我的第一个行业项目中被 禁止 这真的是最佳实践吗 为什么 我不
  • 具有 azurewebsites.net 域的 Identityserver4 - 如何获取 ssl 指纹

    我想在 azurewebsites net https 上托管身份服务器 4 但我不确定如何找到我的 someapp azurewebsites net 子域的 ssl 证书 以便我可以将其用作指纹 是否有可能获得在 azurewebsit