Skip to content

Commit

Permalink
Merge pull request #593 from stone-ch/release-2.0
Browse files Browse the repository at this point in the history
reviewed #517 #494
  • Loading branch information
greatcyang committed Mar 2, 2020
2 parents c993573 + 97b050c commit 09cb572
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 49 deletions.
76 changes: 64 additions & 12 deletions docs/source/capability_requirements.rst
Original file line number Diff line number Diff line change
@@ -1,36 +1,88 @@
定义功能需求
================================

如文档:doc:`capabilities_concept`中所述,在通道配置(在通道的最新配置区块中找到)中,为每个通道定义了功能需求。通道配置包含三个位置,每个位置定义了不同类型的功能。
如文档 :doc:`capabilities_concept` 中所述,在通道配置(在通道的最新配置区块中找到)中,为每个通道定义了功能需求。通道配置包含三个位置,每个位置定义了不同类型的功能。

+------------------+-----------------------------------+----------------------------------------------------+
| 功能类型 | 规范路径 | JSON路径 |
| Capability Type | Canonical Path | JSON Path |
+==================+===================================+====================================================+
| 通道 | /Channel/Capabilities | .channel_group.values.Capabilities |
| Channel | /Channel/Capabilities | .channel_group.values.Capabilities |
+------------------+-----------------------------------+----------------------------------------------------+
| 排序服务 | /Channel/Orderer/Capabilities | .channel_group.groups.Orderer.values.Capabilities |
| Orderer | /Channel/Orderer/Capabilities | .channel_group.groups.Orderer.values.Capabilities |
+------------------+-----------------------------------+----------------------------------------------------+
| 应用 | /Channel/Application/Capabilities | .channel_group.groups.Application.values. |
| Application | /Channel/Application/Capabilities | .channel_group.groups.Application.values. |
| | | Capabilities |
+------------------+-----------------------------------+----------------------------------------------------+

功能设置
--------------------

功能设置是通道配置的一部分(要么作为初始配置(稍后我们将讨论),要么作为重新配置的一部分)。
功能设置是通道配置的一部分(要么作为初始配置,要么作为重新配置的一部分)。

.. note:: 有关如何更新通道配置的更多信息,请参阅
out :doc:`config_update`.
.. note:: 有关如何更新通道配置的更多信息,请查看 doc:`channel_update_tutorial`。要了解不同的通道更新类型,请查看 :doc:`config_update`。

由于新通道在默认情况下复制了orderer系统通道的配置,因此将自动配置新通道,使其与orderer系统通道的orderer和通道功能以及通道创建事务指定的应用程序功能一起工作。
默认情况下,新通道将复制排序系统通道的配置,因此新通道将被自动配置为和排序系统通道中的排序节点、通道功能以及通道创建交易是指定的应用功能一起工作。通道已经存在了,但是必须被重新配置。

功能的值在 protobuf 定义如下:

.. code:: bash
message Capabilities {
map<string, Capability> capabilities = 1;
}
message Capability { }
JSON 格式如下:
.. code:: bash
{
"capabilities": {
"V1_1": {}
}
}
初始配置中的功能
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
在 ``config`` 目录分发的 ``configtx.yaml`` 文件中,有一个 ``Capabilities`` 部分,列举了每种功能类型(通道,orderer和应用程序)的可能功能。
请注意, ``Capabilities`` 在根级别(用于通道功能)和orderer级别(用于orderer功能)各有一个定义部分。
在发布的构件中 ``config`` 目录下的 ``configtx.yaml`` 文件中,有一个 ``Capabilities`` 部分,列举了每种功能类型(通道、排序节点和应用程序)的可能功能。
使用功能最简答的方法就是将 v1.1 中的示例结构复制过来并修改。例如:
.. code:: bash
SampleSingleMSPRaftV1_1:
Capabilities:
<<: *GlobalCapabilities
Orderer:
<<: *OrdererDefaults
Organizations:
- *SampleOrg
Capabilities:
<<: *OrdererCapabilities
Consortiums:
SampleConsortium:
Organizations:
- *SampleOrg
请注意, ``Capabilities`` 在根级别(用于通道功能)和 Orderer 级别(用于排序节点功能)各有一个定义部分。上边的示例使用 YAML 引用了在 YAML 文件底部定义的功能。
定义排序服务通道的时候没有 Application 部分,它在创建应用通道的时候会被创建。要在创建通道的时候定义新通道中应用的功能,应用程序管理员需要在 ``SampleSingleMSPChannelV1_1`` 结构后边定义他们的通道创建交易。
.. code:: bash
SampleSingleMSPChannelV1_1:
Consortium: SampleConsortium
Application:
Organizations:
- *SampleOrg
Capabilities:
<<: *ApplicationCapabilities
这里,Application 部分有一个新元素 ``Capabilities``,引用了 YAML 最后部分的 ``ApplicationCapabilities``
定义orderer系统通道时,没有“应用程序”部分,因为这些功能是在创建应用程序通道时定义的
.. note:: Channel 和 Orderer 部分的功能继承了排序系统通道的定义,并被在创建通道时自动包含到了排序节点中
.. Licensed under Creative Commons Attribution 4.0 International License
https://creativecommons.org/licenses/by/4.0/
71 changes: 34 additions & 37 deletions docs/source/enable_tls.rst
Original file line number Diff line number Diff line change
@@ -1,100 +1,97 @@
使用传输层安全性(TLS)保护通信
使用 TLS(Transport Layer Security)保护通信
==========================================================

