linux-运维进阶-31 OpenSSL实现CA证书

OpenSSL实现CA证书

什么是CA

CA,Catificate Authority,通俗的理解就是一种认证机制。它的作用就是提供证书(也就是服务端证书,由域名,公司信息,序列号,签名信息等等组成)来加强客户端与服务器端访问信息的安全性,同时提供证书的发放等相关工作。国内的大部分互联网公司都在国际CA机构申请了CA证书,并且在用户进行访问的时候,对用户的信息加密,保障了用户的信息安全。理论上来说,任何组织或者个人都可以扮演CA的角色,只不过,难以得到客户端的信任,不能推而广之,最典型应用莫过于12306网站,这个网站就是自己给自己颁发的根证书。

目前能够让浏览器默认支持的CA大厂有很多,Windows 操作系统在安装之初,也默认安装了很多受信任的根证书。可以通过控制面板–Internet选项来进行查看。

另外,可以将证书理解为带有额外信息的公钥。

SSL/TLS

SSL/TLS是网络通信过程中非常重要的两个协议。互联网的通信安全就建立在SSL/TLS协议基础之上。他们通过一系列的加密行为保障了通信的安全,是如今互联网通信最主要的应用之一。

SSL/TLS是一个很大的互联网应用,关于他们的介绍互联网上有很多,我们暂时不做详细的介绍。关于SSL/TLS通信的过程大致可以用下面的这张图来进行描述。

十六字真诀

公钥加密,私钥解密
私钥签章,公钥验签

实验准备

CA服务器:192.168.141.132

客户机:192.168.141.69

物理机(就是你的电脑)

OpenSSL

OpenSSL是一套开源软件,在Linux中可以很容易的安装。它能够很容易的完成密钥生成以及证书管理。我们接下来就利用OpenSSL搭建CA证书,并实现证书的申请与分发。

[root@localhost ~]# yum install openssl –y

CA配置

要手动创建CA证书,就必须首先了解,OpenSSL中关于CA的配置,配置文件位于下面的/etc/pki/tls/openssl.cnf

[root@localhost ~]# cat /etc/pki/tls/openssl.cnf####################################################################
[ ca ]
default_ca= CA_default      #默认CA
####################################################################
[ CA_default ]dir=/etc/pki/CA     # CA的工作目录这里其实是定义了一个变量
certs= $dir/certs      # 证书存储路径
crl_dir= $dir/crl      # 证书吊销列表
database= $dir/index.txt   # 证书数据库列表new_certs_dir= $dir/newcerts       #新的证书路径certificate = $dir/cacert.pem  # CA自己的证书
serial= $dir/serial        #下一个证书的编号,十六进制,默认00
crlnumber= $dir/crlnumber  #下一个要被吊销的证书编号,十六进制,默认00
crl = $dir/crl.pem         # The current CRL
private_key = $dir/private/cakey.pem # CA 的私钥
RANDFILE= $dir/private/.rand   # private random number filex509_extensions = usr_cert      # The extentions to add to the cert# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default       # 命名方式
cert_opt = ca_default       # CA的选项
default_days= 365           # 默认证书的有效期限
default_crl_days= 30            # how long before next CRL
default_md= default     # use public key default MD
preserve= no            # keep passed DN orderingpolicy= policy_match    #策略#这里记录的是 将来CA在搭建的时候,以及客户端申请证书的时候,需要提交的信息的匹配程度。[ policy_match ]                # match意味着CA以及子CA必须一致
countryName = match             # 国家
stateOrProvinceName= match      # 州或者省
organizationName= match         #组织公司
organizationalUnitName  = optional
commonName= supplied
emailAddress= optional[ policy_anything ]             #可以对外提供证书申请,这时,证书的匹配就可以不用那么严格
countryName = optional
stateOrProvinceName = optional
localityName= optional
organizationName= optional
organizationalUnitName  = optional
commonName  = supplied
emailAddress= optional

找到配置文件中指定的路径

