目录

文章目录

  • 目录
  • 网络传输 CIAA 安全模型
  • 机密性(Confidentiality)
    • 对称加密
    • 非对称加密
    • 混合加密
  • 完整性(Integrity)
    • L2 数据链路层的 CRC 强校验
    • L3 网络层的 Checksum 弱校验
    • L4 传输层的 Checksum 弱校验
    • 安全层的 Checksum 强校验
  • 安全传输层身份认证(Authentication)
    • PKI 公钥基础设施
    • 数字签名证书
    • CA 机构
    • CA 证书的签发和认证
  • 使用 OpenSSL 自建 CA 并签发证书
    • Step 1. 创建 CA 工作目录和配置文件
    • Step 2. 生成 CA 私钥
    • Step 3. 生成 CA 公钥证书
    • Step 4. 生成 Server 公钥和私钥
    • Step 5. CA 签发 Server 的 CA 证书

网络传输 CIAA 安全模型

网络传输 CIAA 安全模型,是构建安全的网络通信的基本模型。包括:

  1. 机密性(Confidentiality):指在数据传输过程中,只有授权的用户可以查看数据,而未经授权的用户无法查看数据。机密性通常通过使用加密技术来实现。
  2. 完整性(Integrity):指在数据传输过程中,数据没有被篡改。完整性通常使用 HASH 技术进行验证,发送方在传输数据时会生成一个 HASH Value 并将其附加到 Header 校验字段上,接收方在接收数据时会对数据进行完整性校验,以确保数据未被篡改。
  3. 认证性(Authentication):指确认对方身份的过程,确保数据传输的安全性。常用的认证方式包括用户名和密码、数字证书等。
  4. 可用性(Availability):指系统或服务应始终处于可用状态,并能够满足用户的需求。为确保可用性,通常使用负载均衡、冗余备份等技术来实现。

其中,Authentication 和 Availability 用于保障互联网资源的访问安全,Confidentiality 和 Integrity 用于保障业务数据传输的安全。本文中主要讨论了业务数据传输安全的内容。

机密性(Confidentiality)

机密性(Confidentiality)通常使用加密技术来实现。在 SSL/TLS 网络传输层中使用到的加密技术主要有对称加密、非对称加密和混合加密这 3 大类型。

对称加密

加密的过程就是把 “明文” 变成 “密文” 的过程。反之,解密的过程,就是把 “密文” 变为“明文”。在这两个过程中,都需要一个关键的 “密钥” 来参与数学运算。

对称加密,就是通信双方使用相同的 “密钥“ 进行加解密,该密钥被称为 “对称密钥”,常见的对称加密算法有 AES、DES 算法等。对称加密的特点是速度快,但缺点是对称密钥泄漏的风险大。一旦对称密钥泄漏,那么加密过程就会被破解。

例如:使用 7zip 创建一个带密码的加密压缩包。当别人要解压时,就需要输入相同的密码。在这个例子中,密码就是一个对称密钥,它是容易泄露的。

非对称加密

基于对称密钥容易泄漏的特性,非常不适用于需要进行频繁交互的公共网络环境,被中间人窃取的机会将大大的增加。为了解决这一问题,就提出了非对称加密技术,常见的非对称加密算法有 RSA 算法。

所谓 “非对称密钥“ 指的是通信双方使用不同的密钥进行加密和解密,分别称为 Private Key(私钥)和 Public Key(公钥)。在 C/S 场景中,Private 和 Public Key 都是由 Server 创建的,并且:

  • Private Key:只存在于 Server 中。
  • Public Key:会发送给需要建立安全通性的 Client。

由于 Private Key 和 Public Key 之间能够进行互补运算,所以通过 PublicKey 加密的数据,只能由对应的 Private Key 进行解密,反之亦然。并且由于只有 Public Key 会在公网中传递,这样即便中间人窃取到了 Public Key 也没用,因为只有对应的 Private Key 能够进行解密。通过这样的方式就解决了对称密钥泄漏风险的问题。

混合加密

对称加密性能好(每个操作纳秒级),但有安全漏洞。非对称加密提升了安全性,但却降低了性能(每个操作需要微秒到毫秒级)。为了将两者的优势结合就提出了混合加密方案。

值得注意的是。混合加密是一种方案,而不是一种具体的技术,实际上它结合使用了 2 种加密技术。在一个混合加密的安全会话中:

  • 首先,应用非对称加密技术解决了对称密钥(也称为会话密钥)的安全交换问题。
  • 然后,应用对称加密技术和会话密钥来对实际的交互数据进行加解密。

目前。混合加密方案已经被广泛到网络系统中,例如:SSL/TLS、IPSec、Signal、WireGuard 等传输协议。

完整性(Integrity)

IP Internet 环境是一个 “尽力而为” 的网络,除了需要应用上述提到的加密算法来保障数据机密性之外,还需要在报文传输层面保障数据的完整性(Integrity)。

L2 数据链路层的 CRC 强校验

数据在物理介质中进行传输是非常容易出错的,因为数字信号会受到各种环境干扰。所以在 Ethernet 中,封装 L2 Frame 时会附加上一个 FCS 尾部(4Bytes)。Receiver 接收到 Frame 之后,通过 CRC32 强校验算法对 Frame 的 Header 和 Data 部分都进行完整性校验,一旦发现数据不完整就触发错误。但 Frame CRC 强校验的作用域仅仅在同一个 Ethernet LAN 中,对于跨网络报文传输还需要依靠其他手段。

L3 网络层的 Checksum 弱校验

在 Receiver 将 L2 Frame 提交到 L3 sub-system 的过程中,由于存在数据复制操作,也可能会引入错误,所以 L3 会对 IP Header 进行 Checksum 弱校验。区别在于 IP Checksum 只会对 IP Header 进行校验,以此确保 IP Header 的完整性,所以称为弱校验。之所以有这样的设计,主要是兼顾了安全和性能这两方面的考量。强校验算法和数据量也意味着网络性能的降低。

L4 传输层的 Checksum 弱校验

L4 Checksum 弱校验是一个可选项目,根据传输场景和协议类型的不同,可能会忽略掉该字段。

安全层的 Checksum 强校验

上述可见,仅依靠 L2-4 的数据校验手段,并不能全面确保数据的完整性。所以,从网络分层理念出发,在传输层之上还增加了可以根据用户需求而 “插入" 的安全传输层。它以 “安全第一" 为原则,其次才是性能考量。