Fabric支持使用TLS的节点之间的安全通信。 TLS通信可以使用单向(仅服务器)和双向(服务器和客户端)身份验证。
Fabric 支持节点之间使用 TLS 进行安全通信。TLS 通信可以使用单向(仅服务器)和双向(服务器和客户端)身份验证。

为peer节点配置TLS
为 Peer 节点配置 TLS
-------------------------------

peer节点既是TLS服务器又是TLS客户端。当另一个peer节点、应用程序或客户端与其建立连接时,它是前者;而当它与另一个peer节点或orderer节点建立连接时,则是后者。
Peer 节点既是 TLS 服务器又是 TLS 客户端。当另一个 Peer 节点、应用程序或客户端与其建立连接时,它是前者;而当它与另一个 Peer 节点或排序节点建立连接时,则是后者。

要在peer节点上启用TLS,需要设置以下配置属性
要在 Peer 节点上启用 TLS,需要设置以下配置

* ``peer.tls.enabled`` = ``true``
* ``peer.tls.cert.file`` = 包含TLS服务器证书的文件的标准路径
* ``peer.tls.key.file`` = 包含TLS服务器私钥的文件的标准路径
* ``peer.tls.rootcert.file`` = 包含颁发TLS服务器证书的证书颁发机构(CA)的链上证书文件的标准路径
* ``peer.tls.cert.file`` = 包含 TLS 服务器证书文件的标准路径
* ``peer.tls.key.file`` = 包含 TLS 服务器私钥文件的标准路径
* ``peer.tls.rootcert.file`` = 包含颁发 TLS 服务器证书 CA 证书链的标准路径

默认情况下,在peer节点上启用TLS时,TLS客户端身份验证是关闭的。这意味着在TLS握手期间,peer节点将不会验证客户端(另一个peer节点,应用程序或CLI)的证书。要在对等节点上启用TLS客户端身份验证,需要将peer配置中的属性``peer.tls.clientAuthRequired`` 设置为``true`` ,并将该``peer.tls.clientRootCAs.files`` 属性设置为包含CA证书链的CA链文件,该CA证书链为组织(organization)的客户端发布TLS证书
默认情况下,在 Peer 节点上启用 TLS 时,TLS 客户端身份验证是关闭的。这意味着在 TLS 握手期间, Peer 节点将不会验证客户端(另一个 Peer 节点、应用程序或CLI)的证书。要在 Peer 节点上启用TLS客户端身份验证,需要将节点配置中的属性 ``peer.tls.clientAuthRequired`` 设置为 ``true`` ,并将``peer.tls.clientRootCAs.files`` 属性设置为为客户端发布 TLS 证书 CA 证书链文件

默认情况下,per节点在充当TLS服务器和客户端时将使用相同的证书和私钥对。要在客户端使用其他证书和私钥对,请将 ``peer.tls.clientCert.file``和 ``peer.tls.clientKey.file``配置属性分别设置为客户端证书和密钥文件的标准路径。
默认情况下,Peer 节点在充当 TLS 服务器和客户端时将使用相同的证书和私钥对。要在客户端使用其他证书和私钥对,请将 ``peer.tls.clientCert.file`` 和 ``peer.tls.clientKey.file`` 配置属性分别设置为客户端证书和密钥文件的标准路径。

