关闭devMode后使用自己的证书时节点启动问题

Mah*_*ind 5 corda

在使用我们自己生成的证书(而不是的Corda节点生成的证书)的同时提出Corda代码时,我们面临以下问题devMode=true

以下是我们执行的步骤:

启动节点。我们收到以下错误:

节点启动期间的异常{} java.lang.IllegalArgumentException:无法找到网络参数文件,并且在net.corda.node.internal.NetworkParametersReader.retrieveNetworkParameters(NetworkParametersReader.kt:53)上未配置/无法访问兼容区域〜[corda-node-corda-4.0-SNAPSHOT.jar :?]位于net.corda.node.internal.NetworkParametersReader.access $ retrieveNetworkParameters(NetworkParametersReader.kt:17)〜[corda-node-corda-4.0-SNAPSHOT.jar :?]在net.corda.node.internal.NetworkParametersReader $ networkParameters $ 2.invoke(NetworkParametersReader.kt:26)〜[corda-node-corda-4.0-SNAPSHOT.jar :?]

现在,如果我们保留cordadevcakeys.jkscordatruststore.jks在资源目录中,则出现该节点。

查询:

  1. 在上述情况下,是否需要提供兼容区域网址?
  2. 如果可以的话,请您帮助我们了解配置相同内容的要求?
  3. 科尔达门卫如何发送证书?使用HTTPS / HTTP GET方法?还是其他协议?
  4. 您能否解释节点启动的资源目录中cordadevcakeys.jkscordatruststore.jks该资源目录上的依赖性以及devmode=false兼容性区域
  5. 您能否解释一下网络参数的需求和结构?
  6. 我们找不到网络参数的正确用法或文档。您能帮助您理解吗?
  7. 配置兼容区域是否与配置网络地图服务不同?
  8. 门卫与网络地图不同,门卫是一个离线实体,是否生成证书并在带外分发?这种理解对吗?
  9. 网络映射是单个文件还是离散的不同节点信息文件。如果是单个文件,能否请您共享格式和编码?/ network-map / node-info / {hash}中的哈希代表什么?
  10. 我对/ network-map / ack-parameters的用法感到困惑。您能解释一下吗?
  11. https://docs.corda.net/corda-configuration-file.html示例中,兼容性ZoneUrl与方案“ https://”一起提供。这个例子错了吗?
  12. 如何创建网络参数文件?我对文件有所了解。但是确切的编码我不知道。该文件是由独立程序创建的吗?谁签名?节点操作员是否需要每次手动接受新的网络参数集?我怎么知道/ network-map / network-parameters / {hash}的哈希?
  13. 请看我的理解附图。请让我知道理解和过程是否正确。

在此处输入图片说明

  1. 您能否指定将节点发送证书请求的端点?我看到了以下内容:https : //github.com/corda/corda/blob/a3d88f752d964d3768e153be189f196c600c8d7d/docs/source/example-code/src/main/resources/example-node-with-networkservices.conf

    networkServices : {
       doormanURL = "https://registration.corda.net"
       networkMapURL = "https://cz.corda.net"
    }
    
    Run Code Online (Sandbox Code Playgroud)

    您能否解释一下门卫URL所服务的其余端点?是/certificate

  2. 由于网络图具有以下结构:

    data class NetworkMap(  
        val nodeInfoHashes: List<SecureHash>,
        val networkParameterHash: SecureHash,
        val parametersUpdate: ParametersUpdate?
    ) 
    
    Run Code Online (Sandbox Code Playgroud)

    而且它不包含nodeinfo。以下步骤正确吗?

    1. 节点首先nodeinfo从网络映射中获取所有的散列
    2. 然后,节点nodeInfo一一下载所有的

    您能否解释nodeInfo上传的时间?同样,如果给定节点是第一个节点,则网络映射可能为空。节点是否会因为网络映射中没有任何内容而启动失败(因为没有nodeinfos)?

Joe*_*oel 2

注意:除了查看这些答案外,您还应该参考:

\n\n\n\n

答案如下:

\n\n
    \n
  1. 是的。抛出此错误消息的原因可能是您没有提供兼容区域 URL,或者是因为无法访问您提供的 URL 处的服务器

  2. \n
  3. 您需要提供一个网络地图服务器,该服务器侦听节点配置文件中列出的地址作为兼容区域 URL 并实现以下协议: https: //docs.corda.net/network-map.html#http -网络映射协议

  4. \n
  5. 门卫使用 HTTP 发送网络映射参数和节点信息,以响应遵守以下协议的 HTTP GET 请求: https: //docs.corda.net/network-map.html#http-network-map-protocol。未使用HTTPS,但由于网络参数和节点信息对象经过签名,无法篡改

  6. \n
  7. 这些.jks文件是开发密钥库,仅在开发模式下运行节点时使用(即当devMode=true

  8. \n
  9. 此处记录了对网络参数的需求: https: //docs.corda.net/network-map.html#network-parameters。网络参数的结构是以下类的序列化实例:https://github.com/corda/corda/blob/8504b65e7b14a95fc4486c82d1e3e77d1c4e3562/core/src/main/kotlin/net/corda/core/node/NetworkParameters.kt #L27

  10. \n
  11. 网络参数记录在此处:https ://docs.corda.net/network-map.html#network-parameters

  12. \n
  13. 不,它们是同一件事

  14. \n
  15. 是的,它们是不同的实体。门卫提供节点CA证书,而网络地图用于允许节点发现网络上的其他节点。根网络CA证书是带外流通的。然后,节点使用该--initial-registration标志(请参阅https://docs.corda.net/permissioning.html#connecting-to-a-compatibility-zone)来执行证书签名请求并创建其节点 CA 证书。然后,节点将在首次启动时创建其身份证书和 TLS 证书,并将其发送NodeInfo到网络映射

  16. \n
  17. 网络映射是单个文件。它是该类的序列化实例SignedDataWithCert<NetworkMap>hashURL 中的是SecureHashaSerialisedBytes<NodeInfo>

  18. \n
  19. 如果您使用 RPC 操作,节点将自动处理发送确认acceptNewNetworkParameters,记录如下: https: //docs.corda.net/network-map.html#network-parameters-update-process

  20. \n
  21. 使用 HTTPS 很好,但可选

  22. \n
  23. 网络参数文件是该类的序列化实例SignedDataWithCert<NetworkParameters>。它必须由签署网络映射对象的同一证书签署(即具有门卫 CA 角色的实体)。是的,节点需要接受新的网络参数 - 请参阅此处的文档: https: //docs.corda.net/network-map.html#network-parameters-update-process。您可以通过请求网络映射对象本身来获取哈希值。这个对象有一个networkParameterHash字段,就是你需要的哈希值。

  24. \n
  25. 图表有点错误。你需要做GET /network-map请求作为第一步,而不是最后一步。这将提供所需的网络参数哈希

  26. \n
  27. 这是正确的。你需要点击/certificate终点

  28. \n
  29. 您所描述的程序是正确的。节点nodeInfo在节点启动时上传它。它检查其是否nodeInfo已更改,如果已更改,则将新的更改提交到网络映射。如果节点启动时网络映射当前为空,则该节点将始终添加自己的网络映射nodeInfo到其本地缓存中,即使它下载的网络映射不包含该网络映射。但是,即使网络映射最初为空,它仍然会启动

  30. \n
\n