以 SSL/TLS 为例,为了支持多种不同的强校验算法,它的 Checksum 字段长度可以是 16Bytes(MD5)、20Bytes(SHA1),甚至是 64Bytes(SHA512)。关于 SSL/TLS 协议细节我们在后面再展开。

安全传输层身份认证(Authentication)

上面我们讨论了报文传输层面的数据完整性,以及通过非对称密钥进行数据加密,此外还需要继续讨论非对称密钥本身的安全性,最常见的就是 “中间人公钥劫持" 问题。

如下图所示。在 C/S 场景中,假设 Server 和 Client 希望建立非对称加密安全通道。但一开始 Server 传递给 Client 的 Public Key 就已经被中间人劫持了,并伪造了一对非法的非对称密钥,且将非法的 Public Kay 发送给 Client。那么 Client 实际上是和中间人建立起了 “安全” 通道,而不是 Server。

后续,当 Server 向 Client 发送数据时,中间人故技重施的将数据劫持,用一开始劫持的 Public Key 进行解密后,对数据进行篡改,然后再使用非法的 Private Key 对数据进行加密发送给 Client,而 Client 也会使用非法的 Public Key 进行解密。反过来亦是如此。对 Client 和 Server 而言,中间人都是透明的,信息泄露了却不自知。

可见,在网络系统中,还需要解决 Public Key 的安全分发问题,这就是 PKI(Public Key Infrastructure,公钥基础设施)存在的意义。

PKI 公钥基础设施

PKI(Public Key Infrastructure,公钥基础设施)是一种应用于非对称加密的 Public Key 管理标准,用于防范 Public Key 分发过程中的中间人攻击,以此来支撑数据传输的机密性和完整性。

PKI 是一种标准,其关键的实体主要有 2 个:

  1. CA(Certificate Authority,证书签发机构):提供数字签名证书的签发、证书持有者身份认证等一系列信息安全服务。在公网环境中,CA 需要是一个具有权威和公信力的第三方机构;而在内网环境中,则可以创建自己的 CA,用于签发只在内网有效的证书。
  2. 数字签名证书:是一个由 CA 签发的 “特殊公钥“,通过这个公钥,Client 可以识别发送者是否为中间人。

数字签名证书

首先来看数字签名证书,它遵循着 X.509 标准。其中目前常用的 X.509 v3 格式定义如下图所示:

  1. Version(版本号):v3 版本的值为 2。
  2. Serial Number(证书序列号):指定由 CA 分配给证书的唯一标识。
  3. Signature Algorithm(签名算法标识符):指定 CA 对证书执行数据签名时所使用的签名算法。
  4. Issuer(证书签发者):指定 CA 自己的 X.500 DN-Distinguished Name,用于确定 CA 的权威性。包括:
    • C:国家
    • ST:省市
    • L:地区
    • O:组织机构
    • OU:单位部门
    • CN:通用名
    • 邮箱地址
  5. Validity(有效期):包括证书开始生效的日期和证书失效的日期。
  6. Subject(证书持有者):指定证书持有者的 X.500 DN-Distinguished Name,用于确定证书持有者的身份合法性。包括:
    • C:国家
    • ST:省市
    • L:地区
    • O:组织机构
    • OU:单位部门
    • CN:通用名
    • 邮箱地址
  7. Subject PublicKey Info(证书持有者的 Public Key 信息):包含 2 个重要信息:
    • 证书持有者的 Public Key,用于后续建立非对称加密安全通道。
    • Public Key 的签名算法标识符。
  8. Extension(扩展项):v3 开始支持的证书扩展信息,用于扩展证书的作用。
  9. Issuer’s Signature(数字签名值):是一个非常重要的字段。先通过对上述 Data(1~8 个字段)进行 HASH 得到数字摘要,然后再使用 CA 私钥进行加密得到数字签名。

值得注意的是,证书只有 Signature 是加密的,而 Data 是明文传输的,尽可能的减少了非必要加密数据的运算量。Signature 就可以确保证书本身的数据机密性和完整性。

CA 机构

CA 通常是可信任的第三方机构,能够对数据签名证书的真实性和有效性进行认证,全球性的 CA 机构有:Symantec、Comodo,GlobalSign,DigiCert,GeoTrust 等等。这些 CA 机构之间存在上下级的关系,多层级 CA 之间存在 “证书信任链”,目的是为了加强数字签名证书的可信度和安全性。

在实际的应用中,我们可以将证书分为以下几种类型,在后续的流程介绍中,需要区分理解:

  • CA 私钥:作为 CA 自身的私钥,用于加密 CA 证书。
  • CA 公钥证书:作为 CA 自身的公钥,由上级 CA 签发。CA 公钥会发送给信任该 CA 的通信双方保存。
  • CA 根证书:如果 CA 自身就是最顶级机构,那么 CA 就需要自己给自己签发一个 CA 公钥证书,称为根证书,其签发者和持有者都是自己。所以顶级 CA 的公信力要求最高。
  • CA 证书:又称为 Server 本地设备证书,是由 CA 签发给申请者(通常是 Server)的证书,证书中的签发者名称是 CA 的名称,而持有者就是申请者的名称。

CA 证书的签发和认证

以 HTTPS 网站向 CA 申请签发 CA 证书为例:

  1. 网站在本地创建自己的 Private Key 和 Public Key;
  2. 网站向 CA 提交自己的公司信息、网站域名信息、Public Key 信息等并申请签发。
  3. CA 通过线上、线下等多种手段验证网站提供的信息的真实性,例如:公司是否存在、域名是否合法等等。
  4. 审核通过后,CA 会向网站签发一张与域名对应的 CA 证书。

所谓 “签发”,实际上就是对 CA 证书的内容进行 “摘要和加密”,最终生成 Issuer’s Signature(数字签名值):

  • CA 证书数字摘要:首先,对 CA 证书除了 Issuer’s Signature 字段之外的 Data 字段的内容先进行 HASH(e.g. SHA1、MD5)得到数字摘要,用于保证 CA 证书的完整性。
  • CA 摘要加密:然后,使用 CA 私钥对数字摘要进行加密后得到 Signature。由于 Signature 使用了 CA 私钥进行加密,所以也只有 CA 公钥证书能对其进行解密,以此来保证 CA 证书的机密性。

