背景

项目中后台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文件,导入即可!

应用证书

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

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即可。

Xamarin Android使用自签名证书的更多相关文章

  1. 7.xamarin.android 发布签名与控制apk大小

    概述 做了xamarin android 后大家想打包一个apk,发布给其他人使用本章我们将带领大家如何打包签名一个apk. 打包 对于VS2017 或者是VS MAC来说打包一个APK非常简单. 首 ...

  2. 修改Android签名证书keystore的密码、别名alias以及别名密码

    Eclipse ADT的Custom debug keystore自定义调试证书的时候,Android应用开发接入各种SDK时会发现,有很多SDK是需要靠package name和keystore的指 ...

  3. cmd命令生成android签名证书

    cmd命令生成android签名证书,有空在写一篇eclipse导出带签名的apk,这里面包括生成新的签名.现在还是讲讲在cmd怎么操作生成签名证书. 1.dos下进入JDK的bin目录 运行如下命令 ...

  4. 百度地图 v2.1.3申请KEY Android签名证书的sha1值

    今天研究下百度地图,没想到第一步就遇到了问题,升级2.13后,需要Android签名证书的sha1值,网上看了下,发现遇到这问题的童鞋还是很多,官方说的两种方法: 第一种:使用keytool keyt ...

  5. Android 获取签名证书的具体信息(Eclipse和Android studio通用)

    今天要用到签名证书的MD5,可是这个仅仅有在第一次生成的时候我看到了,这可怎么办呢,幸亏我们有google,我们执行以下的命令就OK了. keytool -list -v -keystore 签名证书 ...

  6. Android平台签名证书(.keystore)生成指南

    来源:https://ask.dcloud.net.cn/article/35777 Android平台签名证书(.keystore)生成指南 分类:HTML5+ Android证书 Android平 ...

  7. nginx配置https及Android客户端访问自签名证书

    前一篇随笔通过keytool生成keystore并为tomcat配置https,这篇随笔记录如何给nginx配置https.如果nginx已配置https,则tomcat就不需要再配置https了.通 ...

  8. APP并非一个人在战斗,还有API—Xamarin.Android回忆录

    前言 一般来说,一个客户端APP并非独立存在的,很多时候需要与服务器交互.大体可分为两方面的数据,常规字符串数据和文件数据,因为这两种数据很可能传输方式不一样,比如字符串之类的数据,使用HTTP协议, ...

  9. android系统release签名

    转自:http://blog.csdn.net/yangkai6121/article/details/38682321 为什么需要给Android系统签个名才能进行CTS认证呢?原来我们通过make ...

随机推荐

  1. Linux centos 安装 JDK 8

    一.下载JDK 官方下载 # 下载地址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151. ...

  2. Flink的CheckPoint

    Checkpoint checkpoint是Flink容错的核心机制.它可以定期的将各个Operator处理的数据进行快照存储(Snapshot). 如果Flink程序出现宕机,可以重新从这些快照中恢 ...

  3. ES6对象扩展——扩展运算符

    1.复制对象:使用扩展运算符复制对象时是浅拷贝 //复制对象:使用扩展运算符复制对象时是浅拷贝 const obj1 = { a:1, b:2, d:{ aa:1, bb:2 } } const ob ...

  4. ASP截取字符 截取字符之间的字符

    ASP截取字符:MID函数Mid(变量或字串符,开始字节, 结尾字节(可不填)) InStrRev(变量, "字串符")  最后出现位置InStr(变量, "字串符&qu ...

  5. Ansible部署及配置介绍

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 Ansible的安装部署 1.1 PIP方式 1.2 YUM方式 二 Ansi ...

  6. Python习题集(八)

    每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! https://www.cnblogs.com/poloyy/category/1676599.html 题目 要求:判断数组元素 ...

  7. vivo营销自动化技术解密|开篇

    一.营销自动化概览 1.1. 什么是营销自动化 营销自动化是指专门为营销部门或组织设计的软件平台和技术,可以更有效地在线进行多渠道营销并使重复性任务自动化.营销部门和销售人员通过制定任务和流程的操作标 ...

  8. MySQL高级语句(一)

    一.MySQL高级进阶SQL 语句 1.SELECT 2.DISTINCT 3.WHERE  4.AND.OR 5.IN 6.BETWEEN 7.通配符.LIKE 8.ORDER BY 9.| | 连 ...

  9. leetcode-螺旋矩阵(指针)

    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2 ...

  10. python中字符串的各种方法

     图片来源见水印,一个学python的公众号