探究数字证书 公钥 私钥在IdentityServer4中和ADFS+Sharepoint中的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaomifengmaidi1/article/details/83623898
#Linux系统生成证书:(推荐使用)
sudo yum install openssl (CentOS)

#生成私钥文件
openssl genrsa -out idsrv4.key 2048


#创建证书签名请求文件 CSR(Certificate Signing Request),用于提交给证书颁发机构(即 Certification Authority (CA))即对证书签名,申请一个数字证书。
openssl req -new -key idsrv4.key -out idsrv4.csr 

#生成自签名证书(证书颁发机构(CA)签名后的证书,因为自己做测试那么证书的申请机构和颁发机构都是自己,crt 证书包含持有人的信息,持有人的公钥,以及签署者的签名等信息。当用户安装了证书之后,便意味着信任了这份证书,同时拥有了其中的公钥。)
openssl x509 -req -days 365 -in idsrv4.csr -signkey idsrv4.key -out idsrv4.crt (包含公钥)

#自签名证书与私匙合并成一个文件(注:.pfx中可以加密码保护,所以相对安全些)
openssl pkcs12 -export -in idsrv4.crt -inkey idsrv4.key -out idsrv4.pfx (注:在生成的过程中会让我们输入Export Password)

或者

openssl req -newkey rsa:2048 -nodes -keyout idsrv4.key -x509 -days 365 -out idsrv4.cer
openssl pkcs12 -export -in idsrv4.cer -inkey idsrv4.key -out idsrv4.pfx

都可以生成证书

只有pfx格式的数字证书是包含有私钥的,cer格式的数字证书里面只有公钥没有私钥。

所以在IdentityServer4中

 services.AddIdentityServer()
            //.AddDeveloperSigningCredential()
            .AddSigningCredential(new X509Certificate2(Path.Combine(basePath,
                Configuration["Certificates:CerPath"]),
                Configuration["Certificates:Password"]))

这里的证书是pfx的证书,so 通过私钥来签名,在访问API的时候 ,通过这个证书来获取公钥进行验签。

而在SharePoint ADFS中

可以看到

里面的令牌签名是cer的 ,cer意味着只有公钥,上面还有个令牌解密,应该是私钥,然后把这个公钥颁给了SharePoint

在SharePoint 服务器上,以管理员身份启动SharePoint 命令行管理程序:

序号

命令说明

执行命令

1

    

设置ADFS签名证书变量,此处Tokensign.cer证书是从ADFS服务器上导出的令牌签名证书

$cert = New-Object   System.Security.Cryptography.x509Certificates.x509Certificate2 (“\\ad-test\Software\Tool\Tokensign.cer")     

2

    

将令牌签名证书导入到SharePoint的信任区

New-SPTrustedRootAuthority -Name "Token Signing Cert"   -Certificate $cert

3

设置UPN声明变量

$upnClaimMap = New-SPClaimTypeMapping   -IncomingClaimType    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"  -IncomingClaimTypeDisplayName   "UPN" -SameAsIncoming

设置通用名声明变量

$cnNameMap = New-SPClaimTypeMapping -IncomingClaimType    "http://schemas.xmlsoap.org/claims/CommonName"  -IncomingClaimTypeDisplayName "Display   Name" –SameAsIncoming

4

设置“realm”声明变量,此处一定要与ADFS信赖方信任配置的“信赖方标识符”一致,包括大小写

$realm =  “urn:Dev2:SP2013”

5

设置登录URL变量,此处为ADFS登录的页URL

$signInURL = “https://adfs.****.com/adfs/ls

6

$ap = New-SPTrustedIdentityTokenIssuer -Name "ADFS Web SSO for   SharePoint" -description “ADFS Web SSO for SharePoint"  -realm $realm  -ImportTrustCertificate $cert  -ClaimsMappings $upnClaimMap, $cnNameMap   -SignInURL $signInURL -IdentifierClaim $upnClaimMap.InputClaimType

7

    

Get-SPTrustedIdentityTokenIssuer

其实原理都是一样的,一个ADFS将token 用私钥签名 ,sharepoint 中的公钥验签。

猜你喜欢

转载自blog.csdn.net/xiaomifengmaidi1/article/details/83623898