Asutorufaのブログ

こんにちは

Asutorufaのブログ

HTTPS相关

发布于 2021-04-18|更新于: 2021-04-18|分类 Network

最近遇到了一件事, 让我又多熟悉了下HTTPS的相关内容, 先看看HTTPS的结构

通常的HTTP网络结构如下

+------+| HTTP |+------+| TCP  |+------+|  IP  |+------+  ...  

HTTP的的相关内容是通过TCP明文传输的, 如果有中间监听者, 可以直接看结相关内容.

HTTPS的结构

Hyperledger Fabric组织更换证书

发布于 2021-01-24|更新于: 2021-01-24|分类 Hyperledger Fabric

前言

最近一直在研究关于如何给一个fabric的组织更换一个新的证书, 包括所有加入的通道, 所有peer和orderer.
用了很多看似完美的方法却多次测试失败, 最后总算找到一种方法.

{    "channel_group": {        "groups": {            "Application": {                "groups": {                    "Org1MSP": {                        "groups": { },                         "mod_policy": "Admins",                         "values": {                            "MSP": {                            }                        },                         "version": "0"                    },                     "Org2MSP": {                        "groups": { },                         "mod_policy": "Admins",                         "values": {                            "MSP": {                            }                        },                         "version": "0"                    }                },                 "version": "1"            },             "Orderer": {                "groups": {                    "OrdererOrg": {                        "groups": { },                         "values": {                            "MSP": {                            }                        },                         "version": "0"                    }                },                 "values": {                    "ConsensusType": {                        "mod_policy": "Admins",                         "value": {                            "metadata": {                                "consenters": [                                    {                                        "client_tls_cert": "==",                                         "host": "orderer.example.com",                                         "port": 7050,                                         "server_tls_cert": "=="                                    }                                ],                                 "options": {                                    "election_tick": 10,                                     "heartbeat_tick": 1,                                     "max_inflight_blocks": 5,                                     "snapshot_interval_size": 16777216,                                     "tick_interval": "500ms"                                }                            },                             "state": "STATE_NORMAL",                             "type": "etcdraft"                        },                         "version": "0"                    }                },                 "version": "0"            }        },         "sequence": "2"    }}

一个通道配置块类似上面这种,为了看的清楚有些内容我删了, 更换证书我们需要保证application及orderer的MSP是相同的, 否则更新配置块是不会成功的, 且我们得保证当前组织的raft节点的证书也要全部更换掉.

失败过程

使用GVT-g显卡虚拟化

发布于 2021-01-17|更新于: 2021-01-17|分类 Linux

为内核添加参数

比如grub/etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT=中添加

intel_iommu=on i915.enable_gvt=1 i915.enable_guc=0

启用modules

/etc/mkinitcpio.conf的MODULES=()`中添加:

# linux 5.14后,arch的linux内核模块已经不会勾选vfio-mdev,自测不影响gvt-gkvmgt vfio vfio-iommu-type1s

然后运行,我用的zen内核所以是linux-zen,默认内核是linux

sudo mkinitcpio -p linux-zen

重启计算机

查看/sys/devices/pci0000:00/0000:00:02.0/mdev_supported_types可以看见类似如下的目录

gpg使用

发布于 2020-10-02|更新于: 2020-10-02|分类 Linux

生成一个密钥

gpg --full-gen-key

之后会选择加密方式, 有效期, 用户名及邮箱, 密码, 按自己需求填就行了.

创建一个子密钥

gpg --edit-key [key hash] gpg> addkey#只有与前面是相同的, 按需求选择. gpg> save# 保存

导出密钥

gpg -o /path/gpg_key --export-secret-keys [key hash]

导出子密钥

gpg -o /path/gpg_key.sub --export-secret-subkeys [key hash]

导出吊销证书

gpg --generate-revocation [key hash]# 输出是文本内容, 复制保存下来就行了

DNS over HTTPS

发布于 2020-06-23|更新于: 2020-06-23|分类 Network

这个DNS系列现在有以下几篇文章

完整代码请看DNS


DOH就比较简单了,因为DOH使用的请求数据和应答数据均为之前的DNS协议格式,包括DNS,EDNS,DNSSEC…当然是否支持EDNS,DNSSEC需要看DNS服务器的支持情况
DOH的最主要的区别是把DNS使用的UDP,换成了HTTPS,这样就能防止DNS污染了,而且可以使用DNSSEC加上ESNI来防止证书劫持,DOH的协议在rfc8484中有定义
DOH主要有两种方式HTTP的GET请求和POST的请求

GET

GET请求需要使用BASE64对请求的字节数据进行序列化,然后作为参数传递,获取到的数据使用我们之前的解析进行解析就行了

func get(dReq []byte, server string) (body []byte, err error) {	query := strings.Replace(base64.URLEncoding.EncodeToString(dReq), "=", "", -1)	urls := "https://" + server + "/dns-query?dns=" + query	res, err := http.Get(urls)	if err != nil {		return nil, err	}	defer res.Body.Close()	body, err = ioutil.ReadAll(res.Body)	if err != nil {		return nil, err	}	return}

POST

POST并不需要进行序列化,直接把原始请求数据作为body就行了

DNSSEC

发布于 2020-06-23|更新于: 2020-06-23|分类 Network

这个DNS系列现在有以下几篇文章

完整代码请看DNS


注意: 这里我只完成了请求字段,主要原因是因为我学习这些DNS协议是为了找到防止DNS污染的方法,而DNSSEC并不能,而且应答头比较复杂,可能还要了解ssl和tls的知识,所以这里我没有完成代码,想了解的请看protocol change rfc4034 rfc4035 Algorithm

DNSSEC也是使用了EDNS,而且只需要改一个字段,就是之前提到Z,具体协议请看

    +0 (MSB)                +1 (LSB) +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+0: | EXTENDED-RCODE | VERSION |+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+2: |DO| Z |+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

完成请求头

EDNS

发布于 2020-06-22|更新于: 2020-06-22|分类 Network

这个DNS系列现在有以下几篇文章
DNS EDNS DNSSEC DNS over HTTPS 完整代码请看DNS

EDNS

上一篇我们写了DNS,EDNS就是DNS的功能扩充.
上一篇的DNS里头部有ARCOUNT的计数,EDNS就包含在那个里面,EDNS发送的请求在请求头之后的Additional中,应答在Answer和Authoritative之后,我们可看以下图,跟清晰了吧

    +---------------------+    |        Header       |    +---------------------+    |       Question      | the question for the name server    +---------------------+    |        Answer       | RRs answering the question    +---------------------+    |      Authority      | RRs pointing toward an authority    +---------------------+    |      Additional     | RRs holding additional information    +---------------------+

协议格式

具体协议内容请看rfc2671,rfc7871

©2026Asutorufa