可见,Issuer’s Signature 是 Client 用于保证 CA 证书合法性的关键,继而基于对 CA 的信任,也保证了 CA 证书内含的 Server Public Key 的合法性。

CA 签发了证书之后,HTTPS 网站实际的 HTTP Server 就可以加载相应的 Server Private Key 和 CA 证书并启动 TLS 协议了。后续,当 Client 向 Server 发起 HTTPS 请求时,Server 就会把 CA 证书返回。Client 拿着 CA 证书发起 CA 认证流程:

  1. Client 首先会从 CA 证书的签发机构安装一张 CA 公钥证书;
  2. 然后用 CA 公钥证书对从 Server 接收到的 CA 证书的 Signature 进行解密,得到一份数字摘要。
  3. 同时用 CA 证书指定的 HASH 函数对 CA 证书的明文 Data 部分进行计算,得到另一份数字摘要。
  4. 如果 2 份 “数字摘要“ 相同,则表示 Client 收到的 CA 证书一定是 Server 下发的。

因为 HASH 的唯一性特征,即便中间人拥有了 CA 公钥证书,能够解析并篡改 CA 证书的 Data 和数字摘要,但是中间人却没有 CA 私钥来重新加密得到 Signature。如果中间人强行篡改 Data,那么在 Client 处也无法通过 Signature 得到一致的数字摘要。浏览器会出现以下画面,告诉你正在遭受中间人攻击,因为证书被篡改了。

使用 OpenSSL 自建 CA 并签发证书

OpenSSL 是一个强大的安全传输层应用库,利用 OpenSSL 可以自建企业内网环境中使用的 CA 中心,并支持根据不同的需要生成多种类型的数字签名证书,包括:

  • DER:二进制格式证书,包含公钥,不包含私钥,常用后缀为 .der、.cer、.crt。
  • PEM:ASCII 格式证书,包含公钥,不包含私钥,以 —–BEGIN CERTIFICATE—–、以 —–END CERTIFICATE—– 结尾。常用后缀为 .pem、.cer、.crt。
  • PKCS#12:二进制格式证书,包含公钥,可以包含私钥,也可以不包含私钥,常用的后缀为 .P12 和 .PFX。

自建 CA 并签发证书的流程如下图所示:

Step 1. 创建 CA 工作目录和配置文件

OpenSSL CA 中心,在 Linux 中表现为一个固定的目录结构:

/*
CA 中心目录结构
-- CA/|-- index.txt|-- newcerts/|-- private/|-- serial
*/$ CERT_DIR=/root/CA
$ mkdir -p $CERT_DIR
$ cd $CERT_DIR
$ mkdir newcerts private
$ chmod 700 private# prepare files
$ touch index.txt
$ echo 01 > serial
  • newcerts Dir:存放 CA 签发过的数字签名证书。
  • private Dir:存放 CA 私钥。
  • serial File:存放证书序列号,可自定义第一张证书的序号(e.g. 01),之后每新建一张证书,序列号会自动加 1。
  • index.txt File:存放证书信息。

Step 2. 生成 CA 私钥

openssl genrsa [args] [numbits]
  • -des:使用 CBC 模式的 DES 加密算法。
  • -des3:使用 CBC 模式的 3DES 加密算法。
  • -aes128:使用 CBC 模式的 AES128 加密算法。
  • -aes192:使用 CBC 模式的 AES192 加密算法。
  • -aes256:使用 CBC 模式的 AES256 加密算法。
  • -passout arg:指定加密 CA 私钥文件的密码,私钥文件的安全级别非常高。
  • -out file:指定输出 Private Key 的文件名。
  • [numbits]:指定密钥长度。
$ openssl genrsa -passout pass:foobar -des3 -out $CERT_DIR/private/cakey.pem 2048
Generating RSA private key, 2048 bit long modulus
....................+++
..................................................+++
e is 65537 (0x10001)$ ll $CERT_DIR/private/cakey.pem
-rw-r--r--. 1 root root 1751 Nov  9 07:18 /root/demoCA/private/cakey.pem$ cat $CERT_DIR/private/cakey.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,B017FD40FE243E30QKV/gR2rC/E5gogSoDuascRfQKoVUfBekIiTtROUPKmW6R74EYh4SoxRhW1WKNQa
xtD4583SC99aCjrKCETUPrQAijX9wxuL3bSevWzH6Uxba1XX9YEUOMA8vRThR1e4
rK+HKXT/S7w39ku8+YfwjmO64DCkGVl1T35GHe+De2oXxE6gaUbpgz/KZiOuo0yV
1SRHCK03PQ6nYEqMyk67UGT0gQ1NLwEEB4eTZxHkyheTAXrCazAYrSGqTXsx5rCJ
mOU2G63/w/ktbW+YGphk7P4myhvkgNflm/Lh9JOGxrAgjAk6Ay6T7wMT17zKqKYk
j9AqLh36Ph6876PYnxnf2UFMye8yl+boxUlfnc+GA1C2SEXHcucDHcic+ae5tGwy
mltY7EeC0+MB/U1UvdeBZOK1wAoKW5nS7WW5C2Mg9ZJZ1H7FXUk8h9oLwS1sgcVN
hOwsHRJtR8k1+iutcOTnDcN07IWDaCzFQi4Z9K+w1uCIH1Zky2DYixr2HNpmbEFD
CcBDMpmqZD92ReVVW5Taa1i4TB6YgCVKCMysNmTGE9QqiMcCdZQ1jBhN3+Z0SAaR
sHCWK0gOVF6lIdYEk8y6bW1VPgINNzsKL0aX/gt44JBS9Z7xKwJlS1yCNnHVVtZQ
wRd+gwMEPxXq+U8OQsvyBFHCXZWEbLSWAYMsNGU3iH84gNEhEH54PmEtBKRSt6KJ
83BUu+P9wcXBvnc6GncDPXa7+O6xmdKHzdYKrJPLlkW8XL0zOqgnpe6/vx+WZiDN
N4f0ej83VhuwrIfhfC6vU7kTPPcM9fmS0B4NCa6MR6W/Q2Y6NIV+jI3IX6YvyLUA
aPxX2sAirahGpFgMGzAPCNw3Bsqsf7lOsw8baH3jkeCj61PCEQhBwHJRzjl2yuVu
0w3c5kKDepiqlq2hnQtx3XGScDwhrAVitGtTRBhxfZoiy1vLLvB/fye/DLbqP/z3
MnNRSM9rIxYap6Usy0rpBQGyeNAYlpWKhhl3qWQLV84OVkV8cfkp0vEhgstXyIKv
A/klaloD5gCt5WBt/iBjuFxf1W/DfzVD9FAgRG+9qL3ZZBLqs7Q6OPXSISlnaK6r
/uGTHgenPHkdVDN+eWhpMKYAPvwKiBBTq8WIz4zkBJQGxs9JVgEzKmvQXAbcafFj
HWvuykPo3WZ59ACLl59vDoPMNl+Mi11mH0Ye3jsxckWIMCzE3N+INwqdBmF90vbU
jelvO+QFyY4bpx3+T3kJydDIAJSjwRMA+4mPdYlH9hyE9rOLt4ObWY1//5fHEVuw
3SSW3Cf1FTSTsRvyuTm0ORPNogzPsIfnnUFnSoukXYBvFmbXXeWxKbbomzcubjCx
FP5O6/6LVw4V0YOl4E9CAJZ8pcHDRz6uauXM4Ig8MTpHdNyd07o0hC56bD07mTnt
0ifBucs9grQ0mxdCbIl3BNgg2J7mRYpXAtIhXDR9VyGxvoa5cgeKUsdECyAavfJp
xJgvC/0NFWNampB5fhMp9mnLRy7LzqnmHdUJpXntKzfH16Vu6MB3jE8YVORc313v
wFv5k7AiQVAplWBLEU4/opFkB97FuvRlmms5lK2umePezGjPunpobq4Qe5Gwocw2
-----END RSA PRIVATE KEY-----

