Windows下OpenSSL创建CA证书以及客户端和服务器端证书

打开命令行工具,转到安装目录bin文件夹,
$ mkdir -p ./demoCA/{private,newcerts}
$ touch ./demoCA/index.txt
$ echo 01 > ./demoCA/serial
产生的目录结构如下:
`-- demoCA/
    |-- index.txt
    |-- newcerts/
    |-- private/
    `-- serial
 然后执行下面的命令。
创建根证书 
openssl rand -out private/.rand 1000
openssl rgenrsa -aes256 -out private/sample-key.pem 2048
openssl rreq -new -key private/sample-key.pem -out private/sample.csr -subj "/C=CN/ST=JiangSu/L=NanJing/O=NanJing Sample Technology Group Co.,LTD./OU=Sample"
openssl x509 -req -days 825 -sha1 -extensions v3_ca -signkey private/sample-key.pem -in private/sample.csr -out certs/sample.cer
openssl pkcs12 -export -clcerts -in certs/sample.cer -inkey private/sample-key.pem -out certs/sample.p12
----------------------------------------------------------------------------*/
创建服务端证书
openssl genrsa -aes256 -out private/server.key.pem 2048
openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=JiangSu/L=NanJing/O=NanJing Sample Technology Group Co.,LTD./OU=Sample/CN=127.0.0.1"
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certs/sample.cer -CAkey private/sample-key.pem -CAserial sample.srl -CAcreateserial -in private/server.csr -out certs/server.cer
openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12 
----------------------------------------------------------------------------*/
创建客户端证书
openssl genrsa -aes256 -out private/client.key.pem 2048 
openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=JiangSu/L=NanJing/O=NanJing Sample Technology Group Co.,LTD./OU=Sample/CN=127.0.0.1"
openssl ca -days 3650 -in private/client.csr -out certs/client.cer -cert certs/sample.cer -keyfile private/sample-key.pem /*win7这句会报错,win10下没问题,郁闷,cd到bin文件夹下,执行下面语句才通过。*/
openssl ca -days 3650 -in democa/private/client.csr -out democa/certs/client.cer -cert democa/certs/sample.cer -keyfile democa/private/sample-key.pem -config ../openssl.cnf
openssl pkcs12 -export -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12


参考文件:

由于实验需要,需要手动制作CA证书以及客户端和服务器端证书,总结如下:

最近两天,查阅了一些关于创建证书的资料,发现网上很多介绍并不是很完整,不具有完全的可操作性。
创建证书,我目前知道的大概这么几种:
1.keytool
   不能创建CA证书
2.Sybase ASA自带的createcert.exe
   好像不能创建PKCS12型证书
3.OpenSSL
   功能最强大。
所以,这里干脆只介绍OpenSSL了。

安装完OpenSSL-Win32到d:\tools之后,修改配置文件d:\tools\OpenSSL-Win32\bin\openssl.cfg
找到:
[ CA_default ]
dir     = $ENV::OPENSSL_HOME/CA # Where everything is kept
这里原来值是./demoCA
还是用绝对路径比较好。就放到d:\tools\OpenSSL-Win32\CA目录下。
紧接着,做一些准备工作,创建一些子目录,准备创建证书,
完全的批处理命令如下:

[plain] 
  1. @echo off  
  2. @rem set OPENSSL_HOME=d:\tools\OpenSSL-Win32  
  3. set PATH=%OPENSSL_HOME%\bin;%PATH%  
  4. mkdir %OPENSSL_HOME%\CA  
  5. cd /d %OPENSSL_HOME%\CA  
  6. echo "create subdir certs"  
  7. mkdir certs  
  8. mkdir newcerts  
  9. mkdir private  
  10. mkdir crl  
  11. echo "create file: index and serial"  
  12. echo 0>index.txt  
  13. echo 01>serial  
  14. echo "create rand file"  
  15. openssl rand -out private/.rand 1000  
  16. @rem echo %random% >> private/.rand  
  17. @echo off  
  18. set PATH=d:\tools\Openssl-Win32\bin;%PATH%  
  19. echo create private key for rootca  
  20. @rem the password, set it as 123456  
  21. openssl genrsa -aes256 -out private/ca.key.pem 2048  
  22. echo generate root ca request  
  23. openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=*.sql9.com"  
  24. echo create root ca cert  
  25. openssl x509 -req -days 10000 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer  
  26. echo convert the cert from cer into PKCS12  
  27. openssl pkcs12 -export -clcerts -in certs/ca.cer -inkey private/ca.key.pem -out certs/ca.p12  
  28. echo use keytool can query the pkcs12 cert status  
  29. keytool -list -keystore certs/ca.p12 -storetype pkcs12 -v -storepass 123456  
  30. echo create server ca  
  31. openssl genrsa -aes256 -out private/server.key.pem 2048  
  32. openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=www.sql9.com"  
  33. openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certs/server.cer  
  34. openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12  
  35. echo create client ca  
  36. openssl genrsa -aes256 -out private/client.key.pem 2048  
  37. openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=sql9"  
  38. openssl ca -days 3650 -in private/client.csr -out certs/client.cer -cert certs/ca.cer -keyfile private/ca.key.pem  
  39. openssl pkcs12 -export -clcerts -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12  
  40. cp -r certs certs.new  