[root@localhost ~]# cat /etc/pki/tls/openssl.cnf | grep dir
dir     = /etc/pki/CA      # Where everything is kept

可以看到路径 /etc/pki/CA

创建所需要的文件

这里有一点需要注意,我们的实验环境中包含了一个主机,如果不提前创建这两个文件,那么在生成证书的过程中会出现错误。
  我们将文件创建在配置文件中指定的路径下面。

生成证书索引数据库文件
[root@localhost ~]# touch /etc/pki/CA/index.txt指定第一个颁发证书的序列号
[root@localhost ~]# echo 01 > /etc/pki/CA/serial

CA 自签名证书(构造根CA)

首先构造根CA的证书。因为没有任何机构能够给根CA颁发证书,所以只能根CA自己给自己颁发证书。

首先生成私钥文件cakey.pem

[root@localhost ~]# openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 2048
Generating RSA private key, 2048 bit long modulus
...............+++
.......................................+++
e is 65537 (0x10001)
Enter pass phrase for /etc/pki/CA/private/cakey.pem:  #这里需要输入密码( pass phrase )
Verifying - Enter pass phrase for /etc/pki/CA/private/cakey.pem:    #这里确认密码

更具私钥文件cakey.pem生成自签名证书cacert.pem

[root@localhost ~]# openssl req -new -x509 -key  /etc/pki/CA/private/cakey.pem -days 7300 -out  /etc/pki/CA/cacert.pem
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
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) [XX]:CN            #中国
State or Province Name (full name) []:js        #江苏
Locality Name (eg, city) [Default City]:zj      #镇江
Organization Name (eg, company) [Default Company Ltd]:feng
Organizational Unit Name (eg, section) []:ca
Common Name (eg, your name or your server's hostname) []:ca.feng.com
Email Address []:admin@feng.com
[root@localhost ~]#

查看生成的证书cacert.pem

[root@localhost ~]# cd /etc/pki/CA/
[root@localhost CA]# ls
cacert.pem  certs  crl  index.txt  newcerts  private  serial
[root@localhost CA]# cat cacert.pem

关闭selinux

[root@localhost CA]# cd
[root@localhost ~]# setenforce 0
[root@localhost ~]#

颁发证书(客户端申请证书)

为客户端颁发ssl证书

  1. 客户端首先产生一个私钥以及证书请求的公钥
  2. 客户端将公钥发给CA服务器
  3. CA服务器为客户端颁发数字签名再传回客户机

我们再开一台虚拟机作为客户端,由于它不是CA服务器,所以就不在/etc/pki/CA/目录下生成私钥和证书等文件了,咱们另外建一个目录来搞。

客户端首先在/root/key/目录下生成一个私钥https.key

[root@localhost ~]# yum install openssl -y       #客户端也要装ssl套件
[root@localhost ~]# mkdir key
[root@localhost ~]# openssl genrsa -out /root/key/https.key 2048
Generating RSA private key, 2048 bit long modulus
............................+++
.................+++
e is 65537 (0x10001)

客户端再用私钥https.key生成证书请求https.csr

[root@localhost ~]#  openssl req -new -key /root/key/https.key -out /root/key/https.csr -days 365
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) [XX]:CN
State or Province Name (full name) []:js
Locality Name (eg, city) [Default City]:zj
Organization Name (eg, company) [Default Company Ltd]:feng
Organizational Unit Name (eg, section) []:tech
Common Name (eg, your name or your server's hostname) []:192.168.141.69
Email Address []:admin@feng.comPlease enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:feng
[root@localhost ~]#

客户端将证书请求文件https.csr传到CA服务器的/etc/pki/CA目录下

[root@localhost ~]# cd key
[root@localhost key]# ls
https.csr  https.key
[root@localhost key]# scp https.csr 192.168.141.132:/etc/pki/CA
The authenticity of host '192.168.141.132 (192.168.141.132)' can't be established.
ECDSA key fingerprint is SHA256:mJVa6J0b/NaWyJ+cbVho0hHnUDY9utS7iWUGq91HvpM.
ECDSA key fingerprint is MD5:d3:6c:dc:1c:76:df:3a:d1:b9:ef:6c:17:82:64:76:6e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.141.132' (ECDSA) to the list of known hosts.
root@192.168.141.132's password:
https.csr                                                                     100% 1090   699.6KB/s   00:00
[root@localhost key]#

CA根据客户机发过来的证书请求https.csr生产数字签名https.crt

[root@localhost ~]#  cd /etc/pki/CA
[root@localhost CA]# openssl ca -in https.csr -out https.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:Serial Number: 1 (0x1)ValidityNot Before: Feb 17 08:07:23 2019 GMTNot After : Feb 17 08:07:23 2020 GMTSubject:countryName               = CNstateOrProvinceName       = jsorganizationName          = fengorganizationalUnitName    = techcommonName                = 192.168.141.69emailAddress              = admin@feng.comX509v3 extensions:X509v3 Basic Constraints: CA:FALSENetscape Comment: OpenSSL Generated CertificateX509v3 Subject Key Identifier: 5C:83:77:55:09:E6:6F:BF:5A:0E:7A:D4:45:64:8B:28:81:0A:70:6BX509v3 Authority Key Identifier: keyid:A0:D2:8C:72:63:CE:16:D6:EE:DF:B6:5F:85:C1:57:06:D1:A2:CA:98Certificate is to be certified until Feb 17 08:07:23 2020 GMT (365 days)
Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated[root@localhost CA]# ls
cacert.pem  crl        https.csr  index.txt.attr  newcerts  serial
certs       https.crt  index.txt  index.txt.old   private   serial.old
[root@localhost CA]# CA自己的私钥文件cakey.pem
CA的自签名证书cacert.pem
客户机发过来的证书请求https.csr
CA根据https.csr产生数字签名https.crt

CA将生产好的数字签名再传回客户机

[root@localhost CA]# scp https.crt 192.168.141.69:/root/key
The authenticity of host '192.168.141.69 (192.168.141.69)' can't be established.
ECDSA key fingerprint is SHA256:GxQcqZQLnGUvawOktRB9hLYZZA0ScnEsN3USeyTghgU.
ECDSA key fingerprint is MD5:d6:d5:c1:df:2b:47:22:55:4d:1a:a3:f2:63:50:d9:b7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.141.69' (ECDSA) to the list of known hosts.
root@192.168.141.69's password:
https.crt                                                                     100% 4551     2.7MB/s   00:00
[root@localhost CA]#

切换到客户机,看一下的确传过来了

[root@localhost key]# ls
https.crt  https.csr  https.key
[root@localhost key]# 

​ 接下来客户机将自己的密钥https.key传给CA,由CA生成证书cacert.pem传回给客户机。为了不冲突,在CA服务器上新建一个目录/root/test

[root@localhost ~]# mkdir test
[root@localhost ~]# 

客户机将自己的密钥https.key传给CA

[root@localhost key]#  scp https.key 192.168.141.132:/root/test
root@192.168.141.132's password:
https.key                                                                     100% 1675   447.2KB/s   00:00
[root@localhost key]# 

由CA生成证书cacert.pem

[root@localhost ~]# openssl req -new -x509 -key  /root/test/https.key  -days 7300 -out  /root/test/cacert.pem
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) [XX]:CN
State or Province Name (full name) []:js
Locality Name (eg, city) [Default City]:zj
Organization Name (eg, company) [Default Company Ltd]:feng
Organizational Unit Name (eg, section) []:tech
Common Name (eg, your name or your server's hostname) []:192.168.141.69
Email Address []:admin@feng.com
[root@localhost ~]# 

CA服务器将证书传给客户机

[root@localhost ~]# cd test/
[root@localhost test]# ls
cacert.pem  https.key
[root@localhost test]# scp cacert.pem 192.168.141.69:/etc/pki/CA
root@192.168.141.69's password:
cacert.pem                                                                    100% 1375     1.0MB/s   00:00
[root@localhost test]# 

切换到客户机,看一下的确传过来了

[root@localhost key]# cd /etc/pki/CA
[root@localhost CA]# ls
cacert.pem  certs  crl  newcerts  private
[root@localhost CA]#

客户机使用https保护网站

原理:比如人们访问网站http://test.feng.com,这个网站又搭建在客户机192.168.141.69上,那么客户机就需要向CA服务器申请到数字签名,这样安装了相应证书的电脑就可以访问https://test.feng.com了。刚刚我们的客户机已经成功申请到了数字签名,现在咱们在客户机上搭网站,只有一个默认网页“Testing……”,用来看证书使用效果即可。

安装apache和mod_ssl模块

[root@localhost key]# cd
[root@localhost ~]# yum install httpd mod_ssl -y

修改配置文件

[root@localhost ~]# vim /etc/httpd/conf.d/ssl.conf100 SSLCertificateFile /root/key/https.crt
107 SSLCertificateKeyFile /root/key/https.key
122 SSLCACertificateFile /etc/pki/CA/cacert.pem

放行443端口和https服务,关闭selinux,重启apache服务

[root@localhost ~]# firewall-cmd --add-port={443,80}/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# setenforce 0
[root@localhost ~]#
[root@localhost ~]# systemctl restart httpd

这里重启apache服务要放到最后,否则会报错。

windows导入根CA证书

将根linux的证书(就是CA服务器生成的自签名证书,ca.feng.com的那个cacert.pem)导出到windows上,然后将后缀名改为.crt,打开后点击安装证书

[root@localhost ~]# yum install lrzsz -y
[root@localhost ~]# sz /etc/pki/CA/cacert.pem
[root@localhost ~]#
导出到自己电脑,如下图,改其后缀为crt,双击它开始安装证书。

如上图,打开这个CA的自签名证书后就可以看到,颁发者和颁发给都是ca.feng.com,且不受信任,证书信息的标志那里都是一个大大的红色叉叉,我们需要手动安装这个证书,安装到本地计算机后,就受信任了,表示本地计算机信任了这个证书机构给它自己办法的证书。

选择本地计算机,然后点击下一步

安装证书,最后下一步点完成

查看证书

win+r,输入certmgr.msc点击确定即可

我们安装的证书是CA的自签名证书,名字叫做ca.feng.com,安装好之后,我们的电脑会对这个CA机构产生充分的信任,且对于这个CA机构颁发给任何网站的证书都会信任。之前我们的客户机:192.168.141.69搭建了apache服务,也算是有了一个网站了,虽然其网站主页还是下面这个“Testing 123”的页面,但是这个不妨碍我们的浏览器对其网站证书进行安全分析。

如下图,我们打开https://192.168.141.69,会看到它的证书来自于ca.feng.com。之前我们的客户机192.168.141.69向CA服务器申请到的证书,现在就发挥了它的作用了,让我们的浏览器得以信任这个网站的证书,同时,由于mod_ssl模块是支持”https“中的“s”的,所以也能用https打开这个网址。

访问网站

吊销证书

吊销证书是CA机构做的事,我们不用去做,这里只做方法演示。吊销不会立即生效,要等网站重启。

在根CA上根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,然后吊销证书

# 吊销子客户端的证书 使用revoke 命令

[root@localhost CA]# openssl ca -revoke /etc/pki/CA/https.crt
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Revoking Certificate 01.
Data Base Updated
[root@localhost CA]#

指定第一个吊销证书的编号

(指定吊销证书的编号,只有在更新证书吊销列表之前,才需要操作)

# 这条命令与生成证书时指定证书serial 号码的作用是一致的。
# 就是说,指定下一个证书吊销时的编号。
[root@localhost CA]# echo 01 > /etc/pki/CA/crlnumber
[root@localhost CA]# cat /etc/pki/CA/crlnumber
01
[root@localhost CA]# 

更新证书吊销列表

前面指定了证书吊销列表编号之后,就可以来更新证书吊销列表了。

[root@localhost CA]# openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:    #这里提示输入密码
[root@localhost CA]#

查看证书吊销列表的文件

[root@localhost CA]# openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text
Certificate Revocation List (CRL):Version 2 (0x1)Signature Algorithm: sha256WithRSAEncryptionIssuer: /C=CN/ST=js/L=zj/O=feng/OU=tech/CN=ca.feng.com/emailAddress=admin@feng.comLast Update: Feb 17 08:55:41 2019 GMTNext Update: Mar 19 08:55:41 2019 GMTCRL extensions:X509v3 CRL Number: 1
Revoked Certificates:Serial Number: 01Revocation Date: Feb 17 08:54:31 2019 GMTSignature Algorithm: sha256WithRSAEncryption2e:c5:24:2e:00:ec:bb:58:b5:6a:87:49:7a:1d:f9:5d:e6:83:bd:af:51:49:63:96:49:7a:c7:74:6d:bd:5f:fb:87:65:35:9d:62:98:0a:42:56:19:67:9a:9f:1e:27:e1:dc:70:36:e6:32:c6:02:e8:e8:25:1c:15:2e:ab:82:af:54:f7:80:bb:d2:dc:84:a3:6f:b2:72:70:95:81:18:55:7e:c7:fc:fd:8b:5b:b2:d6:ab:c3:64:64:89:38:86:dd:28:53:ea:36:64:05:84:88:62:77:a3:2f:0e:ae:d6:76:64:de:ea:f6:8b:fa:eb:63:0e:ff:13:16:bc:b1:62:bf:32:99:50:e5:86:2d:95:b8:e7:15:93:86:78:6f:b3:22:6a:af:7b:43:9d:61:33:ac:65:c1:26:a4:6f:6d:74:91:69:69:04:36:ca:7e:d0:42:45:12:07:37:4a:f1:2a:a8:45:01:a5:5b:43:77:fb:6e:26:fc:16:09:d1:f3:44:2e:d0:e7:96:0a:75:af:50:c2:b7:41:f5:9f:d2:0f:58:92:75:0b:81:d2:99:5c:5c:79:6a:a8:59:b9:0e:cd:0a:e9:4f:f2:a4:8d:5a:d5:71:8d:6c:b4:f2:f8:0b:7a:cf:9f:6e:43:b5:de:2a:15:84:0c:40:c0:3f:5a:75:fb:f5:9c
[root@localhost CA]# 

吊销不会立即生效,要等网站重启,这里在客户机重启apache服务

[root@localhost ~]# systemctl restart httpd

查看吊销后的结果

本篇到此结束。

linux-运维进阶-31 OpenSSL实现CA证书相关推荐

  1. 高级运维工程师证书_广州Linux运维工程师中信部中级高级技能证书

    无论做什么运维,运维工程师最基本的职责都是负责服务的稳定性,确保服务可以7*24H不间断地为用户提供服务.在此之上运维工程师的主要工作职责如下: 质量:保障并不断提升服务的可用性,确保用户数据安全,提 ...

  2. Linux运维基础进阶——PPT汇总

    Linux运维基础 admin day1--云网络基础 day2--Linux系统简介.安装Linux系统.Linux基本操作 day3--命令行基础.目录和文件管理 day4--管理用户和组.tar ...

  3. Linux运维 第三阶段 (一) 网络配置及openssl加密

    Linux运维 第三阶段 (一) 网络配置及openssl加密 主机接入网络:IP,netmask,gateway,hostname,DNS1,DNS2,DNS3,route,dhcp(dynamic ...

  4. Linux运维入门及进阶全新经典视频-老男孩Linux第三部-老男孩-专题视频课程

    Linux运维入门及进阶全新经典视频-老男孩Linux第三部-20502人已学习 课程介绍         本Linux高薪运维入门及进阶,为入门教学中的基础部分,以简单.易用.高效的方式为初学者讲解 ...

  5. 《Linux运维实战:使用openssl生成免费证书》

    文章目录 一.背景 二.生成证书 2.1.证书格式为cer 2.2.证书格式为pem 三.Nginx配置 四.安装客户端证书 总结:整理不易,如果对你有帮助,可否点赞关注一下? 一.背景 由于第三方外 ...

  6. Linux安全运维进阶:SSH常见配置

    1.SSH 无缝切换远程加密 一.了解SSH 1.随便说说 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在 ...

  7. linux运维基础进阶和shell入门,Linux运维工程师从基础到进阶:Shell变量知识梳理...

    原标题:Linux运维工程师从基础到进阶:Shell变量知识梳理 Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言,涵盖的知识点多且杂 ...

  8. Linux 运维自动化之Cobbler实战案例

    大纲 一.前言 二.Cobbler 工作原理详解 三.Cobbler 常用命令汇总 四.Cobbler 各种目录说明 五.自定义Kickstart文件详解 六.Cobbler 实战案例安装CentOS ...

  9. Linux运维与架构工程实践

    1 本章概览 介绍Linux系统Linux运维与架构工程实践的方方面面 2 Linux系统基础入门 认识计算机和服务器核心硬件 Linux发展历史.系统组成.应用领域以及发行版 搭建运维环境:VMWa ...

  10. 新开班全栈Linux运维-Linux云计算运维与高级架构班课程 全新自动化运维必学课程

    新开班全栈Linux运维-Linux云计算运维与高级架构班课程 全新自动化运维必学课程 全栈Linux运维的课程意义,在于让同学们从Liunx基础课程开始,一路直通Liunx运维高级架构师的级别.全新 ...

最新文章

  1. C#游戏开发快速入门 2.1 构建游戏场景
  2. 内存管理 初始化(七)kmem_cache_init_late 初始化slab分配器(下)
  3. gbdt如何处理多分类问题(multiclass,cart)
  4. Python数据分析实战项目-共享单车骑行数据分析
  5. java 代码发送邮件添加附件_Java实现163邮箱发送邮件到QQ邮箱
  6. Mysql分区对大表查询效率的影响
  7. C#回调函数的简单讲解与应用例子
  8. long 对应oracle,【转】oracle number与java中long、int的对应
  9. 为Activity设置特定权限才能启动
  10. 是可改写的随机存储器_PPT下载:磁阻随机存取存储器
  11. JavaScript中setInterval的参数传递个人归纳
  12. 好好编程-物流项目03【GitHub管理】
  13. Qualcomm Ramdump debugging
  14. 超级美女抽出滤镜抠图
  15. 物联网共享单车有什么物联技术?
  16. 演示Exchange用法
  17. 【Microarchitecture of Intel and AMD CPU】 9 Sandy Bridge and Ivy Bridge pipeline 【9.1~9.3】
  18. 股票做空是什么意思?股票做空和做多是什么意思?
  19. 如何在虚拟机中运行知乎App
  20. 【脚本项目源码】Python制作艺术签名生成器,打造专属你的个人艺术签名

热门文章

  1. 《正面管教》读后感_20171219
  2. 【NIPS 2020】Self-paced Contrastive Learning with Hybrid Memory for Domain Adaptive Object Re-ID
  3. Shader初级(纹理坐标篇)
  4. 阿里云服务器 —— linux是什么样子的呢(适合新手,建议收藏!)
  5. 有了800件T恤测量数据,能选出最合身的尺寸吗?
  6. 三极管做开关管的总结(理解三极管)
  7. Java--Files
  8. 把Android API文档的颜色改成不易疲劳的绿豆沙颜色
  9. 模型剪枝学习笔记 --- EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning
  10. Unicable技术在卫星接收方案设计中的应用