Step 3. 生成 CA 公钥证书

因为该 CA 是自建的,没有上级 CA,所以这个 CA 公钥证书就是根证书。

openssl req [options] <infile> outfile
  • -inform arg:指定输入文件格式,例如:DER、PEM。
  • -outform arg:指定输出文件格式,例如:DER、PEM。
  • -in arg:指定待输入文件。
  • -out arg:指定待输出文件。
  • -passin:指定 Private Key 的解密密码。
  • -key file:指定 CA Private Key 文件。
  • -keyform arg:指定 Private Key 的加密算法,例如:DER、NET、PEM。
  • -new:指示生成一个新的 CSR。
  • -x509:指定使用 X509 标准。
  • -days:指定 X509 证书的有效日期和时间。
  • -[digest]:指定 HASH 算法,例如:md5、sha1、md2、mdc2、md4。
  • -config file:指定 openssl 配置文件。
  • -text:指示使用 text 显示格式。

需要注意的是,签发证书的时候可以指定 Domain Name,那么该证书就仅对该 Domain Name 有效。

$ openssl req -x509 -passin pass:foobar -new -nodes -key $CERT_DIR/private/cakey.pem -days 365 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=web.apigw.com" -out $CERT_DIR/ca_01.pem$ cat $CERT_DIR/ca_01.pem
-----BEGIN CERTIFICATE-----
MIIDizCCAnOgAwIBAgIJALnLH5qhisxdMA0GCSqGSIb3DQEBCwUAMFwxCzAJBgNV
BAYTAlVTMQ8wDQYDVQQIDAZEZW5pYWwxFDASBgNVBAcMC1NwcmluZ2ZpZWxkMQww
CgYDVQQKDANEaXMxGDAWBgNVBAMMD3d3dy5leGFtcGxlLmNvbTAeFw0xODExMDkw
NzI3NTFaFw0xOTExMDkwNzI3NTFaMFwxCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZE
ZW5pYWwxFDASBgNVBAcMC1NwcmluZ2ZpZWxkMQwwCgYDVQQKDANEaXMxGDAWBgNV
BAMMD3d3dy5leGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBAMw1gfu9C4Unw/wekXS2qp4SjI/zU4N3E8/grq+fF31t1Ce0PCdyKkVoEMZr
Z1N3FY+3LfMzq6HnogKipJIAoeYeNyPKtFpA5glCoGxb+m0VkxM6laHmOuf7XjKr
0Dr7Yy8vGGigjxB32aFNo26JQbVFlF4y+cg2CJm4qrVzVtohZ27xUbitzntOBpeS
+Djp3Ti9iLYEWQsbpskKyEmNhD9EqXIuv0xIIUv1P++fXJCfq/P7ySC84+jmecV1
GkVh7UfsViJSlEBMi6t6q21o7eYJ40/v8w6MNG5rlCGhctfFztFh8LsTHRy/tKpk
4v2oPJsXnN+dm06EX7Hf2SIZ4UUCAwEAAaNQME4wHQYDVR0OBBYEFHPUtuHJXbnO
cJEFB6PEnC397rijMB8GA1UdIwQYMBaAFHPUtuHJXbnOcJEFB6PEnC397rijMAwG
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAErS0J6mfiEl1yBLjZgOUhUt
kNC8RWiQchBBskA8XbvUMrlquqaVY0oejAzzfgPYS1f16CNJrqdWIkn87lypc3UG
eKEUdfH6ebZ8ibzsOPoLnzIMR4aeMDyFrl4PWmKgtlFkxKvt8b54/6nBbpNMeahL
zbgp++rfTeUJqVRpiVak0ht0LKdsrCQ0PZwdbMZkgnHVzKc+w6auMhm8KbubFa3N
wGcgbhQrmvuCMjCEcwRlSToXSB7nfZLp+55x8BFIORgJfk5iy5qQavsnH0z0rGub
TKeG4H3pjtLy0OzzCadgrXMLGtvhIVfPPSLz4L7iZ13qc92QetxH6p/3fXLoJYc=
-----END CERTIFICATE-----

可以看见新建的 CA 公钥证书内含了与 Public Key 信息。