也可以通过设置以下环境变量来启用具有客户端身份验证的TLS
也可以通过设置以下环境变量来启用具有客户端身份验证的 TLS

* ``CORE_PEER_TLS_ENABLED`` = ``true``
* ``CORE_PEER_TLS_CERT_FILE`` = 服务器证书的标准路径
* ``CORE_PEER_TLS_KEY_FILE`` = 服务器私钥的标准路径
* ``CORE_PEER_TLS_ROOTCERT_FILE`` = CA链文件的标准路径
* ``CORE_PEER_TLS_ROOTCERT_FILE`` = CA 证书链文件的标准路径
* ``CORE_PEER_TLS_CLIENTAUTHREQUIRED`` = ``true``
* ``CORE_PEER_TLS_CLIENTROOTCAS_FILES`` = CA链文件的标准路径
* ``CORE_PEER_TLS_CLIENTROOTCAS_FILES`` = CA 证书链文件的标准路径
* ``CORE_PEER_TLS_CLIENTCERT_FILE`` = 客户证书的标准路径
* ``CORE_PEER_TLS_CLIENTKEY_FILE`` = 客户端密钥的标准路径

在 Peer 节点上启用客户端身份验证后,要求客户端在 TLS 握手期间发送其证书。如果客户端未发送其证书,则握手将失败,并且 Peer 节点将关闭连接。

当 Peer 节点加入通道时,将从通道的配置区块中读取通道成员的根 CA 的证书链,并将其添加到 TLS 客户端和服务端根 CA 的数据结构中。之后, Peer 节点间通信和 Peer 节点与排序节点间通信将会无缝地工作。

在peer节点上启用客户端身份验证后,要求客户端在TLS握手期间发送其证书。如果客户端未发送其证书,则握手将失败,并且peer节点将关闭连接。

当peer节点加入通道时,将从通道的配置区块中读取通道成员的CA根证书链,并将其添加到TLS客户端和服务器CA数据结构中。因此,peer节点间通信和peer节点与orderer节点间通信应该无缝地工作。


为orderer节点配置TLS
为排序节点配置 TLS
---------------------------------

要在orderer节点上启用TLS,需要设置orderer节点的配置属性:
要在排序节点上启用 TLS,需要设置排序节点的配置:

* ``General.TLS.Enabled`` = ``true``
* ``General.TLS.PrivateKey`` = 包含服务器私钥的文件的标准路径
* ``General.TLS.Certificate`` = 包含服务器证书的文件的标准路径
* ``General.TLS.RootCAs`` = 包含颁发TLS服务器证书的CA的证书链的文件的标准路径
* ``General.TLS.RootCAs`` = 包含颁发 TLS 服务器证书 CA 证书链的标准路径

默认情况下,与peer节点一样,orderer节点上的TLS客户端身份验证处于关闭状态。要启用TLS客户端身份验证,需要设置以下配置属性:
默认情况下,与 Peer 节点一样,排序节点上的 TLS 客户端身份验证处于关闭状态。要启用 TLS 客户端身份验证,需要设置以下配置属性:

* ``General.TLS.ClientAuthRequired`` = ``true``
* ``General.TLS.ClientRootCAs`` = 包含颁发TLS服务器证书的CA的证书链的文件的标准路径
* ``General.TLS.ClientRootCAs`` = 包含颁发 TLS 服务器证书 CA 证书链的标准路径

也可以通过设置以下环境变量来启用具有客户端身份验证的TLS
也可以通过设置以下环境变量来启用具有客户端身份验证的 TLS

* ``ORDERER_GENERAL_TLS_ENABLED`` = ``true``
* ``ORDERER_GENERAL_TLS_PRIVATEKEY`` = 包含服务器私钥的文件的标准路径
* ``ORDERER_GENERAL_TLS_CERTIFICATE`` = 包含服务器证书的文件的标准路径
* ``ORDERER_GENERAL_TLS_ROOTCAS`` = 包含颁发TLS服务器证书的CA的证书链的文件的标准路径
* ``ORDERER_GENERAL_TLS_ROOTCAS`` = 包含颁发 TLS 服务器证书 CA 证书链的标准路径
* ``ORDERER_GENERAL_TLS_CLIENTAUTHREQUIRED`` = ``true``
* ``ORDERER_GENERAL_TLS_CLIENTROOTCAS`` = 包含颁发TLS服务器证书的CA的证书链的文件的标准路径
* ``ORDERER_GENERAL_TLS_CLIENTROOTCAS`` = 包含颁发 TLS 服务器证书 CA 证书链的标准路径

