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