$ openssl x509 -in ca_01.pem -text -noout
Certificate:Data:Version: 3 (0x2)Serial Number:b9:cb:1f:9a:a1:8a:cc:5dSignature Algorithm: sha256WithRSAEncryptionIssuer: C=US, ST=Denial, L=Springfield, O=Dis, CN=www.example.comValidityNot Before: Nov  9 07:27:51 2018 GMTNot After : Nov  9 07:27:51 2019 GMTSubject: C=US, ST=Denial, L=Springfield, O=Dis, CN=www.example.comSubject Public Key Info:Public Key Algorithm: rsaEncryptionPublic-Key: (2048 bit)Modulus:00:cc:35:81:fb:bd:0b:85:27:c3:fc:1e:91:74:b6:aa:9e:12:8c:8f:f3:53:83:77:13:cf:e0:ae:af:9f:17:7d:6d:d4:27:b4:3c:27:72:2a:45:68:10:c6:6b:67:53:77:15:8f:b7:2d:f3:33:ab:a1:e7:a2:02:a2:a4:92:00:a1:e6:1e:37:23:ca:b4:5a:40:e6:09:42:a0:6c:5b:fa:6d:15:93:13:3a:95:a1:e6:3a:e7:fb:5e:32:ab:d0:3a:fb:63:2f:2f:18:68:a0:8f:10:77:d9:a1:4d:a3:6e:89:41:b5:45:94:5e:32:f9:c8:36:08:99:b8:aa:b5:73:56:da:21:67:6e:f1:51:b8:ad:ce:7b:4e:06:97:92:f8:38:e9:dd:38:bd:88:b6:04:59:0b:1b:a6:c9:0a:c8:49:8d:84:3f:44:a9:72:2e:bf:4c:48:21:4b:f5:3f:ef:9f:5c:90:9f:ab:f3:fb:c9:20:bc:e3:e8:e6:79:c5:75:1a:45:61:ed:47:ec:56:22:52:94:40:4c:8b:ab:7a:ab:6d:68:ed:e6:09:e3:4f:ef:f3:0e:8c:34:6e:6b:94:21:a1:72:d7:c5:ce:d1:61:f0:bb:13:1d:1c:bf:b4:aa:64:e2:fd:a8:3c:9b:17:9c:df:9d:9b:4e:84:5f:b1:df:d9:22:19:e1:45Exponent: 65537 (0x10001)X509v3 extensions:X509v3 Subject Key Identifier:73:D4:B6:E1:C9:5D:B9:CE:70:91:05:07:A3:C4:9C:2D:FD:EE:B8:A3X509v3 Authority Key Identifier:keyid:73:D4:B6:E1:C9:5D:B9:CE:70:91:05:07:A3:C4:9C:2D:FD:EE:B8:A3X509v3 Basic Constraints:CA:TRUESignature Algorithm: sha256WithRSAEncryption4a:d2:d0:9e:a6:7e:21:25:d7:20:4b:8d:98:0e:52:15:2d:90:d0:bc:45:68:90:72:10:41:b2:40:3c:5d:bb:d4:32:b9:6a:ba:a6:95:63:4a:1e:8c:0c:f3:7e:03:d8:4b:57:f5:e8:23:49:ae:a7:56:22:49:fc:ee:5c:a9:73:75:06:78:a1:14:75:f1:fa:79:b6:7c:89:bc:ec:38:fa:0b:9f:32:0c:47:86:9e:30:3c:85:ae:5e:0f:5a:62:a0:b6:51:64:c4:ab:ed:f1:be:78:ff:a9:c1:6e:93:4c:79:a8:4b:cd:b8:29:fb:ea:df:4d:e5:09:a9:54:69:89:56:a4:d2:1b:74:2c:a7:6c:ac:24:34:3d:9c:1d:6c:c6:64:82:71:d5:cc:a7:3e:c3:a6:ae:32:19:bc:29:bb:9b:15:ad:cd:c0:67:20:6e:14:2b:9a:fb:82:32:30:84:73:04:65:49:3a:17:48:1e:e7:7d:92:e9:fb:9e:71:f0:11:48:39:18:09:7e:4e:62:cb:9a:90:6a:fb:27:1f:4c:f4:ac:6b:9b:4c:a7:86:e0:7d:e9:8e:d2:f2:d0:ec:f3:09:a7:60:ad:73:0b:1a:db:e1:21:57:cf:3d:22:f3:e0:be:e2:67:5d:ea:73:dd:90:7a:dc:47:ea:9f:f7:7d:72:e8:25:87

Step 4. 生成 Server 公钥和私钥

同样使用了 RSA 机制,创建出 Server 的公钥和私钥(CSR 证书签名请求文件)。

