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

#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)

或者html

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

均可以生成证书node

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

因此在IdentityServer4中服务器

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

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

而在SharePoint ADFS中ide

能够看到测试

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

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

 

序号命令行

命令说明

执行命令

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 中的公钥验签。