Skip to content

Commit f33e99b

Browse files
authored
feat: support mTLS (#124)
Fix #14
1 parent cdee822 commit f33e99b

File tree

12 files changed

+437
-21
lines changed

12 files changed

+437
-21
lines changed

.github/workflows/ci.yml

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ jobs:
2525
conf: Procfile-single-enable-v2
2626
- version: 3.4.0
2727
conf: Procfile-single-enable-tls
28+
- version: 3.4.0
29+
conf: Procfile-single-enable-mtls
2830

2931
runs-on: "ubuntu-20.04"
3032
env:
@@ -50,12 +52,13 @@ jobs:
5052
- name: install
5153
run: |
5254
git clone https://github.com/openresty/test-nginx.git test-nginx
55+
cd test-nginx && (sudo cpanm --notest . > build.log 2>&1 || (cat build.log && exit 1)) && cd ..
56+
57+
wget https://raw.githubusercontent.com/api7/apisix-build-tools/master/build-apisix-openresty.sh
58+
chmod +x build-apisix-openresty.sh
59+
OR_PREFIX=$OPENRESTY_PREFIX ./build-apisix-openresty.sh latest
60+
5361
sudo luarocks make rockspec/lua-resty-etcd-master-0.1-0.rockspec
54-
wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -
55-
sudo apt-get -y install software-properties-common
56-
sudo add-apt-repository -y "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main"
57-
sudo apt-get update
58-
sudo apt-get install openresty
5962
sudo luarocks install luacheck > build.log 2>&1 || (cat build.log && exit 1)
6063
sudo luarocks install dkjson > build.log 2>&1 || (cat build.log && exit 1)
6164
make utils
@@ -66,13 +69,13 @@ jobs:
6669
go get github.com/mattn/goreman
6770
6871
- name: script
72+
if: matrix.conf != 'Procfile-single-enable-mtls'
6973
run: |
7074
if [[ "$GOREMAN_CONF" == "Procfile-single-enable-tls" ]]; then
7175
export ETCD_ENABLE_TLS=TRUE
7276
export AUTH_ENDPOINT_V2=https://127.0.0.1:12379
7377
export ETCDCTL_EXTRA_OPTS="--insecure-transport=false --insecure-skip-tls-verify=true"
7478
fi
75-
cd test-nginx && (sudo cpanm --notest . > build.log 2>&1 || (cat build.log && exit 1)) && cd ..
7679
export PATH=$OPENRESTY_PREFIX/nginx/sbin:$OPENRESTY_PREFIX/luajit/bin:$PWD/etcd-v$ETCD_VER-linux-amd64:$PATH
7780
etcd --version
7881
goreman -f ./t/$GOREMAN_CONF start > goreman.log 2>&1 &
@@ -87,3 +90,13 @@ jobs:
8790
luajit -v | awk '{print$2}'| grep 2.1
8891
make lint || exit 1
8992
make test
93+
94+
- name: script
95+
if: matrix.conf == 'Procfile-single-enable-mtls'
96+
run: |
97+
export ETCD_ENABLE_MTLS=TRUE
98+
export PATH=$OPENRESTY_PREFIX/nginx/sbin:$OPENRESTY_PREFIX/luajit/bin:$PWD/etcd-v$ETCD_VER-linux-amd64:$PATH
99+
etcd --version
100+
goreman -f ./t/$GOREMAN_CONF start > goreman.log 2>&1 &
101+
sleep 5
102+
prove -I../test-nginx/lib t/v3/mtls.t

api_v3.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ Method
4141
to suit [etcd v3 api gateway](https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_grpc_gateway.md#notes).
4242
it will autofill by fetching etcd version if this option empty.
4343
- `ssl_verify`: boolean - whether to verify the etcd certificate when originating TLS connection with etcd (if you want to communicate to etcd with TLS connection, use `https` scheme in your `http_host`), default is `true`.
44+
- `ssl_cert_path`: string - path to the client certificate
45+
- `ssl_key_path`: string - path to the client key
4446
- `serializer`: string - serializer type, default `json`, also support `raw` to keep origin string value.
4547

4648
The client method returns either a `etcd` object or an `error string`.

lib/resty/etcd/utils.lua

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
-- https://github.com/ledgetech/lua-resty-http
1+
-- https://github.com/api7/lua-resty-http
22
local http = require("resty.http")
33
local clear_tab = require("table.clear")
44
local split = require("ngx.re").split
@@ -11,6 +11,11 @@ local pairs = pairs
1111
local type = type
1212

1313

14+
if not http.tls_handshake then
15+
error("Bad http library. Should use api7-lua-resty-http instead")
16+
end
17+
18+
1419
local _M = {http = http}
1520

1621
local normalize

lib/resty/etcd/v3.lua

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ local function _request_uri(self, endpoint, method, uri, opts, timeout, ignore_a
7474
headers = headers,
7575
keepalive = keepalive,
7676
ssl_verify = self.ssl_verify,
77+
ssl_cert_path = self.ssl_cert_path,
78+
ssl_key_path = self.ssl_key_path,
7779
})
7880

7981
if err then
@@ -118,6 +120,9 @@ function _M.new(opts)
118120
local user = opts.user
119121
local password = opts.password
120122
local ssl_verify = opts.ssl_verify
123+
if ssl_verify == nil then
124+
ssl_verify = true
125+
end
121126
local serializer = opts.serializer
122127

123128
if not typeof.uint(timeout) then
@@ -193,6 +198,9 @@ function _M.new(opts)
193198
key_prefix = key_prefix,
194199
ssl_verify = ssl_verify,
195200
serializer = serializer,
201+
202+
ssl_cert_path = opts.ssl_cert_path,
203+
ssl_key_path = opts.ssl_key_path,
196204
},
197205
mt)
198206
end
@@ -584,26 +592,21 @@ local function request_chunk(self, endpoint, method, scheme, host, port, path, o
584592
end
585593
end
586594

587-
ok, err = http_cli:connect(host, port)
595+
ok, err = http_cli:connect({
596+
scheme = scheme,
597+
host = host,
598+
port = port,
599+
ssl_verify = self.ssl_verify,
600+
ssl_cert_path = self.ssl_cert_path,
601+
ssl_key_path = self.ssl_key_path,
602+
})
588603
if not ok then
589604
if health_check.conf ~= nil then
590605
health_check.report_failure(endpoint.http_host)
591606
end
592607
return nil, err
593608
end
594609

595-
if scheme == "https" then
596-
local verify = true
597-
if self.ssl_verify == false then
598-
verify = false
599-
end
600-
601-
ok, err = http_cli:ssl_handshake(nil, host, verify)
602-
if not ok then
603-
return nil, err
604-
end
605-
end
606-
607610
local res
608611
res, err = http_cli:request({
609612
method = method,

rockspec/lua-resty-etcd-master-0.1-0.rockspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ description = {
1313
}
1414

1515
dependencies = {
16-
"lua-resty-http = 0.15",
16+
"api7-lua-resty-http = 0.1.0",
1717
"lua-typeof = 0.1"
1818
}
1919

t/Procfile-single-enable-mtls

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Use goreman to run `go get github.com/mattn/goreman`
2+
etcd0: etcd --enable-v2
3+
etcd1: etcd --name infra1 --listen-client-urls https://127.0.0.1:12379 --advertise-client-urls https://127.0.0.1:12379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --cert-file ./t/certs/mtls_server.crt --key-file ./t/certs/mtls_server.key --client-cert-auth --trusted-ca-file ./t/certs/mtls_ca.crt --enable-v2
4+
etcd2: etcd --name infra2 --listen-client-urls https://127.0.0.1:22379 --advertise-client-urls https://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --cert-file ./t/certs/mtls_server.crt --key-file ./t/certs/mtls_server.key --client-cert-auth --trusted-ca-file ./t/certs/mtls_ca.crt --enable-v2
5+
etcd3: etcd --name infra3 --listen-client-urls https://127.0.0.1:32379 --advertise-client-urls https://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --cert-file ./t/certs/mtls_server.crt --key-file ./t/certs/mtls_server.key --client-cert-auth --trusted-ca-file ./t/certs/mtls_ca.crt --enable-v2
6+
# A learner node can be started using Procfile.learner

t/certs/mtls_ca.crt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDSjCCAjICCQDmBdlKmGaJITANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJj
3+
bjESMBAGA1UECAwJR3VhbmdEb25nMQ8wDQYDVQQHDAZaaHVIYWkxDTALBgNVBAoM
4+
BGFwaTcxDDAKBgNVBAsMA29wczEWMBQGA1UEAwwNY2EuYXBpc2l4LmRldjAeFw0y
5+
MDA2MjAxMzEzNDFaFw0zMDA2MTgxMzEzNDFaMGcxCzAJBgNVBAYTAmNuMRIwEAYD
6+
VQQIDAlHdWFuZ0RvbmcxDzANBgNVBAcMBlpodUhhaTENMAsGA1UECgwEYXBpNzEM
7+
MAoGA1UECwwDb3BzMRYwFAYDVQQDDA1jYS5hcGlzaXguZGV2MIIBIjANBgkqhkiG
8+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAun+Gq/bp7CcZ9i5ZdjuCvyZVXsiAaBELVi/Q
9+
QQtC90z5aQyWudTPB1Lcpk5HosbT73eHh03hFCRMFv6Miase1T59KJ4zGSFKoFEr
10+
j2cbNmWFJEhTGce1pn52zMzZrXERYhKBA0n4bwHK/IND0XeEZ2RQPtGnGBqj3vKL
11+
3px+mOzIeMy4VMSkIkL2jlgo5jN0IjQIsvHRSrhIWzFhr6qtIJhuh0oI6gs+/yvA
12+
vspGeVFtIg/1PY3bOgFfhJg08/Aw7vgMjmADypEbBabLaWOZ8RZ3Ci2is6cL/1wX
13+
Sr8OIIBXTmTGmXEuSsMsBgC7BFwEY4XEsGx8QQJsrh1dSf2t0QIDAQABMA0GCSqG
14+
SIb3DQEBBQUAA4IBAQCKC98wWieC66NHAYb9ICOwr+XTmoFABpFNaM4bPXMD4IUq
15+
BaMGfBh92e4ANz2bm1D3J0ZNH3TVC7OhF2ymi6wSMde/Ygkh5xu2HgTEX2QTDQVd
16+
J27jwEIe45VLdvuu33jvE/iNNQHI6J6zP45gs/FS+CwMoYRnNcC+428YUf9XMcgM
17+
UkeMOnnkhw1OUzmoACY705hAEAPFbb7KkQ109lgbh6cucMy7Nw/N1t6Pyuxlqteg
18+
d8Wy6VFYPRRK43dYoA9B0yvsZCERvxgR1IrDjo0B2wIDzM4eM6ldLfnr8pPnBFfS
19+
g/Pdo6VZsXeSv3o00lBEY/25Vqxn3sPBK4E7a+mX
20+
-----END CERTIFICATE-----

t/certs/mtls_client.crt

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
Certificate:
2+
Data:
3+
Version: 1 (0x0)
4+
Serial Number: 64207 (0xfacf)
5+
Signature Algorithm: sha256WithRSAEncryption
6+
Issuer: C=cn, ST=GuangDong, L=ZhuHai, O=api7, OU=ops, CN=ca.apisix.dev
7+
Validity
8+
Not Before: Jun 20 13:15:00 2020 GMT
9+
Not After : Jul 8 13:15:00 2030 GMT
10+
Subject: C=cn, ST=GuangDong, O=api7, L=ZhuHai, CN=client.apisix.dev
11+
Subject Public Key Info:
12+
Public Key Algorithm: rsaEncryption
13+
Public-Key: (2048 bit)
14+
Modulus:
15+
00:9f:28:8f:2e:88:41:ff:89:f6:62:91:29:d1:6b:
16+
7f:c4:d8:1e:28:85:55:91:c2:3a:3f:23:1c:83:11:
17+
6a:26:81:1e:2d:2e:4d:69:48:98:4f:ff:84:82:2d:
18+
6b:8c:41:31:56:4d:b4:aa:b7:52:05:63:2e:19:6d:
19+
54:87:1f:21:a8:34:f9:89:1a:b1:d1:24:21:84:fa:
20+
c8:29:7f:39:f4:1a:35:78:95:74:0f:24:3d:24:e8:
21+
64:75:09:7d:8c:a3:54:d6:74:5a:92:27:f1:dc:e4:
22+
04:30:71:01:67:3d:fa:0b:03:0b:01:cb:8c:aa:ae:
23+
59:9f:f7:a6:40:53:2b:65:ff:b6:64:8d:fe:0f:ee:
24+
62:64:24:7b:4c:fd:68:12:47:4a:46:86:36:53:00:
25+
64:5f:e4:32:56:a0:ee:75:92:2d:e2:dc:92:3e:d7:
26+
99:8e:86:69:e7:0a:99:e4:b2:71:95:3d:f9:7d:da:
27+
af:76:1f:3f:f8:bf:78:aa:13:e5:13:84:f6:11:a5:
28+
c1:9b:9d:d7:73:32:f3:da:09:78:9a:be:0f:01:fe:
29+
ed:8b:55:b9:f8:97:46:9d:6a:6a:90:19:ea:4e:02:
30+
30:ff:d7:1a:da:39:53:f6:5b:6d:96:d0:fc:ed:0d:
31+
72:78:ac:b7:be:71:aa:4d:4b:8a:06:b9:25:1f:90:
32+
81:0d
33+
Exponent: 65537 (0x10001)
34+
Signature Algorithm: sha256WithRSAEncryption
35+
72:a7:1f:15:21:ba:4f:e7:2f:64:a0:e5:40:7c:e0:ea:09:7b:
36+
95:cf:80:d0:6f:54:c2:8d:d1:cf:cd:00:f2:95:20:f9:e2:9e:
37+
f5:1c:1b:f9:87:78:a7:b1:3f:31:34:b0:c8:1a:44:da:2c:ef:
38+
93:76:d7:df:44:5f:27:6a:51:cb:09:f2:32:f4:70:db:50:da:
39+
4e:49:41:75:e0:d2:7b:4d:0b:8b:6e:0a:02:0a:00:e9:ce:f3:
40+
bf:72:e6:14:86:df:a7:b9:ef:09:80:a1:52:a7:69:b8:23:7a:
41+
3d:3d:cc:6d:64:91:7b:c0:9a:98:2a:a3:17:95:0a:ee:e1:ed:
42+
f2:be:02:ea:cb:6e:c1:82:4d:a1:e8:03:9a:46:d6:d7:07:0f:
43+
12:50:7e:95:5c:6c:17:f0:40:34:81:5b:74:90:8e:24:6a:5f:
44+
8e:77:ff:4d:67:c3:a9:1b:39:e2:ca:62:b6:89:ca:c6:86:f1:
45+
95:36:2b:cf:96:a5:6e:89:0e:e6:dc:88:78:f0:7d:09:e9:53:
46+
65:35:e9:72:a2:be:1c:5e:b8:a6:2b:57:f2:0d:2f:4b:31:8f:
47+
f7:d9:ad:a3:58:12:bb:c9:5b:38:79:96:5b:c8:74:d2:e6:79:
48+
23:e6:bd:be:74:25:42:2c:fa:50:ea:9f:53:28:6d:35:f3:0e:
49+
9b:82:15:70
50+
-----BEGIN CERTIFICATE-----
51+
MIIDOjCCAiICAwD6zzANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJjbjESMBAG
52+
A1UECAwJR3VhbmdEb25nMQ8wDQYDVQQHDAZaaHVIYWkxDTALBgNVBAoMBGFwaTcx
53+
DDAKBgNVBAsMA29wczEWMBQGA1UEAwwNY2EuYXBpc2l4LmRldjAeFw0yMDA2MjAx
54+
MzE1MDBaFw0zMDA3MDgxMzE1MDBaMF0xCzAJBgNVBAYTAmNuMRIwEAYDVQQIDAlH
55+
dWFuZ0RvbmcxDTALBgNVBAoMBGFwaTcxDzANBgNVBAcMBlpodUhhaTEaMBgGA1UE
56+
AwwRY2xpZW50LmFwaXNpeC5kZXYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
57+
AoIBAQCfKI8uiEH/ifZikSnRa3/E2B4ohVWRwjo/IxyDEWomgR4tLk1pSJhP/4SC
58+
LWuMQTFWTbSqt1IFYy4ZbVSHHyGoNPmJGrHRJCGE+sgpfzn0GjV4lXQPJD0k6GR1
59+
CX2Mo1TWdFqSJ/Hc5AQwcQFnPfoLAwsBy4yqrlmf96ZAUytl/7Zkjf4P7mJkJHtM
60+
/WgSR0pGhjZTAGRf5DJWoO51ki3i3JI+15mOhmnnCpnksnGVPfl92q92Hz/4v3iq
61+
E+UThPYRpcGbnddzMvPaCXiavg8B/u2LVbn4l0adamqQGepOAjD/1xraOVP2W22W
62+
0PztDXJ4rLe+capNS4oGuSUfkIENAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAHKn
63+
HxUhuk/nL2Sg5UB84OoJe5XPgNBvVMKN0c/NAPKVIPninvUcG/mHeKexPzE0sMga
64+
RNos75N2199EXydqUcsJ8jL0cNtQ2k5JQXXg0ntNC4tuCgIKAOnO879y5hSG36e5
65+
7wmAoVKnabgjej09zG1kkXvAmpgqoxeVCu7h7fK+AurLbsGCTaHoA5pG1tcHDxJQ
66+
fpVcbBfwQDSBW3SQjiRqX453/01nw6kbOeLKYraJysaG8ZU2K8+WpW6JDubciHjw
67+
fQnpU2U16XKivhxeuKYrV/INL0sxj/fZraNYErvJWzh5llvIdNLmeSPmvb50JUIs
68+
+lDqn1MobTXzDpuCFXA=
69+
-----END CERTIFICATE-----

t/certs/mtls_client.key

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEpAIBAAKCAQEAnyiPLohB/4n2YpEp0Wt/xNgeKIVVkcI6PyMcgxFqJoEeLS5N
3+
aUiYT/+Egi1rjEExVk20qrdSBWMuGW1Uhx8hqDT5iRqx0SQhhPrIKX859Bo1eJV0
4+
DyQ9JOhkdQl9jKNU1nRakifx3OQEMHEBZz36CwMLAcuMqq5Zn/emQFMrZf+2ZI3+
5+
D+5iZCR7TP1oEkdKRoY2UwBkX+QyVqDudZIt4tySPteZjoZp5wqZ5LJxlT35fdqv
6+
dh8/+L94qhPlE4T2EaXBm53XczLz2gl4mr4PAf7ti1W5+JdGnWpqkBnqTgIw/9ca
7+
2jlT9lttltD87Q1yeKy3vnGqTUuKBrklH5CBDQIDAQABAoIBAHDe5bPdQ9jCcW3z
8+
fpGax/DER5b6//UvpfkSoGy/E+Wcmdb2yEVLC2FoVwOuzF+Z+DA5SU/sVAmoDZBQ
9+
vapZxJeygejeeo5ULkVNSFhNdr8LOzJ54uW+EHK1MFDj2xq61jaEK5sNIvRA7Eui
10+
SJl8FXBrxwmN3gNJRBwzF770fImHUfZt0YU3rWKw5Qin7QnlUzW2KPUltnSEq/xB
11+
kIzyWpuj7iAm9wTjH9Vy06sWCmxj1lzTTXlanjPb1jOTaOhbQMpyaAzRgQN8PZiE
12+
YKCarzVj7BJr7/vZYpnQtQDY12UL5n33BEqMP0VNHVqv+ZO3bktfvlwBru5ZJ7Cf
13+
URLsSc0CgYEAyz7FzV7cZYgjfUFD67MIS1HtVk7SX0UiYCsrGy8zA19tkhe3XVpc
14+
CZSwkjzjdEk0zEwiNAtawrDlR1m2kverbhhCHqXUOHwEpujMBjeJCNUVEh3OABr8
15+
vf2WJ6D1IRh8FA5CYLZP7aZ41fcxAnvIPAEThemLQL3C4H5H5NG2WFsCgYEAyHhP
16+
onpS/Eo/OXKYFLR/mvjizRVSomz1lVVL+GWMUYQsmgsPyBJgyAOX3Pqt9catgxhM
17+
DbEr7EWTxth3YeVzamiJPNVK0HvCax9gQ0KkOmtbrfN54zBHOJ+ieYhsieZLMgjx
18+
iu7Ieo6LDGV39HkvekzutZpypiCpKlMaFlCFiLcCgYEAmAgRsEj4Nh665VPvuZzH
19+
ZIgZMAlwBgHR7/v6l7AbybcVYEXLTNJtrGEEH6/aOL8V9ogwwZuIvb/TEidCkfcf
20+
zg/pTcGf2My0MiJLk47xO6EgzNdso9mMG5ZYPraBBsuo7NupvWxCp7NyCiOJDqGH
21+
K5NmhjInjzsjTghIQRq5+qcCgYEAxnm/NjjvslL8F69p/I3cDJ2/RpaG0sMXvbrO
22+
VWaMryQyWGz9OfNgGIbeMu2Jj90dar6ChcfUmb8lGOi2AZl/VGmc/jqaMKFnElHl
23+
J5JyMFicUzPMiG8DBH+gB71W4Iy+BBKwugHBQP2hkytewQ++PtKuP+RjADEz6vCN
24+
0mv0WS8CgYBnbMRP8wIOLJPRMw/iL9BdMf606X4xbmNn9HWVp2mH9D3D51kDFvls
25+
7y2vEaYkFv3XoYgVN9ZHDUbM/YTUozKjcAcvz0syLQb8wRwKeo+XSmo09+360r18
26+
zRugoE7bPl39WdGWaW3td0qf1r9z3sE2iWUTJPRQ3DYpsLOYIgyKmw==
27+
-----END RSA PRIVATE KEY-----

t/certs/mtls_server.crt

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
Certificate:
2+
Data:
3+
Version: 1 (0x0)
4+
Serial Number: 64206 (0xface)
5+
Signature Algorithm: sha256WithRSAEncryption
6+
Issuer: C=cn, ST=GuangDong, L=ZhuHai, O=api7, OU=ops, CN=ca.apisix.dev
7+
Validity
8+
Not Before: Jun 20 13:14:34 2020 GMT
9+
Not After : Jun 18 13:14:34 2030 GMT
10+
Subject: C=cn, ST=GuangDong, O=api7, L=ZhuHai, CN=admin.apisix.dev
11+
Subject Public Key Info:
12+
Public Key Algorithm: rsaEncryption
13+
Public-Key: (2048 bit)
14+
Modulus:
15+
00:9b:45:2a:e1:c9:6e:a7:af:af:bd:46:5c:5e:5f:
16+
72:66:02:78:69:16:fd:f9:69:8e:47:68:0f:8d:35:
17+
92:c4:14:40:5c:cf:57:3d:41:ea:13:7b:f4:de:c8:
18+
ab:e8:62:56:1e:60:61:f6:38:65:5f:30:b5:91:25:
19+
79:07:12:45:ce:24:31:86:1f:2c:a6:cb:1d:8b:4b:
20+
9e:5f:1f:c7:b6:f3:e8:98:ee:b3:70:c7:9e:5d:10:
21+
ce:29:e4:22:68:69:9e:df:ae:f6:bb:11:e8:b8:f1:
22+
07:bf:2d:d5:57:f2:e4:07:8a:da:d2:7b:8a:53:d1:
23+
b4:f4:42:19:9a:14:98:01:3e:23:27:3a:0f:ad:d0:
24+
1d:c5:31:9a:ee:ae:df:7f:fb:2e:34:0b:51:ca:b4:
25+
8c:59:ae:86:5f:95:69:2b:4a:c6:2d:a5:ae:04:46:
26+
7a:93:09:15:72:0a:78:ef:98:7d:00:b5:b4:b2:f2:
27+
e2:a9:2e:04:fb:de:84:ad:da:8e:a3:31:53:3a:d5:
28+
91:cd:77:f5:b8:ea:eb:14:aa:d9:62:d1:12:79:87:
29+
08:27:6d:c1:b9:e3:7d:f1:07:52:3c:a3:34:6a:c1:
30+
96:cf:a2:84:cc:14:50:49:40:0b:38:3c:3b:1e:df:
31+
57:6f:f2:05:35:92:9b:4f:b1:21:0b:f7:62:3a:2d:
32+
83:c7
33+
Exponent: 65537 (0x10001)
34+
Signature Algorithm: sha256WithRSAEncryption
35+
7a:1c:a3:d8:d4:97:5d:91:d2:c8:31:c4:40:ef:f1:38:ac:5c:
36+
b9:74:66:81:94:4f:71:02:38:49:5a:0d:7b:10:17:73:a5:96:
37+
3e:de:0e:a4:75:8c:1b:c7:51:f9:f6:eb:9d:f4:bd:4c:1c:92:
38+
41:d0:16:c6:73:c1:f9:7c:b6:71:7d:16:53:13:fa:70:90:c0:
39+
95:e3:a3:51:30:96:02:f2:32:32:fe:a9:d1:ef:c5:7e:04:58:
40+
ca:20:ef:d0:43:8c:52:8d:52:3a:71:ed:0f:87:4e:8b:c6:28:
41+
51:56:13:fd:71:81:10:cc:2f:2c:aa:8d:6a:93:d7:52:34:08:
42+
23:7b:2b:a7:a4:3e:6b:8f:c3:af:59:b9:1c:b8:d8:6c:a3:88:
43+
c7:bd:b5:e1:eb:6b:6a:f2:7d:a3:89:c6:b0:21:f8:1b:9a:dc:
44+
bf:ef:d6:21:91:7f:65:99:4d:f4:49:24:ab:46:09:a0:c9:a1:
45+
64:14:f4:56:73:ce:1b:22:dd:b7:1f:58:0f:29:ae:6a:6e:41:
46+
6e:b4:5c:90:97:4e:59:4e:cf:e3:a1:89:d1:5a:65:a3:68:2f:
47+
b9:97:82:6f:4c:21:cb:f6:9b:7d:fd:d8:07:70:14:cd:10:fb:
48+
bf:03:70:fa:51:7c:56:4c:1b:a5:87:d3:1b:18:5c:22:87:6f:
49+
04:08:59:53
50+
-----BEGIN CERTIFICATE-----
51+
MIIDOTCCAiECAwD6zjANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJjbjESMBAG
52+
A1UECAwJR3VhbmdEb25nMQ8wDQYDVQQHDAZaaHVIYWkxDTALBgNVBAoMBGFwaTcx
53+
DDAKBgNVBAsMA29wczEWMBQGA1UEAwwNY2EuYXBpc2l4LmRldjAeFw0yMDA2MjAx
54+
MzE0MzRaFw0zMDA2MTgxMzE0MzRaMFwxCzAJBgNVBAYTAmNuMRIwEAYDVQQIDAlH
55+
dWFuZ0RvbmcxDTALBgNVBAoMBGFwaTcxDzANBgNVBAcMBlpodUhhaTEZMBcGA1UE
56+
AwwQYWRtaW4uYXBpc2l4LmRldjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
57+
ggEBAJtFKuHJbqevr71GXF5fcmYCeGkW/flpjkdoD401ksQUQFzPVz1B6hN79N7I
58+
q+hiVh5gYfY4ZV8wtZEleQcSRc4kMYYfLKbLHYtLnl8fx7bz6Jjus3DHnl0Qzink
59+
Imhpnt+u9rsR6LjxB78t1Vfy5AeK2tJ7ilPRtPRCGZoUmAE+Iyc6D63QHcUxmu6u
60+
33/7LjQLUcq0jFmuhl+VaStKxi2lrgRGepMJFXIKeO+YfQC1tLLy4qkuBPvehK3a
61+
jqMxUzrVkc139bjq6xSq2WLREnmHCCdtwbnjffEHUjyjNGrBls+ihMwUUElACzg8
62+
Ox7fV2/yBTWSm0+xIQv3Yjotg8cCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAehyj
63+
2NSXXZHSyDHEQO/xOKxcuXRmgZRPcQI4SVoNexAXc6WWPt4OpHWMG8dR+fbrnfS9
64+
TBySQdAWxnPB+Xy2cX0WUxP6cJDAleOjUTCWAvIyMv6p0e/FfgRYyiDv0EOMUo1S
65+
OnHtD4dOi8YoUVYT/XGBEMwvLKqNapPXUjQII3srp6Q+a4/Dr1m5HLjYbKOIx721
66+
4etravJ9o4nGsCH4G5rcv+/WIZF/ZZlN9Ekkq0YJoMmhZBT0VnPOGyLdtx9YDymu
67+
am5BbrRckJdOWU7P46GJ0Vplo2gvuZeCb0why/abff3YB3AUzRD7vwNw+lF8Vkwb
68+
pYfTGxhcIodvBAhZUw==
69+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)