$ mkdir $CERT_DIR/web.apigw.com$ openssl req -newkey rsa:2048 -nodes -keyout $CERT_DIR/web.apigw.com/server.key -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=web.apigw.com" -out $CERT_DIR/web.apigw.com/server.csr
Generating a 2048 bit RSA private key
.........+++
....................................................................................................................................................................................................+++
writing new private key to '/root/CA/web.apigw.com/server.key'
-----$ cat /root/CA/web.apigw.com/server.key
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDVcT7tbL0rgQiP
Rn/24h2Lv8KUm1JPWY4UzKPIIpSGwDTD6b8PgBmCkozAFWU2jDLj7XryHxz/fAVA
HXLKDyv1GyGGF7WFffmAd7xDKEqd13737zT5CsGyhYCqY2+sd/eWZrAad6C7OXO2
1z1eDOWJ9a1cm2/ytW8/HHEHCyG0vmiFYXIV2mEWVw35kzl7Pp19OQL4HkhPuCj0
B0+jUb1s7UVzA626+CkaGFb37KT0PSwifLMJ8KdKnIcTjKSA47Igk0CgfdA6GIt+
rD+P0OtZnTYW91jM8fFTEpREIuvhdaXTJSQrfxj7mE77k8T36AuC2GX7bXHG5QXT
XwSKHv2bAgMBAAECggEALwdMvjN/Wt6LbEY0W8lmiSwvS18Nu74XuC1+yNIVt7sR
5TjTiC7JcCOqL4iHTIWHkQD6Xe7NDN3eqknSyQKexNq9gDYpIMio+M1pBcMS7cRV
jXt/SIA+PX984g4WxQGJ4/GsS6igGaCHBnpWYyqkSMmA8S6uc+PWJym1HcAuJQyI
J7EYe56KGnJYxDwMAl01qT6RqYrJA6D3AKi+UlYURQr/+VyvBU99I2v7M2idzyGP
BZTh5g45We5z6+38z8sTHGgU52+d57iy3edexUD2UZwQl8dXIsjggYpC6VpyJSgl
g0jIIbOVc8YSoC42GiwrKiA61tHQGG/RXNXbU+waAQKBgQDrw68zDPRgVaazcF7v
Wgh6wHVMttmEkWM1L610tnllyyJSqqKfUjBQLZAe9BU7Xf7ZpyfmfsyGPEhxIO//
8Rr8F3FHEbxuNc4b9jgz+cslT8FkPzEVZ9NwOkvTIOyV7kGVT2sAln990218ifvH
a9ZckpnkScKoyLFAsSEShD2OuwKBgQDnwxemfF0t1ir6ZsvmT5FUsDVoGwm3//aW
+4bVMovr7dNefrAMPxwMyA/5Ddf1Ss1RXMTaP6+y2kftM2S/1P+MEE8x3zvT6qUE
nonyHeYVIhGs5j38TSZjaW13LlJbEBiAo89+l3xJwkWn7Rx9Cz+u060vu/Aoi5tF
1NFNVC4OoQKBgFmgUHAl0pj0tqSsaUqwfVy84VrCgDpnUsGbWGNwIwJRkMDAYYYT
po40Y/+AZrnk58cyRnbXaUT2kct/6/zuWYXQG54a3fk/txTmK0OHCHUstqY3Z59t
kvGtF7oxX/83TfNG97SHgfwBbjPT+MU894bFrH8ek0O617dyHtJ9NzGVAoGBAKjN
AovC5sb8xx7MAlSDvXE2Sh/CGakHaB39ou3jO+AhvyKDGUxCJvb0PBYEzDcfPT22
WLYxTpHwxBRyqz3BMENemZ/UXKnzrC8aHZTXy/22a7NHmvwJYR1k61KzzU4AAiin
pvgn82FxevRdEbPNnpuCFxC+TKPrUrNg1vUAi+8hAoGBANHqyKux1GXIhCP6wziS
am34NBqcynDWjivmFiSBJLxf5vFpsyTMhslpkvrtU8sdLY4wM706LhAT07ZDwjz1
kFMkyF87LTpS4XgUA0dqqEMu8CYEBrNhMNphme/r9TNN1xcroHjfwccynp2TOizU
kOs1SaEBhB1Go1OefL7mfhlq
-----END PRIVATE KEY-----$ cat /root/CA/web.apigw.com/server.csr
-----BEGIN CERTIFICATE REQUEST-----
MIICnzCCAYcCAQAwWjELMAkGA1UEBhMCVVMxDzANBgNVBAgMBkRlbmlhbDEUMBIG
A1UEBwwLU3ByaW5nZmllbGQxDDAKBgNVBAoMA0RpczEWMBQGA1UEAwwNd2ViLmFw
aWd3LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVxPu1svSuB
CI9Gf/biHYu/wpSbUk9ZjhTMo8gilIbANMPpvw+AGYKSjMAVZTaMMuPtevIfHP98
BUAdcsoPK/UbIYYXtYV9+YB3vEMoSp3XfvfvNPkKwbKFgKpjb6x395ZmsBp3oLs5
c7bXPV4M5Yn1rVybb/K1bz8ccQcLIbS+aIVhchXaYRZXDfmTOXs+nX05AvgeSE+4
KPQHT6NRvWztRXMDrbr4KRoYVvfspPQ9LCJ8swnwp0qchxOMpIDjsiCTQKB90DoY
i36sP4/Q61mdNhb3WMzx8VMSlEQi6+F1pdMlJCt/GPuYTvuTxPfoC4LYZfttccbl
BdNfBIoe/ZsCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQDP3bkzv3j8YCPINVTQ
We2c0G2Z0Q7OKgaCpXeucNbbCHKaQeytZdzmJ+ywlDvqYw53Y4MxRVRtde9Jxr3I
nwPzP+6gJhRIV4ghbG4YxjsjEH/ueOWw6cOvEJJf3zCv4QHpzyk87y37wwjEsAx5
U2JAWUi1kxjHtyaiHpabSHuFIGnqHrO4YVe8iGATtsiatwLlH2EzA7QInjkqUhuJ
k4qaD249KZMYiWYm/ZG4TC1GDLIoRHh1Ji0rY8iJHXqYjLKtS6uH0c6LHkpEHQI/
67wHyXJW67F2O5YQ6TQixOOV+uWcX3VpgfowoyOuaV79UdiMuDkmx/19CrZ9XCGO
47i+
-----END CERTIFICATE REQUEST-----

Step 5. CA 签发 Server 的 CA 证书

设定 OpenSSL CA 配置文件,默认的配置文件为 /etc/pki/tls/openssl.cnf,每个 CA 中心可以指定一个配置文件。

$ mkdir /root/CA$ cp /etc/pki/tls/openssl.cnf /root/CA/openssl.cnf$ vi /root/CA/openssl.cnf
...
[ CA_default ]# 因为 OpenSSL 解析不了 “~” 这样的特殊字符,所以配置文件应该使用绝对路径。
dir             = /root/CA              # Where everything is kept
...
certificate     = $dir/ca_01.pem        # The CA certificate
...

签发 Server 的 CA 证书时,会根据 openssl.cnf 加载 CA 公钥证书和 Server 公钥(CSR 文件)来完成签名。所以如果下述指令报错,建议检查 openssl.cnf 中各证书文件路径配置是否正确。

openssl ca [options]
  • -selfsign:使用 CSR 文件来进行签发,即:“自签名”,这种情况发生在生成证书的 CA 客户端与签发证书的 CA 服务器都是同一台机器,此时可以使用同一个密钥对来进行 “自签名”。
  • -in file:指定待签发的文件。
  • -out file:指定输出的 CA 证书文件。
  • -cert file:指定 CA 公钥证书。
  • -days arg:指定 CA 证书的签有效日期和时间。
  • -keyfile arg:指定 CA 私钥文件。
  • -keyform arg:指定 CA 私钥文件的格式,例如:PEM、ENGINE。
  • -key arg:指定 CA 私钥文件的解密密码。
  • -config file:配置文件。
