网络准入

Corda 网络是有准入机制的。要连接一个网络,一个节点需要在它的 <workspace>/certificates/ 文件夹下有三个 keystores 文件:

  • truststore.jks:存储的是受信的公钥(trusted public keys)和证书(我们这里指的是网络的 root CA 证书)
  • nodekeystore.jks:存储的节点的身份秘钥对(identity keypairs)和证书
  • sslkeystore.jks:存储的是节点的 TLS 秘钥对(keypairs)和证书

在开发模式下(比如当 devMode = true,查看配置节点了解详细信息),如果所需要的 keystores 不存在的话,预先配置好的 keystores 会被使用。这个确保了开发者能够尽快地使节点运行起来。

但是,这些预先配置好的 keystores 并不安全。生产环境的部署是需要一个安全的证书认证机构(certificate autority)的。大多数的生产环境的部署会使用一个已有的证书认证机构或者使用一个软件来构建一个(这个软件会在接下来的几个月中提供可用)。在这个软件可用之前,可以使用下边的方法来创建属于你自己的证书认证机构。

网络结构

一个 Corda 网络会有三种类型的证书认证(CAs):

  • Root network CA,网络根证书
  • Intermediate network CA,网络中间媒介证书
    • 在每天的秘钥签名(key signing)活动中,不使用根证书而是使用中间媒介证书,这样可以减少根证书的私钥被窃取的风险
  • Node CAs,节点证书
    • 每个节点会作为自己的 CA 来签发子证书,可以使用子证书来对节点的 identity keys、anonymous keys 和 TLS 证书进行签名

秘钥对(keypair)和证书(certificate)的格式

你可以使用任何的标准的秘钥工具或者 Corda 的 X509Utilities(使用的是 Bouncy Castle)来创建所需的公钥/私钥秘钥对和证书。秘钥对和证书应该遵守以下约束:

  • 证书必须遵守 X.509 标准
    • 我们推荐使用 X.509 v3 来获得更好的向前兼容性(forward compatibility)
  • TLS 证书必须遵守 TLS v1.2 标准

创建 root 和 intermediate network CAs

  1. 创建一个新的秘钥对:这个会作为 root network CA 的秘钥对
  2. 为秘钥对创建一个 self-signed 证书。Basic constraints extension 必须设置为 true:这个会作为 root network CA 的证书
  3. 创建一个新的 keystore,将 root network CA 的秘钥对和证书存储到里边以便之后使用:这个 keystore 会被root network CA 用来为 intermediate network CA 证书签名
  4. 创建一个新的 Java keystore 名为 truststore.jks,将 root network CA 的证书存储在里边,并且使用一个别名 cordarootca:这个 keystore 稍后会被使用到创建的单独的节点上

注意:root network CA 的私钥应该被安全地保护起来。

创建 intermediate network CA 的 keystore

  1. 创建一个秘钥对:这个会被用来作为 intermediate network CA 的秘钥对
  2. 为这个秘钥对获得一个使用了 root network CA key 签名的证书。Basic constraints extension 必须被设置为 true:这个会被作为 intermediate network CA 的证书被使用
  3. 创建一个新的 keystore,并且将 intermediate network CA 的秘钥对和证书链(keypair and certificate chain)存在里边(比如 intermediate network CA 证书和 root network CA 证书)以便以后使用:这个 keystore 会被 intermediate network CA 使用来对节点的 identity 证书进行签名

创建节点 CA keystores 和 TLS keystores

创建节点的 CA keystores

  1. 对每一个节点创建一个秘钥对
  2. 为这个秘钥对获得一个使用了 intermediate network CA key 签名的证书。Basic constraints extension 必须被设置为 true
  3. 创建一个新的 Java keystore 名为 nodekeystore.jks 并且将秘钥对存在里边,使用别名 cordaclientca:节点会将这个 keystore 存储在本地,以用来对它的 identity keys 和 anonymous keys 进行签名

创建节点的 TLS keystore

  1. 对每一个节点创建一个秘钥对
  2. 为这个秘钥对创建一个使用了 node CA key 签名的证书。Basic constraints extension 必须设置为 false
  3. 创建一个新的 Java keystore 名为 sslkeystore.jks 并且将秘钥和证书存储在里边,使用别名 cordaclienttls:几点会将这个 keystore 存储在本地,以用来对它的 TLS 证书进行签名

在节点上安装证书

对于每个节点,将下边的文件放到节点的 certificates 路径下(<workspace>/certificates/

  1. 节点的 nodekeystore.jks keystore
  2. 节点的 sslkeystore.jks keystore
  3. root network CA 的 truststore.jks keystore
创建一个 Corda 网络

创建一个 Corda 网络

新建一个corda网络 一个Corda网络有 […]

发表评论

电子邮件地址不会被公开。 必填项已用*标注