为CLI节点配置TLS
为节点 CLI 配置 TLS
--------------------------------

针对启用了TLS的peer节点运行CLI命令时,必须设置以下环境变量:
针对启用了 TLS 的 Peer 节点运行 CLI 命令时,必须设置以下环境变量:

* ``CORE_PEER_TLS_ENABLED`` = ``true``
* ``CORE_PEER_TLS_ROOTCERT_FILE`` = 包含颁发TLS服务器证书的CA的证书链的文件的标准路径
* ``CORE_PEER_TLS_ROOTCERT_FILE`` = 包含颁发 TLS 服务器证书 CA 证书链的标准路径

如果在远程服务器上也启用了TLS客户端身份验证,则除上述变量外,还必须设置以下变量:
如果在远程服务器上也启用了 TLS 客户端身份验证,则除上述变量外,还必须设置以下变量:

* ``CORE_PEER_TLS_CLIENTAUTHREQUIRED`` = ``true``
* ``CORE_PEER_TLS_CLIENTCERT_FILE`` = 客户端证书的标准路径
* ``CORE_PEER_TLS_CLIENTKEY_FILE`` = 客户端私钥的标准路径

当运行连接到orderer节点的命令时,例如`peer channel <create|update|fetch>`或 `peer chaincode <invoke>`,如果在orderer节点上启用了TLS,则还必须指定以下命令行参数:
当运行连接到排序服务的命令时,例如 `peer channel <create|update|fetch>` 或 `peer chaincode <invoke>`,如果在排序节点上启用了 TLS ,则还必须指定以下命令行参数:

* --tls
* --cafile <包含订购者CA的证书链的文件的标准路径>
* --cafile <包含排序节点 CA 证书链的文件的标准路径>

如果在orderer节点上启用了TLS客户端身份验证,则还必须指定以下参数:
如果在排序节点上启用了 TLS 客户端身份验证,则还必须指定以下参数:

* --clientauth
* --keyfile <包含客户端私钥的文件的标准路径>
* --certfile <包含客户端证书的文件的标准路径>


调试TLS问题
调试 TLS 问题
--------------------

在调试TLS问题之前,建议同时在TLS客户端和服务器端启用 ``GRPC debug`` 以获取附加信息。要启用 ``GRPC debug``,需要在环境变量``FABRIC_LOGGING_SPEC`` 中加入 ``grpc=debug`` 。例如,如要将默认日志记录级别设置为``INFO`` ,将GRPC日志记录级别设置为 ``DEBUG``,则需先将日志记录规范设置为 ``grpc=debug:info``。
在调试 TLS 问题之前,建议同时在 TLS 客户端和服务器端启用 ``GRPC debug`` 以获取附加信息。要启用 ``GRPC debug``,需要在环境变量``FABRIC_LOGGING_SPEC`` 中加入 ``grpc=debug`` 。例如,如要将默认日志记录级别设置为 ``INFO``,将 GRPC 日志记录级别设置为 ``DEBUG``,则需先将日志记录规范设置为 ``grpc=debug:info``。

如果您在客户端看到错误消息``remote error: tls: bad certificate`` ,则通常表示TLS服务器已启用客户端身份验证,并且该服务器未收到正确的客户端证书,或者收到了不信任的客户端证书。确保客户端正在发送其证书,并且该证书已被peer节点或orderer节点信任的CA证书所签名
如果您在客户端看到错误消息 ``remote error: tls: bad certificate``,则通常表示 TLS 服务器已启用客户端身份验证,并且该服务器未收到正确的客户端证书,或者收到了不信任的客户端证书。请确保客户端正在发送其证书,并且该证书已被 Peer 节点或排序节点信任的 CA 证书所签名

如果在链码日志中看到错误消息``remote error: tls: bad certificate`` ,请确保链码是使用Fabric v1.1或更高版本的程序构建的
如果在链码日志中看到错误消息 ``remote error: tls: bad certificate``,请确保链码是使用 Fabric v1.1 或更高版本的程序构建的


.. Licensed under Creative Commons Attribution 4.0 International License
Expand Down

0 comments on commit 09cb572

Please sign in to comment.