$ openssl ca -passin pass:foobar -config /root/CA/openssl.cnf -in $CERT_DIR/web.apigw.com/server.csr -out /root/CA/newcerts/server.pem -batch
Using configuration from /root/CA/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:Serial Number: 1 (0x1)ValidityNot Before: Jan  5 07:31:30 2021 GMTNot After : Jan  5 07:31:30 2022 GMTSubject:countryName               = USstateOrProvinceName       = DenialorganizationName          = DiscommonName                = web.apigw.comX509v3 extensions:X509v3 Basic Constraints:CA:FALSENetscape Comment:OpenSSL Generated CertificateX509v3 Subject Key Identifier:6B:F9:65:7C:9A:9A:95:64:2C:7B:A7:BB:27:7C:6D:B1:7B:D2:96:6CX509v3 Authority Key Identifier:keyid:CB:15:A9:D0:5F:66:1B:F1:F0:05:0E:8B:0E:84:D3:88:E4:ED:36:70Certificate is to be certified until Jan  5 07:31:30 2022 GMT (365 days)Write out database with 1 new entries
Data Base Updated$ cat /root/CA/newcerts/server.pem
Certificate:Data:Version: 3 (0x2)Serial Number: 1 (0x1)Signature Algorithm: sha256WithRSAEncryptionIssuer: C=US, ST=Denial, L=Springfield, O=Dis, CN=web.apigw.comValidityNot Before: Jan  5 07:31:30 2021 GMTNot After : Jan  5 07:31:30 2022 GMTSubject: C=US, ST=Denial, O=Dis, CN=web.apigw.comSubject Public Key Info:Public Key Algorithm: rsaEncryptionPublic-Key: (2048 bit)Modulus:00:d5:71:3e:ed:6c:bd:2b:81:08:8f:46:7f:f6:e2:1d:8b:bf:c2:94:9b:52:4f:59:8e:14:cc:a3:c8:22:94:86:c0:34:c3:e9:bf:0f:80:19:82:92:8c:c0:15:65:36:8c:32:e3:ed:7a:f2:1f:1c:ff:7c:05:40:1d:72:ca:0f:2b:f5:1b:21:86:17:b5:85:7d:f9:80:77:bc:43:28:4a:9d:d7:7e:f7:ef:34:f9:0a:c1:b2:85:80:aa:63:6f:ac:77:f7:96:66:b0:1a:77:a0:bb:39:73:b6:d7:3d:5e:0c:e5:89:f5:ad:5c:9b:6f:f2:b5:6f:3f:1c:71:07:0b:21:b4:be:68:85:61:72:15:da:61:16:57:0d:f9:93:39:7b:3e:9d:7d:39:02:f8:1e:48:4f:b8:28:f4:07:4f:a3:51:bd:6c:ed:45:73:03:ad:ba:f8:29:1a:18:56:f7:ec:a4:f4:3d:2c:22:7c:b3:09:f0:a7:4a:9c:87:13:8c:a4:80:e3:b2:20:93:40:a0:7d:d0:3a:18:8b:7e:ac:3f:8f:d0:eb:59:9d:36:16:f7:58:cc:f1:f1:53:12:94:44:22:eb:e1:75:a5:d3:25:24:2b:7f:18:fb:98:4e:fb:93:c4:f7:e8:0b:82:d8:65:fb:6d:71:c6:e5:05:d3:5f:04:8a:1e:fd:9bExponent: 65537 (0x10001)X509v3 extensions:X509v3 Basic Constraints:CA:FALSENetscape Comment:OpenSSL Generated CertificateX509v3 Subject Key Identifier:6B:F9:65:7C:9A:9A:95:64:2C:7B:A7:BB:27:7C:6D:B1:7B:D2:96:6CX509v3 Authority Key Identifier:keyid:CB:15:A9:D0:5F:66:1B:F1:F0:05:0E:8B:0E:84:D3:88:E4:ED:36:70Signature Algorithm: sha256WithRSAEncryption8a:de:6a:20:af:cd:ec:60:a5:e0:31:03:ce:8b:f2:bd:37:c1:cb:b5:d0:88:17:d2:12:53:51:26:95:16:3b:94:f8:1f:cc:91:b3:1d:68:84:99:dc:5b:4a:2e:2d:82:e6:7a:d1:5e:f3:77:ec:e2:62:3b:a5:b1:8c:91:9e:fd:25:4c:8c:cc:86:58:08:99:1d:fc:ec:3e:83:ef:c9:13:b0:8e:bf:ec:33:0a:76:99:0f:52:34:af:49:ae:11:98:33:e3:27:26:54:b0:db:79:9a:7b:e1:83:04:e8:21:f5:a2:3f:fd:05:53:8d:4d:19:1e:1e:d0:59:4e:d4:71:95:62:dd:4e:f5:fe:e9:b0:86:1e:70:d1:c7:e8:4a:7a:1c:81:7b:a0:3d:31:d1:aa:5e:c0:f4:04:0b:83:5e:49:aa:80:6e:ef:43:fe:c8:9d:ce:8f:32:95:2e:c9:e1:3e:82:4f:55:20:3a:b5:f7:cb:90:92:57:99:de:40:eb:59:cb:20:ed:3f:b4:46:92:2f:bd:1b:38:36:85:fa:d8:53:88:89:db:c4:69:0e:dd:01:1e:f6:0b:2a:87:3b:83:f5:ac:95:d1:be:17:34:e0:93:06:9c:14:fc:e3:c6:69:36:12:ca:f6:db:f0:b5:20:ff:72:7e:17:02:f9:4d:50:bf:1c:5b
-----BEGIN CERTIFICATE-----
MIIDlDCCAnygAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJVUzEP
MA0GA1UECAwGRGVuaWFsMRQwEgYDVQQHDAtTcHJpbmdmaWVsZDEMMAoGA1UECgwD
RGlzMRYwFAYDVQQDDA13ZWIuYXBpZ3cuY29tMB4XDTIxMDEwNTA3MzEzMFoXDTIy
MDEwNTA3MzEzMFowRDELMAkGA1UEBhMCVVMxDzANBgNVBAgMBkRlbmlhbDEMMAoG
A1UECgwDRGlzMRYwFAYDVQQDDA13ZWIuYXBpZ3cuY29tMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEA1XE+7Wy9K4EIj0Z/9uIdi7/ClJtST1mOFMyjyCKU
hsA0w+m/D4AZgpKMwBVlNowy4+168h8c/3wFQB1yyg8r9Rshhhe1hX35gHe8QyhK
ndd+9+80+QrBsoWAqmNvrHf3lmawGneguzlzttc9XgzlifWtXJtv8rVvPxxxBwsh
tL5ohWFyFdphFlcN+ZM5ez6dfTkC+B5IT7go9AdPo1G9bO1FcwOtuvgpGhhW9+yk
9D0sInyzCfCnSpyHE4ykgOOyIJNAoH3QOhiLfqw/j9DrWZ02FvdYzPHxUxKURCLr
4XWl0yUkK38Y+5hO+5PE9+gLgthl+21xxuUF018Eih79mwIDAQABo3sweTAJBgNV
HRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZp
Y2F0ZTAdBgNVHQ4EFgQUa/llfJqalWQse6e7J3xtsXvSlmwwHwYDVR0jBBgwFoAU
yxWp0F9mG/HwBQ6LDoTTiOTtNnAwDQYJKoZIhvcNAQELBQADggEBAIreaiCvzexg
peAxA86L8r03wcu10IgX0hJTUSaVFjuU+B/MkbMdaISZ3FtKLi2C5nrRXvN37OJi
O6WxjJGe/SVMjMyGWAiZHfzsPoPvyROwjr/sMwp2mQ9SNK9JrhGYM+MnJlSw23ma
e+GDBOgh9aI//QVTjU0ZHh7QWU7UcZVi3U71/umwhh5w0cfoSnocgXugPTHRql7A
9AQLg15JqoBu70P+yJ3OjzKVLsnhPoJPVSA6tffLkJJXmd5A61nLIO0/tEaSL70b
ODaF+thTiInbxGkO3QEe9gsqhzuD9ayV0b4XNOCTBpwU/OPGaTYSyvbb8LUg/3J+
FwL5TVC/HFs=
-----END CERTIFICATE-----

