IdentityServer4组件token类型如果选择jwt,则需要RS256算法生成非对称签名,私钥服务端保留,公钥则通过IS4公钥接口对外提供。默认情况下,IS4提供了AddDeveloperSigningCredential方法作为开发环境的生成测试RSA文件,提供私钥和公钥。如果正式一点的话,需要我们自己生成一个加密证书。OpenSSL就是这样的一个工具。
OpenSSL制作证书
- 下载OpenSSL,地址:https://i-beta.cnblogs.com/posts/edit;postId=12531161。安装完成后,通过CMD,cd 到 bin目录下
- 执行申请证书命令,中间会让你输入一堆国家、公司、邮箱等相关信息。命令完成后会在当前目录下生成cas.clientservice.cer、cas.clientservice.key两个文件。.cer即为证书,.key是密钥
./openssl req -newkey rsa:2048 -nodes -keyout cas.clientservice.key -x509 -days 3650 -out cas.clientservice.cer
- 我们需要将证书和Key生成一个文件。执行以下命令。中间会让你输一个密码,需要记下来。完成后在生成ids4.pfx证书文件,这个就是IS4需要的证书了
./openssl pkcs12 -export -in cas.clientservice.cer -inkey cas.clientservice.key -out ids4.pfx
IdentityServer4中使用证书
IS4提供了AddSigningCredential扩展方法加入自定义证书。构造证书类 X509Certificate2 代码如下:
public static X509Certificate2 GetCertificate(IConfiguration configuration) { var certFullPath = Path.Combine(configuration["IdentityServer:Certificates:CerPath"]); return new X509Certificate2(certFullPath, configuration["IdentityServer:Certificates:Password"]); }
扩展知识
各种签名证书分类: https://www.cnblogs.com/xq1314/archive/2017/12/05/7987216.html
私钥、公钥和证书的关系:https://blog.csdn.net/qq_34115899/article/details/81298284