最终certs.new目录将包含我们想要的所有证书。
原文:http://blog.csdn.net/iihero/article/details/17626845 

这一针在农信银2代项目中有幸能碰到加密方面的东西,所以就好好学习了一下。不足之处还请前辈们见谅。


OpenSSL功能远胜于KeyTool,可用于根证书,服务器证书和客户证书的管理
这里使用的是Win32OpenSSL_Light-1_0_1e.exe
http://www.slproweb.com/products/Win32OpenSSL.html
1,构建根证书
构建根证书前,需要构建随机数文件(.rand),完整命令如
openssl rand -out private/.rand 1000
rand 随机数命令。这里将随机数文件输出到private目录下。
-out 输出文件路径,
这里的参数1000,指定来产生伪随机字节数
2,构建根证书私钥
openssl genrsa -aes256 -out private/ca.key.pem 2048
3,生成根证书签发申请
完成密钥构建操作后,我们需要生成根证书签发申请文件(ca.csr),完整命令如代码
openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=BJ/L=BJ/O=lesaas/OU=lesaas/CN=*.lesaas.cn"
req 产生证书签发申请命令
-new 表示新请求
-key 密钥,这里为private/ca.key.pem文件
-out 输出路径,这里为private/ca.csr文件
-subj 指定用户信息。这里使用泛域名"*.lesaas.cn"
得到根证书签发申请文件后,我们可以将其发生给CA机构签发,当然我们也可以自行签发根证书。
4,签发根证书(自行签发根证书)
openssl x509 -req -days 10000 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer
x509 签发X.509格式证书命令。
-req 表示证书输入请求。
-days 表示有效天数,这里为10000天。
-shal 表示证书摘要算法,这里为SHA1算法。
-extensions 表示按OpenSSL配置文件v3_ca项添加扩展。
-signkey 表示自签名密钥,这里为private/ca.key.pem。
-in 表示输入文件,这里为private/ca.csr。
-out 表示输出文件,这里为certs/ca.cer。
====================================================================================================
OpenSSL产生的数据证书不能再JAVA语言环境中直接使用,需要将其转化为PKCS#12编码格式。
完整命令如代码
5,根证书转化
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certs/ca.cer -out certs/ca.p12
pkcs12 PKCS#12编码格式证书命令。
-export 表示导出证书。
-cacerts 表示仅导出CA证书。
-inkey 表示输入密钥,这里为private/ca.key.pem
-in 表示输入文件,这里为certs/ca.cer
-out 表示输出文件,这里为certs/ca.p12
个人信息交换文件(PKCS#12) 可以作为密钥库或信任库使用,我们可以通过KeyTool查看密钥库的详细信息。
6,查看密钥库信息
keytool -list -keystore d:/CA/certs/ca.p12 -storetype pkcs12 -v -storepass 123456
注意,这里参数-storetype值为“pkcs12”。
我们已经构建了根证书(ca.cer),我们可以使用根证书签发服务器证书和客户证书。
7,构建服务器证书
服务器证书的构建与根证书构建相似,首先需要构建私钥。
(1)构建服务器私钥
openssl genrsa -aes256 -out private/server.key.pem 2048
genrsa 产生RSA密钥命令。
-aes256 使用AES算法(256位密钥)对产生的私钥加密。可选算法包括DES,DESede,IDEA和AES。
-out 输出路径,这里指private/server.key.pem。
这里的参数2048,指RSA密钥长度位数,默认长度为512位。
(2)生成服务器证书签发申请
openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=BJ/L=BJ/O=lesaas/OU=lesaas/CN=www.lesaas.cn"
req 产生证书签发申请命令
-new 表示新请求。
-key 密钥,这里为private/ca.key.pem文件
-out 输出路径,这里为private/ca.csr文件
-subj 指定用户信息,这里使用域名“www.lesaas.cn”作为用户名。
我们已经获得了根证书,可以使用根证书签发服务器证书。
(3)签发服务器证书
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out
certs/server.cer
x509 签发X.509格式证书命令。
-req 表示证书输入请求。
-days 表示有效天数,这里为3650天。
-sha1 表示证书摘要算法,这里为SHA1算法。
-extensions 表示按OpenSSL配置文件v3_req项添加扩展。
-CA 表示CA证书,这里为certs/ca.cer
-CAkey 表示CA证书密钥,这里为private/ca.key.pem
-CAserial 表示CA证书序列号文件,这里为ca.srl
-CAcreateserial表示创建CA证书序列号
-in 表示输入文件,这里为private/server.csr
-out 表示输出文件,这里为certs/server.cer
这里我们同样需要将OpenSSL产生的数子证书转化为PKCS#12编码格式。完整命令如下
(4)服务器证书转换
openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12
pkcs12 PKCS#12编码格式证书命令。
-export 表示导出证书。
-clcerts 表示仅导出客户证书。
-inkey 表示输入文件,这里为private/server.key.pem
-in 表示输入文件,这里为certs/ca.cer
-out 表示输出文件,这里为certs/server.p12
我们已经构建了服务器证书(server.cer),并可使用该证书构建基于单向认证网络
(5)构建客户证书
客户证书的构建与服务器证书构建基本一致,首先需要构建私钥。
产生客户私钥
openssl genrsa -aes256 -out private/client.key.pem 2048
genrsa 产生RSA密钥命令
-aes256 使用AES算法(256为密钥)对产生的私钥加密。可选算法包括DES,DESede,IDEA和AES。
-out 输出路径,这里指private/client.key.pem
这里的参数2048,指RSA密钥长度位数,默认长度为512位
完成客户证书密钥构建后,我们需要产生客户证书签发申请
(6)生成客户证书签发申请
openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=BJ/L=BJ/O=lesaas/OU=lesaas/CN=lesaas"
req 产生证书签发申请命令
-new 表示新的请求。
-key 密钥,这里为private/client.csr文件
-subj 指定用户信息,这里使用“lesaas”作为用户名
我们已经获得了根证书,可以使用根证书签发客户证书(client.cer)
(7)签发客户证书
openssl ca -days 3650 -in private/client.csr -out certs/client.cer -cert certs/ca.cer -keyfile private/ca.key.pem
ca 签发证书命令
-days 表示证书有效期,这里为3650天。
-in 表示输入文件,这里为private/client.csr
-out 表示输出文件,这里为certs/server.cer
-cert 表示证书文件,这里为certs/ca.cer
-keyfile 表示根证书密钥文件,这里为private/ca.key.pem
最后,我们需要将获得客户证书转化Java语言可以识别的PKCS#12编码格式。
(8)客户证书转换
openssl pkcs12 -export -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12
pkcs12 PKCS#12编码格式证书命令、
-export 表示导出证书
-clcerts 表示仅导出客户证书。
-inkey 表示输入密钥,这里为private/client.key.pem
-in 表示输入文件,这里为certs/client.cer
-out 表示输出文件,这里为certs/client.p12
至此,我们完成了双向认证的所需的全部证书。
数字证书是公钥的载体,而密钥库可以包含公钥、私钥信息。
JKS和PKCS#12都是比较常用的两种密钥库格式/标准。对于前者,搞Java开发,尤其是接触过HTTPS平台的朋友,并不陌生。JKS文件(通常为*.jks或*.keystore,扩展名无关)可以通过Java原生工具——KeyTool生成;而后者PKCS#12文件(通常为*.p12或*.pfx,意味个人信息交换文件),则是通过更为常用的OpenSSL工具产生。
当然,这两者之间是可以通过导入/导出的方式进行转换的!当然,这种转换需要通过KeyTool工具进行!
回归正题,计费同事遇到一个难题:合作方交给他们一个*.pfx文件,需要他们从中提取密钥,然后进行加密交互。其实,通过Java直接操作密钥库文件(或个人信息交换文件)对于一般Java开发人员来说,这都是个冷门。不接触数字安全,根本不知所云。况且,Java原生的密钥库文件格式为JKS,如何操作*.pfx文件?密钥库操作需要获知密钥库别名,*.pfx别名是什么?!接下来就解决这些问题!
(PKCS#12是base64编码的)
方案:
通过keytool密钥库导入命令importkeystore,将密钥库格式由PKCS#12转换为JKS。
检索新生成的密钥库文件,提取别名信息。
由密钥库文件导出数字证书(这里将用到别名)。
通过代码提取公钥/私钥、签名算法等
先看格式转换:
Cmd代码 收藏代码
echo 格式转换
keytool -importkeystore -v -srckeystore zlex.pfx -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore zlex.keystore -deststoretype jks -deststorepass 123456
-importkeystore导入密钥库,通过格式设定,我们可以将PKCS#12文件转换为JKS格式。
-v显示详情
-srckeystore源密钥库,这里是zlex.pfx
-srcstoretype源密钥库格式,这里为pkcs12
-srcstorepass源密钥库密码,这里为123456
-destkeystore目标密钥库,这里为zlex.keystore
-deststoretype目标密钥库格式,这里为jks,默认值也如此
-deststorepass目标密钥库密码,这里为123456
通过这个操作,我们能够获得所需的密钥库文件zlex.keystore。
这时,我们已经获得了密钥库文件,只要确定对应的别名信息,就可以提取公钥/私钥,以及数字证书,进行加密交互了!
Cmd代码 收藏代码
echo 查看证书
keytool -list -keystore zlex.keystore -storepass 123456 -v
-list列举密钥库
-keystore密钥库,这里是zlex.keystore
-storepass密钥库密码,这里是123456
-v显示详情
现在,我们把证书导出!
Cmd代码 收藏代码
echo 导出证书
keytool -exportcert -alias 1 -keystore zlex.keystore -file zlex.crt -storepass 123456
-exportcert导出证书
-alias别名,这里是1
-keystore密钥库,这里是zlex.keystore
-file证书文件,这里是zlex.crt
-storepass密钥库密码,这里是123456

现在证书也导出了,我们可以提取公钥/私钥,进行加密/解密,签名/验证操作了!当然,即便没有证书,我们也能够通过密钥库(JKS格式)文件获得证书,以及公钥/私钥、签名算法等。

原文:http://blog.csdn.net/boss666666/article/details/10284649 

IIS配置SSL时遇到的错误:
1)证书链中的一个或多个中间证书丢失 

How to configure intermediate certificates

  1. Open the Certificates Microsoft Management Console (MMC) snap-in. To do this, follow these steps:
    1. At a command prompt, type Mmc.exe.
    2. If you are not running the program as the built-in Administrator, you will be prompted for permission to run the program. In the Windows Security dialog box, clickAllow.
    3. On the File menu, click Add/Remove Snap-in.
    4. In the Add or Remove Snap-ins dialog box, click the Certificates snap-in in the Available snap-ins list, click Add, and then click OK.
    5. In the Certificates snap-in dialog box, click Computer account, and then click Next.
    6. In the Select computer dialog box, click Finish.
    7. In the Add or Remove Snap-ins dialog box, click OK.
  2. To add an intermediate certificate, follow these steps:
    1. In the Certificates MMC snap-in, expand Certificates, right-click Intermediate Certification Authorities, point to All Tasks, and then click Import.
    2. In the Certificate Import Wizard, click Next.
    3. In the File to Import page, type the file name of the certificate that you want to import in the File name box, and then click Next.
    4. Click Next, and then complete the Certificate Import Wizard.
详见微软support原文https://support.microsoft.com/zh-cn/kb/954755 

转载于:https://www.cnblogs.com/Sefrid/p/5358338.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud和SprigBoot之间的依赖关系怎么看

SpringCloud官网地址 https://spring.io/projects/spring-cloud 不推荐使用了,推荐用最新的是Hoxton版本 打开下面提供的网页 https://start.spring.io/actuator/info 使用解析工具查看 https://tool.lu/json/ 查看json串返回的结果 { "git": { …

微软最强命令行工具 Windows Terminal,强势霸榜GitHub

命令提示符也是算 Windows 系统的一大特色了,相信很多人刚看到这白底黑字的界面都有点哭笑不得吧,好在后来微软陆续推出了Powershell、cmd之类的命令行工具,来提供一些更加高级的功能如今微软更进一步,放出一大招,正式…

easyui edatagrid 触发编辑行回掉onEdit

dg.edatagrid(selectRow, i).edatagrid(beginEdit, i);var opts dg.edatagrid("options");opts.onEdit.call(this, i, rows[i]); 转载于:https://www.cnblogs.com/zt528/p/5359388.html

修改Windows远程桌面3389端口

3389端口是Windows 2000(2003) Server 远程桌面的服务端口,可以通过这个端口,用“远程桌面”等连接工具来连接到远程的服务器,如果连接上了,输入系统管理员的用户名和密码后,将变得可以像操作本机一样操作远程的电脑,因…

mysql 5.7.17源码包_centos7 mysql5.7.17源码安装

centos7 mysql5.7.17源码安装**安装前准备操作系统环境:Centos 7.21、解决依赖包并下载源码包至/home/soft/目录下[rootnode03 ~]# yum -y install gcc gcc-c ncurses ncurses-devel cmake bison[rootnode03 ~]# cd /home/soft/[rootnode03 soft]# wget https://sourceforge.ne…

SpringCloud版本名字

SpringCloud版本号字母由来 https://github.com/spring-projects/spring-cloud/wiki SpringCloud最新版Hoxton SpringCloud官网 https://spring.io/projects/spring-cloud#learn

Lua学习教程之 可变參数数据打包与解包

利用table的pack与unpack进行数据打包与解包。測试代码例如以下: print("Test table.pack()----------------");function printTable ( t )if type(t) "table" thenfor k,v in pairs(t) doprintTable(v);endelseprint(t);end endlocal packData function(…

程序员20句励志名言

1、作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。2、程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇…

批量保存到mysql_关于保存批量数据进入mysql

提出的要求:生成13位纯数字的卡号与8位纯数字的卡密,要求卡号与卡密都必须全表唯一,然后保存到mysql。思路:1.首先mysql中将这两个字段设置唯一索引,保证这两个字段的值在该表中是唯一存在的2.卡号是有序增长的&#x…

SpringCloud主要组件

SpringCloud主要组件 SpringCloud组件停更说明

求数组中的最小子数组,时间复杂度o(n),java

石家庄铁道大学 信1405-1 班 唐炳辉 题目:给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。 设计思路:两个变量 ,一个记录当前并入的数组的值,另外一个记录所算过得最大的数组的值,当并入的值为小于…

mysql 输出解释怎么看_了解MySQL中EXPLAIN解释命令

1 EXPLAIN概念EXPLAIN会向我们提供一些MySQL是执行sql的信息:EXPLAIN可以解释说明 SELECT, DELETE, INSERT, REPLACE, and UPDATE 等语句.当EXPLAIN与可解释的语句一起使用时,mysql会显示一些来自于优化器的关于sql执行计划的信息。即mysql解释它是如何处…

MYSQL数据库默认latin1字符集转换为GBK或UTF8

可以采用下面的方法latin1字符集转换为gbk字符集或utf8字符集。具体的转换步骤如下:一、latin1转gbk1、导出数据库mysqldump --default-character-setlatin1 -h 数据库连接ip -u root -P 3306 -p数据库密码 db_name table_name > /usr/home/test/table_name.sql2…

【Post工具】PostMan 他媳妇 PostWoman

一个免费,快速,美观的API请求构建器,可以替代 Postman。 测试网址: https://postwoman.io/ 下载地址 https://github.com/liyasthomas/postwoman 主要特性: 支持自定义换肤支持权限支持参数、请求体支持 PWA支持历…

MYSQL统计和识别重复值

1、查询和计算表person_tbl中(last_name,first_name)组合有重复的记录的数量。mysql> SELECT COUNT (*) AS repetitions, last_name, first_nameFROM person_tbl GROUP BY last_name, first_nameHAVING repetitions > 1;2、从结果集中…

main spring启动_SpringBoot学习(一):为什么main方法启动类需要放在项目根目录...

一、概述使用SpringBoot的应用是需要将应用代码编译打包成jar包,然后基于main方法的方式来独立启动这个应用,使得该应用作为一个独立进程运行。这是跟传统的将项目打包成war包,然后部署到tomcat服务器去运行的一个区别。而在应用当中&#xf…

学习笔记~~~~LinkedHashMap

LinkedHashMap实现了Map接口,继承了HashMap 应用场景 HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。 我们是按照7、2、3、4 的顺序插入的,但是输出结果并不是按照顺序的。 同样的数据&…

[转]Mysql Join语法解析与性能分析

转自:http://www.cnblogs.com/BeginMan/p/3754322.html 一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表;table2:右表。 JOIN 按照…

css radial-gradient 径向渐变基本语法与使用

在之前的文章《深入理解Css linear-gradient线性渐变》我们了解了CSS中的线性渐变,本文将介绍CSS中的另一种渐变———径向渐变(Radial Gradient): CSS中的径向渐变(Radial Gradient)允许你创建从一个颜色…

华为鸿蒙系统技术细节盘点

面对安卓的限制,华为似乎十分淡定从容,丝毫都不慌,华为的底气,很大原因来自华为自研的操作系统——鸿蒙系统!鸿蒙系统刚提出来的时候就在各界媒体中炸开了花,花粉们对其关注程度也是只增不减,那…