CIAA 网络安全模型 — 数据传输安全相关推荐

  1. CIAA 网络安全模型 — TLS v1.3 和 HTTPS 协议

    目录 文章目录 目录 SSL/TLS TLS 1.2 1. client_hello 2. server_hello + server_certificate + sever_hello_done 3 ...

  2. 网络安全模型_基于数据驱动的网络安全流量分析总结

    导读 网络和社交流量分析是检测和防御网络攻击的基础.随着数据集的日益剧增,手工定义规则的传统方法逐渐被机器学习(ML)方法替代,这是因为ML有更好的工作性能.在数据驱动的研究背景下,通过研究社交流量和 ...

  3. 信安精品课:第4章网络安全体系与网络安全模型精讲笔记

    第4章网络安全体系与网络安全模型精讲笔记 一.本章知识框架 二.本章大纲要求 4.1 网络安全体系概述 •网络安全体系概念 •网络安全体系特征 •网络安全体系用途 4.2 网络安全体系相关安全模型 • ...

  4. 【第4章】网络安全体系与网络安全模型(信息安全工程师)

    第4章 网络安全体系与网络安全模型 4.1 网络安全体系概述 4.1.1 网络安全体系概念 一般而言,网络安全体系是网络安全保障系统的最高层概念抽象,是由各种网络安全单元按照一定的规则组成的,共同实现 ...

  5. (软考中级--信息安全工程师)四、网络安全体系与网络安全模型

    4.1.网络安全体系 4.1.1.网络安全体系特征: 整体性:人机物一体化 协同性:各安全机制相互协作 过程性:覆盖保护对象全生命周期 全面性:基于多个维度 适应性:动态演变机制 4.2.网络安全模型 ...

  6. 【网络安全01】网络安全引言(网络安全概述、计算机安全、OSI安全体系、网络安全模型)

    一.网络安全概述 1.1 网络中的"安全"问题 信息安全经历两大变革: 从物理和管理方法 转变成 自动化工具保护信息安全 终端普遍使用网络传输数据并保证数据安全 网络中的" ...

  7. 【网络安全模型介绍】PDR、P2DR、PDR2、PDR2A、WPDRRC

    文章目录 1.PDR模型 2.P2DR模型 3.PDR2模型 4.PDR2A模型[1] 5.WPDRCC模型 参考资料 1.PDR模型 PDR模型是最早体现主动防御思想的一种网络安全模型.是后期提出其 ...

  8. 关于PDR和P2DR两个网络安全模型

    PDR和P2DR的关系:后者是从前者演变升级而来. 关于PDR模型的知识 1.提出:美国ISS公司. 2.意义:最早体现主动防御思想的一种网络安全模型. 3.组成: P-protection,  保护 ...

  9. 网络中数据传输过程的解析

    网络中数据传输过程的分析     我们每天都在使用互联网,我们电脑上的数据是怎么样通过互联网传输到到另外的一台电脑上的呢?把自己的理解写一下,可能有很多细节还没有能的很清楚!希望在以后可以使之更加的完 ...

最新文章

  1. C++ 笔记(06)— 变量作用域(局部变量、全局变量、静态局部变量)
  2. python自动测试p-关于《Python自动化测试实战》
  3. docker停止容器后配置_Docker 自学笔记 - april_aaa
  4. 做游戏,学编程(C语言) 13 消灭星星
  5. Orthanc+OHIF DICOM Viewer最佳Dicom解析、在线浏览实践指南(解决方案)
  6. 性能测试常用的linux命令
  7. 55本《大数据浪潮之巅:新技术商业制胜之道》,包邮!
  8. Win10官方原版ISO下载
  9. 计算机打印字与印刷字的大小,字号与尺寸对表.doc
  10. EasyRecovery2022真正不收费的数据恢复软件
  11. 2019蓝桥杯Java决赛题答案_2019第十届蓝桥杯Java题
  12. linux移动到回收站快捷键,linux中使用rm命令将文件移到回收站的方法
  13. JMeter插件之PerfMon监控服务器性能
  14. 定义一个图形抽象类,完成三角形、圆形、矩形的周长和面积计算
  15. 如何使用Tracup设定现实的项目目标(以及要避免的错误)
  16. pytorch安装(离线包)
  17. 聊天界面的制作(三)——表情列表发送功能
  18. 编译LineageOS
  19. vue组件库介绍以及组件库Element UI 的使用
  20. Android保存图片和视频到本地并更新相册

热门文章

  1. 5款小巧有趣的微信小程序,个个让你心花怒放!
  2. 11、git查看往日提交以及删除分支ID命令
  3. 【区块链】【IOT】深度解读物联网区块链“IOTA”:不仅解决IoT痛点,还解决区块链痛点
  4. 【金猿产品展】智能媒体审校系统:内容安全生产的守护者
  5. 如何让spyder中途暂停(之前运行出来的结果仍然显示)
  6. ESP32基础应用之使用两个ESP32通过阿里云物联网平台实现相互通信
  7. 鸡汤穷三代,励志毁一生 | 互联应用网
  8. 索尼最小最轻全画幅微单Alpha 7C面世
  9. 月薪2w运营人必备的120款运营神器
  10. 用数字暗示我喜欢你_我喜欢数字!