• Xamarin Android使用自签名证书


    背景

    项目中后台web服务部署成https服务时,需要使用SSL证书,如果我们不使用公共的CA时,怎么办?

    不仅如此,因为是小项目,App应用主要是小范围使用,此时只有IP地址,根本没有域名,怎么办?

    下面就给出我的解决方案!

    环境

    • 后台服务

      IIS托管的Asp .net web api 服务,使用https协议

    • App及开发环境

      Xamarin.Forms、VS2019

    • OpenSSL

      版本为OpenSSL 1.1.1g,最好版本要大于等于这里列出的版本,因为这样才可以直接在命令行中设置subjectAltName 扩展信息,此处很关键,下面后提到!

    方法

    生成证书

    以下出现的10.0.20.11地址都要替换成实际项目的web服务器地址

    使用openssl执行以下命令生成x509格式的ca证书

     openssl req -x509 -nodes -days 365 -addext "subjectAltName = IP:10.0.20.11" -newkey rsa:2048 -keyout test.key -out test.cer 
    

    此处-addext "subjectAltName = IP:10.0.20.11" 这个参数很重要,因为我们域名,在app中我们直接通过服务端ip地址访问接口地址的,如果此时没有这个subjectAltName 这个扩展配置,Android在ca证书认证的时候,会提示Hostname 10.0.20.11 was not verified错误。

    然后属性证书生成的必要信息:

    # openssl req -x509 -nodes -days 365 -addext "subjectAltName = IP:10.0.20.11" -newkey rsa:2048 -keyout test.key -out test.cer     
    Generating a RSA private key                                                                                                      
    .......................................................+++++                                                                      
    ......+++++                                                                                                                       
    writing new private key to 'test.key'                                                                                             
    -----                                                                                                                             
    You are about to be asked to enter information that will be incorporated                                                          
    into your certificate request.                                                                                                    
    What you are about to enter is what is called a Distinguished Name or a DN.                                                       
    There are quite a few fields but you can leave some blank                                                                         
    For some fields there will be a default value,                                                                                    
    If you enter '.', the field will be left blank.                                                                                   
    -----                                                                                                                             
    Country Name (2 letter code) [AU]:CN                                                                                              
    State or Province Name (full name) [Some-State]:JS                                                                                
    Locality Name (eg, city) []:WX                                                                                                    
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Test                                                                   
    Organizational Unit Name (eg, section) []:Test                                                                                    
    Common Name (e.g. server FQDN or YOUR name) []:10.0.20.11                                                                         
    Email Address []:                                                                                                                 
    

    其中 Common Name (e.g. server FQDN or YOUR name) []:10.0.20.11 后面填写的是服务端的IP地址(如果是域名,就是公司的域名)

    此时会在当前目录下生成对应的key和cer证书文件

    生成pfx文件

    pfx是带有私钥的数字证书,可以通过IIS管理器中导入,用作服务器证书。

    执行以下命令:

    # openssl.exe pkcs12 -export -in test.cer -inkey test.key -out test.pfx
    Enter Export Password:
    Verifying - Enter Export Password:
    
    

    其中 test.cer 是数字证书,包含公钥等信息,test.key是私钥,两个合并打包进test.pfx中。

    如果需要对pfx加密,可以输入密码,此处未应用密码!

    导入服务端证书

    打开IIS管理器,打开服务器证书,选择导入,选择前面创建好的pfx文件,导入即可!

    image-20210929162907845

    应用证书

    添加网站,绑定类型选择https,在ssl证书中下拉选择前面导入的证书即可

    image-20210929163339899

    Android项目配置

    把数字证书添加未Android资源

    在Resource文件下添加raw文件夹,添加csr文件,并在属性中把生成操作选择为AndroidResource

    把证书配置为受信的证书

    network_security_config.xml文件配置如下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
      <domain-config>
        <!-- Release port -->
        <domain includeSubdomains="true">10.0.20.11</domain>
        <trust-anchors>
          <certificates src="@raw/test"/>
        </trust-anchors>
      </domain-config>
    </network-security-config>
    

    trust-anchors中的certificates引用上传的证书,这里是test.cer,domain中添加服务端IP即可。

  • 相关阅读:
    springboot 无法访问静态资源
    webrtc源码阅读理解一
    c++ include的顺序重要吗?
    简说yuv
    i420 转 nv21
    ffmpeg mp4 转 yuv、 y4m转yuv、mp4转y4m && ffplay 播放y4m、yuv
    mysql 查询json字符串条件
    Webpack4.X中sourcemap的配置 详解
    webpack如何打包生成的map文件不生效?
    vue中使用setInterval,移入暂停,移出继续
  • 原文地址:https://www.cnblogs.com/liuww/p/15360098.html
Copyright © 2020-2023  润新知