Add server_name_indication and verify option (#4349)
Add server_name_indication and verify option
This commit is contained in:
parent
277cab86d3
commit
f08ddec296
|
@ -2,9 +2,9 @@ ARG BUILD_FROM=postgres:11
|
||||||
FROM ${BUILD_FROM}
|
FROM ${BUILD_FROM}
|
||||||
ARG POSTGRES_USER=postgres
|
ARG POSTGRES_USER=postgres
|
||||||
COPY --chown=$POSTGRES_USER .ci/compatibility_tests/pgsql/pg_hba.conf /var/lib/postgresql/pg_hba.conf
|
COPY --chown=$POSTGRES_USER .ci/compatibility_tests/pgsql/pg_hba.conf /var/lib/postgresql/pg_hba.conf
|
||||||
COPY --chown=$POSTGRES_USER apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/server.key /var/lib/postgresql/server.key
|
COPY --chown=$POSTGRES_USER apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/server-key.pem /var/lib/postgresql/server.key
|
||||||
COPY --chown=$POSTGRES_USER apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/server.crt /var/lib/postgresql/server.crt
|
COPY --chown=$POSTGRES_USER apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/server-cert.pem /var/lib/postgresql/server.crt
|
||||||
COPY --chown=$POSTGRES_USER apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/root.crt /var/lib/postgresql/root.crt
|
COPY --chown=$POSTGRES_USER apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/ca.pem /var/lib/postgresql/root.crt
|
||||||
RUN chmod 600 /var/lib/postgresql/pg_hba.conf
|
RUN chmod 600 /var/lib/postgresql/pg_hba.conf
|
||||||
RUN chmod 600 /var/lib/postgresql/server.key
|
RUN chmod 600 /var/lib/postgresql/server.key
|
||||||
RUN chmod 600 /var/lib/postgresql/server.crt
|
RUN chmod 600 /var/lib/postgresql/server.crt
|
||||||
|
|
|
@ -82,9 +82,11 @@ jobs:
|
||||||
docker-compose -f .ci/compatibility_tests/docker-compose-mongo-tls.yaml up -d
|
docker-compose -f .ci/compatibility_tests/docker-compose-mongo-tls.yaml up -d
|
||||||
cat <<-EOF >> "$GITHUB_ENV"
|
cat <<-EOF >> "$GITHUB_ENV"
|
||||||
EMQX_AUTH__MONGO__SSL=on
|
EMQX_AUTH__MONGO__SSL=on
|
||||||
EMQX_AUTH__MONGO__CACERTFILE=/emqx/apps/emqx_auth_mongo/test/emqx_auth_mongo_SUITE_data/ca.pem
|
EMQX_AUTH__MONGO__SSL__CACERTFILE=/emqx/apps/emqx_auth_mongo/test/emqx_auth_mongo_SUITE_data/ca.pem
|
||||||
EMQX_AUTH__MONGO__CERTFILE=/emqx/apps/emqx_auth_mongo/test/emqx_auth_mongo_SUITE_data/client-cert.pem
|
EMQX_AUTH__MONGO__SSL__CERTFILE=/emqx/apps/emqx_auth_mongo/test/emqx_auth_mongo_SUITE_data/client-cert.pem
|
||||||
EMQX_AUTH__MONGO__KEYFILE=/emqx/apps/emqx_auth_mongo/test/emqx_auth_mongo_SUITE_data/client-key.pem
|
EMQX_AUTH__MONGO__SSL__KEYFILE=/emqx/apps/emqx_auth_mongo/test/emqx_auth_mongo_SUITE_data/client-key.pem
|
||||||
|
EMQX_AUTH__MONGO__SSL__VERIFY=true
|
||||||
|
EMQX_AUTH__MONGO__SSL__SERVER_NAME_INDICATION=disable
|
||||||
EOF
|
EOF
|
||||||
- name: setup
|
- name: setup
|
||||||
env:
|
env:
|
||||||
|
@ -148,6 +150,8 @@ jobs:
|
||||||
EMQX_AUTH__MYSQL__SSL__CACERTFILE=/emqx/apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data/ca.pem
|
EMQX_AUTH__MYSQL__SSL__CACERTFILE=/emqx/apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data/ca.pem
|
||||||
EMQX_AUTH__MYSQL__SSL__CERTFILE=/emqx/apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data/client-cert.pem
|
EMQX_AUTH__MYSQL__SSL__CERTFILE=/emqx/apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data/client-cert.pem
|
||||||
EMQX_AUTH__MYSQL__SSL__KEYFILE=/emqx/apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data/client-key.pem
|
EMQX_AUTH__MYSQL__SSL__KEYFILE=/emqx/apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data/client-key.pem
|
||||||
|
EMQX_AUTH__MYSQL__SSL__VERIFY=true
|
||||||
|
EMQX_AUTH__MYSQL__SSL__SERVER_NAME_INDICATION=disable
|
||||||
EOF
|
EOF
|
||||||
- name: setup
|
- name: setup
|
||||||
env:
|
env:
|
||||||
|
@ -214,7 +218,11 @@ jobs:
|
||||||
docker-compose -f .ci/compatibility_tests/docker-compose-pgsql-tls.yaml up -d
|
docker-compose -f .ci/compatibility_tests/docker-compose-pgsql-tls.yaml up -d
|
||||||
cat <<-EOF >> "$GITHUB_ENV"
|
cat <<-EOF >> "$GITHUB_ENV"
|
||||||
EMQX_AUTH__PGSQL__SSL=on
|
EMQX_AUTH__PGSQL__SSL=on
|
||||||
EMQX_AUTH__PGSQL__SSL__CACERTFILE=/emqx/apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/root.crt
|
EMQX_AUTH__PGSQL__SSL__CACERTFILE=/emqx/apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/ca.pem
|
||||||
|
EMQX_AUTH__PGSQL__SSL__CERTFILE=/emqx/apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/client-cert.pem
|
||||||
|
EMQX_AUTH__PGSQL__SSL__KEYFILE=/emqx/apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/client-key.pem
|
||||||
|
EMQX_AUTH__PGSQL__SSL__VERIFY=true
|
||||||
|
EMQX_AUTH__PGSQL__SSL__SERVER_NAME_INDICATION=disable
|
||||||
EOF
|
EOF
|
||||||
- name: setup
|
- name: setup
|
||||||
env:
|
env:
|
||||||
|
@ -288,6 +296,8 @@ jobs:
|
||||||
EMQX_AUTH__REDIS__SSL__CACERTFILE=/emqx/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE_data/certs/ca.crt
|
EMQX_AUTH__REDIS__SSL__CACERTFILE=/emqx/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE_data/certs/ca.crt
|
||||||
EMQX_AUTH__REDIS__SSL__CERTFILE=/emqx/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE_data/certs/redis.crt
|
EMQX_AUTH__REDIS__SSL__CERTFILE=/emqx/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE_data/certs/redis.crt
|
||||||
EMQX_AUTH__REDIS__SSL__KEYFILE=/emqx/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE_data/certs/redis.key
|
EMQX_AUTH__REDIS__SSL__KEYFILE=/emqx/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE_data/certs/redis.key
|
||||||
|
EMQX_AUTH__REDIS__SSL__VERIFY=true
|
||||||
|
EMQX_AUTH__REDIS__SSL__SERVER_NAME_INDICATION=disable
|
||||||
EOF
|
EOF
|
||||||
- name: setup
|
- name: setup
|
||||||
env:
|
env:
|
||||||
|
|
|
@ -151,3 +151,18 @@ auth.http.pool_size = 32
|
||||||
##
|
##
|
||||||
## Value: File
|
## Value: File
|
||||||
## auth.http.ssl.keyfile = {{ platform_etc_dir }}/certs/client-key.pem
|
## auth.http.ssl.keyfile = {{ platform_etc_dir }}/certs/client-key.pem
|
||||||
|
|
||||||
|
## In mode verify_none the default behavior is to allow all x509-path
|
||||||
|
## validation errors.
|
||||||
|
##
|
||||||
|
## Value: true | false
|
||||||
|
## auth.http.ssl.verify = false
|
||||||
|
|
||||||
|
## If not specified, the server's names returned in server's certificate is validated against
|
||||||
|
## what's provided `auth.http.auth_req.url` config's host part.
|
||||||
|
## Setting to 'disable' will make EMQ X ignore unmatched server names.
|
||||||
|
## If set with a host name, the server's names returned in server's certificate is validated
|
||||||
|
## against this value.
|
||||||
|
##
|
||||||
|
## Value: String | disable
|
||||||
|
## auth.http.ssl.server_name_indication = disable
|
|
@ -116,3 +116,12 @@ end}.
|
||||||
{mapping, "auth.http.ssl.keyfile", "emqx_auth_http.keyfile", [
|
{mapping, "auth.http.ssl.keyfile", "emqx_auth_http.keyfile", [
|
||||||
{datatype, string}
|
{datatype, string}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
|
{mapping, "auth.http.ssl.verify", "emqx_auth_http.verify", [
|
||||||
|
{default, false},
|
||||||
|
{datatype, {enum, [true, false]}}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{mapping, "auth.http.ssl.server_name_indication", "emqx_auth_http.server_name_indication", [
|
||||||
|
{datatype, string}
|
||||||
|
]}.
|
|
@ -66,11 +66,22 @@ translate_env(EnvName) ->
|
||||||
CACertFile = application:get_env(?APP, cacertfile, undefined),
|
CACertFile = application:get_env(?APP, cacertfile, undefined),
|
||||||
CertFile = application:get_env(?APP, certfile, undefined),
|
CertFile = application:get_env(?APP, certfile, undefined),
|
||||||
KeyFile = application:get_env(?APP, keyfile, undefined),
|
KeyFile = application:get_env(?APP, keyfile, undefined),
|
||||||
TLSOpts = lists:filter(fun({_K, V}) when V =:= <<>> ->
|
Verify = case application:get_env(?APP, verify, fasle) of
|
||||||
false;
|
true -> verify_peer;
|
||||||
(_) ->
|
false -> verify_none
|
||||||
true
|
end,
|
||||||
end, [{keyfile, KeyFile}, {certfile, CertFile}, {cacertfile, CACertFile}]),
|
SNI = case application:get_env(?APP, server_name_indication, undefined) of
|
||||||
|
"disable" -> disable;
|
||||||
|
SNI0 -> SNI0
|
||||||
|
end,
|
||||||
|
TLSOpts = lists:filter(
|
||||||
|
fun({_, V}) ->
|
||||||
|
V =/= <<>> andalso V =/= undefined
|
||||||
|
end, [{keyfile, KeyFile},
|
||||||
|
{certfile, CertFile},
|
||||||
|
{cacertfile, CACertFile},
|
||||||
|
{verify, Verify},
|
||||||
|
{server_name_indication, SNI}]),
|
||||||
NTLSOpts = [ {versions, emqx_tls_lib:default_versions()}
|
NTLSOpts = [ {versions, emqx_tls_lib:default_versions()}
|
||||||
, {ciphers, emqx_tls_lib:default_ciphers()}
|
, {ciphers, emqx_tls_lib:default_ciphers()}
|
||||||
| TLSOpts
|
| TLSOpts
|
||||||
|
|
|
@ -90,7 +90,9 @@ set_https_client_opts() ->
|
||||||
SSLOpt = emqx_ct_helpers:client_ssl_twoway(),
|
SSLOpt = emqx_ct_helpers:client_ssl_twoway(),
|
||||||
application:set_env(emqx_auth_http, cacertfile, proplists:get_value(cacertfile, SSLOpt, undefined)),
|
application:set_env(emqx_auth_http, cacertfile, proplists:get_value(cacertfile, SSLOpt, undefined)),
|
||||||
application:set_env(emqx_auth_http, certfile, proplists:get_value(certfile, SSLOpt, undefined)),
|
application:set_env(emqx_auth_http, certfile, proplists:get_value(certfile, SSLOpt, undefined)),
|
||||||
application:set_env(emqx_auth_http, keyfile, proplists:get_value(keyfile, SSLOpt, undefined)).
|
application:set_env(emqx_auth_http, keyfile, proplists:get_value(keyfile, SSLOpt, undefined)),
|
||||||
|
application:set_env(emqx_auth_http, verify, true),
|
||||||
|
application:set_env(emqx_auth_http, server_name_indication, "disable").
|
||||||
|
|
||||||
%% @private
|
%% @private
|
||||||
http_server(http, inet) -> "http://127.0.0.1:8991";
|
http_server(http, inet) -> "http://127.0.0.1:8991";
|
||||||
|
|
|
@ -73,6 +73,4 @@ auth.ldap.ssl = false
|
||||||
|
|
||||||
#auth.ldap.ssl.verify = verify_peer
|
#auth.ldap.ssl.verify = verify_peer
|
||||||
|
|
||||||
#auth.ldap.ssl.fail_if_no_peer_cert = true
|
|
||||||
|
|
||||||
#auth.ldap.ssl.server_name_indication = your_server_name
|
#auth.ldap.ssl.server_name_indication = your_server_name
|
||||||
|
|
|
@ -53,10 +53,6 @@
|
||||||
{datatype, {enum, [verify_none, verify_peer]}}
|
{datatype, {enum, [verify_none, verify_peer]}}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
{mapping, "auth.ldap.ssl.fail_if_no_peer_cert", "emqx_auth_ldap.ldap", [
|
|
||||||
{datatype, {enum, [true, false]}}
|
|
||||||
]}.
|
|
||||||
|
|
||||||
{mapping, "auth.ldap.ssl.server_name_indication", "emqx_auth_ldap.ldap", [
|
{mapping, "auth.ldap.ssl.server_name_indication", "emqx_auth_ldap.ldap", [
|
||||||
{datatype, string}
|
{datatype, string}
|
||||||
]}.
|
]}.
|
||||||
|
@ -75,8 +71,10 @@
|
||||||
{keyfile, cuttlefish:conf_get("auth.ldap.ssl.keyfile", Conf)},
|
{keyfile, cuttlefish:conf_get("auth.ldap.ssl.keyfile", Conf)},
|
||||||
{cacertfile, cuttlefish:conf_get("auth.ldap.ssl.cacertfile", Conf, undefined)},
|
{cacertfile, cuttlefish:conf_get("auth.ldap.ssl.cacertfile", Conf, undefined)},
|
||||||
{verify, cuttlefish:conf_get("auth.ldap.ssl.verify", Conf, undefined)},
|
{verify, cuttlefish:conf_get("auth.ldap.ssl.verify", Conf, undefined)},
|
||||||
{server_name_indication, cuttlefish:conf_get("auth.ldap.ssl.server_name_indication", Conf, disable)},
|
{server_name_indication, case cuttlefish:conf_get("auth.ldap.ssl.server_name_indication", Conf, undefined) of
|
||||||
{fail_if_no_peer_cert, cuttlefish:conf_get("auth.ldap.ssl.fail_if_no_peer_cert", Conf, undefined)}]
|
"disable" -> disable;
|
||||||
|
SNI -> SNI
|
||||||
|
end}]
|
||||||
end,
|
end,
|
||||||
Opts = [{servers, Servers},
|
Opts = [{servers, Servers},
|
||||||
{port, Port},
|
{port, Port},
|
||||||
|
|
|
@ -70,6 +70,21 @@ auth.mongo.database = mqtt
|
||||||
## Value: File
|
## Value: File
|
||||||
## auth.mongo.ssl.cacertfile =
|
## auth.mongo.ssl.cacertfile =
|
||||||
|
|
||||||
|
## In mode verify_none the default behavior is to allow all x509-path
|
||||||
|
## validation errors.
|
||||||
|
##
|
||||||
|
## Value: true | false
|
||||||
|
## auth.mongo.ssl.verify = false
|
||||||
|
|
||||||
|
## If not specified, the server's names returned in server's certificate is validated against
|
||||||
|
## what's provided `auth.mongo.server` config's host part.
|
||||||
|
## Setting to 'disable' will make EMQ X ignore unmatched server names.
|
||||||
|
## If set with a host name, the server's names returned in server's certificate is validated
|
||||||
|
## against this value.
|
||||||
|
##
|
||||||
|
## Value: String | disable
|
||||||
|
## auth.mongo.ssl.server_name_indication = disable
|
||||||
|
|
||||||
## MongoDB write mode.
|
## MongoDB write mode.
|
||||||
##
|
##
|
||||||
## Value: unsafe | safe
|
## Value: unsafe | safe
|
||||||
|
|
|
@ -62,6 +62,15 @@
|
||||||
{datatype, string}
|
{datatype, string}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
|
{mapping, "auth.mongo.ssl.verify", "emqx_auth_mongo.server", [
|
||||||
|
{default, false},
|
||||||
|
{datatype, {enum, [true, false]}}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{mapping, "auth.mongo.ssl.server_name_indication", "emqx_auth_mongo.server", [
|
||||||
|
{datatype, string}
|
||||||
|
]}.
|
||||||
|
|
||||||
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
||||||
{mapping, "auth.mongo.ssl_opts.keyfile", "emqx_auth_mongo.server", [
|
{mapping, "auth.mongo.ssl_opts.keyfile", "emqx_auth_mongo.server", [
|
||||||
{datatype, string}
|
{datatype, string}
|
||||||
|
@ -122,10 +131,20 @@
|
||||||
false -> [{r_mode, R}]
|
false -> [{r_mode, R}]
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
|
||||||
Filter = fun(Opts) -> [{K, V} || {K, V} <- Opts, V =/= undefined] end,
|
Filter = fun(Opts) -> [{K, V} || {K, V} <- Opts, V =/= undefined] end,
|
||||||
SslOpts = fun(Prefix) ->
|
SslOpts = fun(Prefix) ->
|
||||||
Filter([{keyfile, cuttlefish:conf_get(Prefix ++ ".keyfile", Conf, undefined)},
|
Verify = case cuttlefish:conf_get(Prefix ++ ".verify", Conf, false) of
|
||||||
{certfile, cuttlefish:conf_get(Prefix ++ ".certfile", Conf, undefined)},
|
true -> verify_peer;
|
||||||
|
flase -> verify_none
|
||||||
|
end,
|
||||||
|
Filter([{verify, Verify},
|
||||||
|
{server_name_indication, case cuttlefish:conf_get(Prefix ++ ".server_name_indication", Conf, undefined) of
|
||||||
|
"disable" -> disable;
|
||||||
|
SNI -> SNI
|
||||||
|
end},
|
||||||
|
{keyfile, cuttlefish:conf_get(Prefix ++ ".keyfile", Conf, undefined)},
|
||||||
|
{certfile, cuttlefish:conf_get(Prefix ++ ".certfile", Conf, undefined)},
|
||||||
{cacertfile, cuttlefish:conf_get(Prefix ++ ".cacertfile", Conf, undefined)}])
|
{cacertfile, cuttlefish:conf_get(Prefix ++ ".cacertfile", Conf, undefined)}])
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
|
|
@ -114,3 +114,18 @@ auth.mysql.acl_query = select allow, ipaddr, username, clientid, access, topic f
|
||||||
##
|
##
|
||||||
## Value: File
|
## Value: File
|
||||||
#auth.mysql.ssl.keyfile = /path/to/your/clientkey.pem
|
#auth.mysql.ssl.keyfile = /path/to/your/clientkey.pem
|
||||||
|
|
||||||
|
## In mode verify_none the default behavior is to allow all x509-path
|
||||||
|
## validation errors.
|
||||||
|
##
|
||||||
|
## Value: true | false
|
||||||
|
#auth.mysql.ssl.verify = false
|
||||||
|
|
||||||
|
## If not specified, the server's names returned in server's certificate is validated against
|
||||||
|
## what's provided `auth.mysql.server` config's host part.
|
||||||
|
## Setting to 'disable' will make EMQ X ignore unmatched server names.
|
||||||
|
## If set with a host name, the server's names returned in server's certificate is validated
|
||||||
|
## against this value.
|
||||||
|
##
|
||||||
|
## Value: String | disable
|
||||||
|
## auth.mysql.ssl.server_name_indication = disable
|
||||||
|
|
|
@ -52,6 +52,15 @@
|
||||||
{datatype, string}
|
{datatype, string}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
|
{mapping, "auth.mysql.ssl.verify", "emqx_auth_mysql.server", [
|
||||||
|
{default, false},
|
||||||
|
{datatype, {enum, [true, false]}}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{mapping, "auth.mysql.ssl.server_name_indication", "emqx_auth_mysql.server", [
|
||||||
|
{datatype, string}
|
||||||
|
]}.
|
||||||
|
|
||||||
{translation, "emqx_auth_mysql.server", fun(Conf) ->
|
{translation, "emqx_auth_mysql.server", fun(Conf) ->
|
||||||
{MyHost, MyPort} =
|
{MyHost, MyPort} =
|
||||||
case cuttlefish:conf_get("auth.mysql.server", Conf) of
|
case cuttlefish:conf_get("auth.mysql.server", Conf) of
|
||||||
|
@ -94,10 +103,20 @@
|
||||||
),
|
),
|
||||||
Cert = cuttlefish:conf_get("auth.mysql.ssl.certfile", Conf, undefined),
|
Cert = cuttlefish:conf_get("auth.mysql.ssl.certfile", Conf, undefined),
|
||||||
Key = cuttlefish:conf_get("auth.mysql.ssl.keyfile", Conf, undefined),
|
Key = cuttlefish:conf_get("auth.mysql.ssl.keyfile", Conf, undefined),
|
||||||
Options ++ [{ssl, Filter([{server_name_indication, disable},
|
Verify = case cuttlefish:conf_get("auth.mysql.ssl.verify", Conf, false) of
|
||||||
|
true -> verify_peer;
|
||||||
|
flase -> verify_none
|
||||||
|
end,
|
||||||
|
SNI = case cuttlefish:conf_get("auth.mysql.ssl.server_name_indication", Conf, undefined) of
|
||||||
|
"disable" -> disable;
|
||||||
|
SNI0 -> SNI0
|
||||||
|
end,
|
||||||
|
Options ++ [{ssl, Filter([{server_name_indication, SNI},
|
||||||
{cacertfile, CA},
|
{cacertfile, CA},
|
||||||
{certfile, Cert},
|
{certfile, Cert},
|
||||||
{keyfile, Key}])
|
{keyfile, Key},
|
||||||
|
{verify, Verify}
|
||||||
|
])
|
||||||
}];
|
}];
|
||||||
_ ->
|
_ ->
|
||||||
Options
|
Options
|
||||||
|
|
|
@ -62,6 +62,21 @@ auth.pgsql.ssl = off
|
||||||
## Value: File
|
## Value: File
|
||||||
#auth.pgsql.ssl.cacertfile =
|
#auth.pgsql.ssl.cacertfile =
|
||||||
|
|
||||||
|
## In mode verify_none the default behavior is to allow all x509-path
|
||||||
|
## validation errors.
|
||||||
|
##
|
||||||
|
## Value: true | false
|
||||||
|
#auth.pgsql.ssl.verify = false
|
||||||
|
|
||||||
|
## If not specified, the server's names returned in server's certificate is validated against
|
||||||
|
## what's provided `auth.pgsql.server` config's host part.
|
||||||
|
## Setting to 'disable' will make EMQ X ignore unmatched server names.
|
||||||
|
## If set with a host name, the server's names returned in server's certificate is validated
|
||||||
|
## against this value.
|
||||||
|
##
|
||||||
|
## Value: String | disable
|
||||||
|
## auth.pgsql.ssl.server_name_indication = disable
|
||||||
|
|
||||||
## Authentication query.
|
## Authentication query.
|
||||||
##
|
##
|
||||||
## Value: SQL
|
## Value: SQL
|
||||||
|
|
|
@ -52,6 +52,15 @@
|
||||||
{datatype, string}
|
{datatype, string}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
|
{mapping, "auth.pgsql.ssl.verify", "emqx_auth_pgsql.server", [
|
||||||
|
{default, false},
|
||||||
|
{datatype, {enum, [true, false]}}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{mapping, "auth.pgsql.ssl.server_name_indication", "emqx_auth_pgsql.server", [
|
||||||
|
{datatype, string}
|
||||||
|
]}.
|
||||||
|
|
||||||
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
||||||
{mapping, "auth.pgsql.ssl_opts.keyfile", "emqx_auth_pgsql.server", [
|
{mapping, "auth.pgsql.ssl_opts.keyfile", "emqx_auth_pgsql.server", [
|
||||||
{datatype, string}
|
{datatype, string}
|
||||||
|
@ -90,9 +99,18 @@
|
||||||
|
|
||||||
Filter = fun(Opts) -> [{K, V} || {K, V} <- Opts, V =/= undefined] end,
|
Filter = fun(Opts) -> [{K, V} || {K, V} <- Opts, V =/= undefined] end,
|
||||||
SslOpts = fun(Prefix) ->
|
SslOpts = fun(Prefix) ->
|
||||||
|
Verify = case cuttlefish:conf_get(Prefix ++ ".verify", Conf, false) of
|
||||||
|
true -> verify_peer;
|
||||||
|
flase -> verify_none
|
||||||
|
end,
|
||||||
Filter([{keyfile, cuttlefish:conf_get(Prefix ++ ".keyfile", Conf, undefined)},
|
Filter([{keyfile, cuttlefish:conf_get(Prefix ++ ".keyfile", Conf, undefined)},
|
||||||
{certfile, cuttlefish:conf_get(Prefix ++ ".certfile", Conf, undefined)},
|
{certfile, cuttlefish:conf_get(Prefix ++ ".certfile", Conf, undefined)},
|
||||||
{cacertfile, cuttlefish:conf_get(Prefix ++ ".cacertfile", Conf, undefined)},
|
{cacertfile, cuttlefish:conf_get(Prefix ++ ".cacertfile", Conf, undefined)},
|
||||||
|
{verify, Verify},
|
||||||
|
{server_name_indication, case cuttlefish:conf_get(Prefix ++ ".server_name_indication", Conf, undefined) of
|
||||||
|
"disable" -> disable;
|
||||||
|
SNI -> SNI
|
||||||
|
end},
|
||||||
{versions, [list_to_existing_atom(Value)
|
{versions, [list_to_existing_atom(Value)
|
||||||
|| Value <- string:tokens(cuttlefish:conf_get(Prefix ++ ".tls_versions", Conf), " ,")]}])
|
|| Value <- string:tokens(cuttlefish:conf_get(Prefix ++ ".tls_versions", Conf), " ,")]}])
|
||||||
end,
|
end,
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEpAIBAAKCAQEA0kGUBi9NDp65jgdxKfizIfuSr2wpwb44yM9SuP4oUQSULOA2
|
||||||
|
4iFpLR/c5FAYHU81y9Vx91dQjdZfffaBZuv2zVvteXUkol8Nez7boKbo2E41MTew
|
||||||
|
8edtNKZAQVvnaHAC2NCZxjchCzUCDEoUUcl+cIERZ8R48FBqK5iTVcMRIx1akwus
|
||||||
|
+dhBqP0ykA5TGOWZkJrLM9aUXSPQha9+wXlOpkvu0Ur2nkX8PPJnifWao9UShSar
|
||||||
|
ll1IqPZNCSlZMwcFYcQNBCpdvITUUYlHvMRQV64bUpOxUGDuJkQL3dLKBlNuBRlJ
|
||||||
|
BcjBAKw7rFnwwHZcMmQ9tan/dZzpzwjo/T0XjwIDAQABAoIBAQCSHvUqnzDkWjcG
|
||||||
|
l/Fzg92qXlYBCCC0/ugj1sHcwvVt6Mq5rVE3MpUPwTcYjPlVVTlD4aEEjm/zQuq2
|
||||||
|
ddxUlOS+r4aIhHrjRT/vSS4FpjnoKeIZxGR6maVxk6DQS3i1QjMYT1CvSpzyVvKH
|
||||||
|
a+xXMrtmoKxh+085ZAmFJtIuJhUA2yEa4zggCxWnvz8ecLClUPfVDPhdLBHc3KmL
|
||||||
|
CRpHEC6L/wanvDPRdkkzfKyaJuIJlTDaCg63AY5sDkTW2I57iI/nJ3haSeidfQKz
|
||||||
|
39EfbnM1A/YprIakafjAu3frBIsjBVcxwGihZmL/YriTHjOggJF841kT5zFkkv2L
|
||||||
|
/530Wk6xAoGBAOqZLZ4DIi/zLndEOz1mRbUfjc7GQUdYplBnBwJ22VdS0P4TOXnd
|
||||||
|
UbJth2MA92NM7ocTYVFl4TVIZY/Y+Prxk7KQdHWzR7JPpKfx9OEVgtSqV0vF9eGI
|
||||||
|
rKp79Y1T4Mvc3UcQCXX6TP7nHLihEzpS8odm2LW4txrOiLsn4Fq/IWrLAoGBAOVv
|
||||||
|
6U4tm3lImotUupKLZPKEBYwruo9qRysoug9FiorP4TjaBVOfltiiHbAQD6aGfVtN
|
||||||
|
SZpZZtrs17wL7Xl4db5asgMcZd+8Hkfo5siR7AuGW9FZloOjDcXb5wCh9EvjJ74J
|
||||||
|
Cjw7RqyVymq9t7IP6wnVwj5Ck48YhlOZCz/mzlnNAoGAWq7NYFgLvgc9feLFF23S
|
||||||
|
IjpJQZWHJEITP98jaYNxbfzYRm49+GphqxwFinKULjFNvq7yHlnIXSVYBOu1CqOZ
|
||||||
|
GRwXuGuNmlKI7lZr9xmukfAqgGLMMdr4C4qRF4lFyufcLRz42z7exmWlx4ST/yaT
|
||||||
|
E13hBRWayeTuG5JFei6Jh1MCgYEAqmX4LyC+JFBgvvQZcLboLRkSCa18bADxhENG
|
||||||
|
FAuAvmFvksqRRC71WETmqZj0Fqgxt7pp3KFjO1rFSprNLvbg85PmO1s+6fCLyLpX
|
||||||
|
lESTu2d5D71qhK93jigooxalGitFm+SY3mzjq0/AOpBWOn+J/w7rqVPGxXLgaHv0
|
||||||
|
l+vx+00CgYBOvo9/ImjwYii2jFl+sHEoCzlvpITi2temRlT2j6ulSjCLJgjwEFw9
|
||||||
|
8e+vvfQumQOsutakUVyURrkMGNDiNlIv8kv5YLCCkrwN22E6Ghyi69MJUvHQXkc/
|
||||||
|
QZhjn/luyfpB5f/BeHFS2bkkxAXo+cfG45ApY3Qfz6/7o+H+vDa6/A==
|
||||||
|
-----END RSA PRIVATE KEY-----
|
|
@ -0,0 +1,19 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDAzCCAeugAwIBAgIBATANBgkqhkiG9w0BAQsFADA8MTowOAYDVQQDDDFNeVNR
|
||||||
|
TF9TZXJ2ZXJfOC4wLjE5X0F1dG9fR2VuZXJhdGVkX0NBX0NlcnRpZmljYXRlMB4X
|
||||||
|
DTIwMDYxMTAzMzg0NloXDTMwMDYwOTAzMzg0NlowPDE6MDgGA1UEAwwxTXlTUUxf
|
||||||
|
U2VydmVyXzguMC4xOV9BdXRvX0dlbmVyYXRlZF9DQV9DZXJ0aWZpY2F0ZTCCASIw
|
||||||
|
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANJBlAYvTQ6euY4HcSn4syH7kq9s
|
||||||
|
KcG+OMjPUrj+KFEElCzgNuIhaS0f3ORQGB1PNcvVcfdXUI3WX332gWbr9s1b7Xl1
|
||||||
|
JKJfDXs+26Cm6NhONTE3sPHnbTSmQEFb52hwAtjQmcY3IQs1AgxKFFHJfnCBEWfE
|
||||||
|
ePBQaiuYk1XDESMdWpMLrPnYQaj9MpAOUxjlmZCayzPWlF0j0IWvfsF5TqZL7tFK
|
||||||
|
9p5F/DzyZ4n1mqPVEoUmq5ZdSKj2TQkpWTMHBWHEDQQqXbyE1FGJR7zEUFeuG1KT
|
||||||
|
sVBg7iZEC93SygZTbgUZSQXIwQCsO6xZ8MB2XDJkPbWp/3Wc6c8I6P09F48CAwEA
|
||||||
|
AaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEADKz6bIpP5anp
|
||||||
|
GgLB0jkclRWuMlS4qqIt4itSsMXPJ/ezpHwECixmgW2TIQl6S1woRkUeMxhT2/Ay
|
||||||
|
Sn/7aKxuzRagyE5NEGOvrOuAP5RO2ZdNJ/X3/Rh533fK1sOTEEbSsWUvW6iSkZef
|
||||||
|
rsfZBVP32xBhRWkKRdLeLB4W99ADMa0IrTmZPCXHSSE2V4e1o6zWLXcOZeH1Qh8N
|
||||||
|
SkelBweR+8r1Fbvy1r3s7eH7DCbYoGEDVLQGOLvzHKBisQHmoDnnF5E9g1eeNRdg
|
||||||
|
o+vhOKfYCOzeNREJIqS42PHcGhdNRk90ycigPmfUJclz1mDHoMjKR2S5oosTpr65
|
||||||
|
tNPx3CL7GA==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,19 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDBDCCAeygAwIBAgIBAzANBgkqhkiG9w0BAQsFADA8MTowOAYDVQQDDDFNeVNR
|
||||||
|
TF9TZXJ2ZXJfOC4wLjE5X0F1dG9fR2VuZXJhdGVkX0NBX0NlcnRpZmljYXRlMB4X
|
||||||
|
DTIwMDYxMTAzMzg0N1oXDTMwMDYwOTAzMzg0N1owQDE+MDwGA1UEAww1TXlTUUxf
|
||||||
|
U2VydmVyXzguMC4xOV9BdXRvX0dlbmVyYXRlZF9DbGllbnRfQ2VydGlmaWNhdGUw
|
||||||
|
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVYSWpOvCTupz82fc85Opv
|
||||||
|
EQ7rkB8X2oOMyBCpkyHKBIr1ZQgRDWBp9UVOASq3GnSElm6+T3Kb1QbOffa8GIlw
|
||||||
|
sjAueKdq5L2eSkmPIEQ7eoO5kEW+4V866hE1LeL/PmHg2lGP0iqZiJYtElhHNQO8
|
||||||
|
3y9I7cm3xWMAA3SSWikVtpJRn3qIp2QSrH+tK+/HHbE5QwtPxdir4ULSCSOaM5Yh
|
||||||
|
Wi5Oto88TZqe1v7SXC864JVvO4LuS7TuSreCdWZyPXTJFBFeCEWSAxonKZrqHbBe
|
||||||
|
CwKML6/0NuzjaQ51c2tzmVI6xpHj3nnu4cSRx6Jf9WBm+35vm0wk4pohX3ptdzeV
|
||||||
|
AgMBAAGjDTALMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAByQ5zSNeFUH
|
||||||
|
Aw7JlpZHtHaSEeiiyBHke20ziQ07BK1yi/ms2HAWwQkpZv149sjNuIRH8pkTmkZn
|
||||||
|
g8PDzSefjLbC9AsWpWV0XNV22T/cdobqLqMBDDZ2+5bsV+jTrOigWd9/AHVZ93PP
|
||||||
|
IJN8HJn6rtvo2l1bh/CdsX14uVSdofXnuWGabNTydqtMvmCerZsdf6qKqLL+PYwm
|
||||||
|
RDpgWiRUY7KPBSSlKm/9lJzA+bOe4dHeJzxWFVCJcbpoiTFs1je1V8kKQaHtuW39
|
||||||
|
ifX6LTKUMlwEECCbDKM8Yq2tm8NjkjCcnFDtKg8zKGPUu+jrFMN5otiC3wnKcP7r
|
||||||
|
O9EkaPcgYH8=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEowIBAAKCAQEA1WElqTrwk7qc/Nn3POTqbxEO65AfF9qDjMgQqZMhygSK9WUI
|
||||||
|
EQ1gafVFTgEqtxp0hJZuvk9ym9UGzn32vBiJcLIwLninauS9nkpJjyBEO3qDuZBF
|
||||||
|
vuFfOuoRNS3i/z5h4NpRj9IqmYiWLRJYRzUDvN8vSO3Jt8VjAAN0klopFbaSUZ96
|
||||||
|
iKdkEqx/rSvvxx2xOUMLT8XYq+FC0gkjmjOWIVouTraPPE2antb+0lwvOuCVbzuC
|
||||||
|
7ku07kq3gnVmcj10yRQRXghFkgMaJyma6h2wXgsCjC+v9Dbs42kOdXNrc5lSOsaR
|
||||||
|
49557uHEkceiX/VgZvt+b5tMJOKaIV96bXc3lQIDAQABAoIBAF7yjXmSOn7h6P0y
|
||||||
|
WCuGiTLG2mbDiLJqj2LTm2Z5i+2Cu/qZ7E76Ls63TxF4v3MemH5vGfQhEhR5ZD/6
|
||||||
|
GRJ1sKKvB3WGRqjwA9gtojHH39S/nWGy6vYW/vMOOH37XyjIr3EIdIaUtFQBTSHd
|
||||||
|
Kd71niYrAbVn6fyWHolhADwnVmTMOl5OOAhCdEF4GN3b5aIhIu8BJ7EUzTtHBJIj
|
||||||
|
CAEfjZFjDs1y1cIgGFJkuIQxMfCpq5recU2qwip7YO6fk//WEjOPu7kSf5IEswL8
|
||||||
|
jg1dea9rGBV6KaD2xsgsC6Ll6Sb4BbsrHMfflG3K2Lk3RdVqqTFp1Fn1PTLQE/1S
|
||||||
|
S/SZPYECgYEA9qYcHKHd0+Q5Ty5wgpxKGa4UCWkpwvfvyv4bh8qlmxueB+l2AIdo
|
||||||
|
ZvkM8gTPagPQ3WypAyC2b9iQu70uOJo1NizTtKnpjDdN1YpDjISJuS/P0x73gZwy
|
||||||
|
gmoM5AzMtN4D6IbxXtXnPaYICvwLKU80ouEN5ZPM4/ODLUu6gsp0v2UCgYEA3Xgi
|
||||||
|
zMC4JF0vEKEaK0H6QstaoXUmw/lToZGH3TEojBIkb/2LrHUclygtONh9kJSFb89/
|
||||||
|
jbmRRLAOrx3HZKCNGUmF4H9k5OQyAIv6OGBinvLGqcbqnyNlI+Le8zxySYwKMlEj
|
||||||
|
EMrBCLmSyi0CGFrbZ3mlj/oCET/ql9rNvcK+DHECgYAEx5dH3sMjtgp+RFId1dWB
|
||||||
|
xePRgt4yTwewkVgLO5wV82UOljGZNQaK6Eyd7AXw8f38LHzh+KJQbIvxd2sL4cEi
|
||||||
|
OaAoohpKg0/Y0YMZl//rPMf0OWdmdZZs/I0fZjgZUSwWN3c59T8z7KG/RL8an9RP
|
||||||
|
S7kvN7wCttdV61/D5RR6GQKBgDxCe/WKWpBKaovzydMLWLTj7/0Oi0W3iXHkzzr4
|
||||||
|
LTgvl4qBSofaNbVLUUKuZTv5rXUG2IYPf99YqCYtzBstNDc1MiAriaBeFtzfOW4t
|
||||||
|
i6gEFtoLLbuvPc3N5Sv5vn8Ug5G9UfU3td5R4AbyyCcoUZqOFuZd+EIJSiOXfXOs
|
||||||
|
kVmBAoGBAIU9aPAqhU5LX902oq8KsrpdySONqv5mtoStvl3wo95WIqXNEsFY60wO
|
||||||
|
q02jKQmJJ2MqhkJm2EoF2Mq8+40EZ5sz8LdgeQ/M0yQ9lAhPi4rftwhpe55Ma9dk
|
||||||
|
SE9X1c/DMCBEaIjJqVXdy0/EeArwpb8sHkguVVAZUWxzD+phm1gs
|
||||||
|
-----END RSA PRIVATE KEY-----
|
|
@ -1,21 +0,0 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDYzCCAksCCQC7J1oPkDz7vTANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMC
|
|
||||||
Q0ExGTAXBgNVBAgMEEJyaXRpc2ggQ29sdW1iaWExDjAMBgNVBAcMBUNvbW94MRQw
|
|
||||||
EgYDVQQKDAtUaGVCcmFpbi5jYTEUMBIGA1UEAwwLdGhlYnJhaW4uY2ExHzAdBgkq
|
|
||||||
hkiG9w0BCQEWEGluZm9AdGhlYnJhaW4uY2EwHhcNMjEwMTEzMDkwNzM2WhcNMjEw
|
|
||||||
MjEyMDkwNzM2WjBhMQswCQYDVQQGEwJDQTEZMBcGA1UECAwQQnJpdGlzaCBDb2x1
|
|
||||||
bWJpYTEOMAwGA1UEBwwFQ29tb3gxFDASBgNVBAoMC1RoZUJyYWluLmNhMREwDwYD
|
|
||||||
VQQDDAh3d3ctZGF0YTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJv9
|
|
||||||
yO5JGKBl+7w0HGkRDIPZ5Ku3lIAzB4ThszRHBqll7VjlTz+q16OQOONqeHBuxPjj
|
|
||||||
11WMXD2KnfYZW2ZWd0U8FKzuIGOCStGbSUi2hC0owp+KkJcDujfIafXQnAa0fUiS
|
|
||||||
FBB5iG98vm3QI4gv9135LgnO5oHopH6oZ/t0Id1LzFhp2sdhebdtczmImpo+nt7v
|
|
||||||
fduapptuIJ20ThdAvo3MlYoAhivsvJKntlWPAwPMQdyezww/q7T5Y8DCyJJTydr5
|
|
||||||
PrMz9S/WQTkj/G0y4dZgQonG5r0d1Nf+rwkn78DdXGktVDMBBP41+VWnEDBCTlgS
|
|
||||||
FjQEY6Izaof8s8q8K2UCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAdlAQkumOAKbQ
|
|
||||||
SW5gtkHgKyIQyfwk9maKqKccK04WlNk1t1jsvk7kaOEHr3t7YG28yKqicGHAcfFf
|
|
||||||
i/RU51v2GJVzWCbzkAAH/zNgDcYnYk6sn54YcuBzrPliVH1xxmZy/52+huTxy8Vd
|
|
||||||
3nmCjdYR/I764rd8gkRK+aHaUTLyitzX1kW90LtXonKY72CNZVXHEBom3XM/a6ff
|
|
||||||
ilybDloNVTfHstnfsnHHyNYn0SfapqXxPCO+FL9hQjlztUBZryRdS0nq66hB2GSB
|
|
||||||
CEst/vtNGo/2aa1Vw4bKl2oGepjKNzxp0ZTTVuIcwGzV6oKIsx1ZnWE3gQLEH/TX
|
|
||||||
dzMzesBayA==
|
|
||||||
-----END CERTIFICATE-----
|
|
|
@ -1,17 +0,0 @@
|
||||||
-----BEGIN CERTIFICATE REQUEST-----
|
|
||||||
MIICpjCCAY4CAQAwYTELMAkGA1UEBhMCQ0ExGTAXBgNVBAgMEEJyaXRpc2ggQ29s
|
|
||||||
dW1iaWExDjAMBgNVBAcMBUNvbW94MRQwEgYDVQQKDAtUaGVCcmFpbi5jYTERMA8G
|
|
||||||
A1UEAwwId3d3LWRhdGEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCb
|
|
||||||
/cjuSRigZfu8NBxpEQyD2eSrt5SAMweE4bM0RwapZe1Y5U8/qtejkDjjanhwbsT4
|
|
||||||
49dVjFw9ip32GVtmVndFPBSs7iBjgkrRm0lItoQtKMKfipCXA7o3yGn10JwGtH1I
|
|
||||||
khQQeYhvfL5t0COIL/dd+S4JzuaB6KR+qGf7dCHdS8xYadrHYXm3bXM5iJqaPp7e
|
|
||||||
733bmqabbiCdtE4XQL6NzJWKAIYr7LySp7ZVjwMDzEHcns8MP6u0+WPAwsiSU8na
|
|
||||||
+T6zM/Uv1kE5I/xtMuHWYEKJxua9HdTX/q8JJ+/A3VxpLVQzAQT+NflVpxAwQk5Y
|
|
||||||
EhY0BGOiM2qH/LPKvCtlAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAN6Q8MEDx
|
|
||||||
g5xlpYB/fFmagpe15+G2QbqVf2mH1a4aBcBns4jMMqNidi4gyjGfzvNxX77R6KcI
|
|
||||||
AfcxENRVDYJbhAgEQ96jv4jv5pEMuyvQ8VLhn9AOXCaK/VHxbYlOiM7tfFtEDrrB
|
|
||||||
wTn8FvoEwjehfsSX2dWiwcUK4SPPeuklE/EGjRgoVCwg8EqWzf1fn+tzME8OpnRQ
|
|
||||||
I8coyALF6ANehvP7ADV3m5iOOaNhfnqmqGBEwjB3TTvE1gZ4UvAyl75bi+Zh3Osn
|
|
||||||
qemyxocp/ML4o6d/F+nKIZOe6309V2nyrY6RSd2fBCrhYj2rKTbrGTZrpKXeAhtI
|
|
||||||
jMivnjCK+WNHpQ==
|
|
||||||
-----END CERTIFICATE REQUEST-----
|
|
|
@ -1,27 +0,0 @@
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAm/3I7kkYoGX7vDQcaREMg9nkq7eUgDMHhOGzNEcGqWXtWOVP
|
|
||||||
P6rXo5A442p4cG7E+OPXVYxcPYqd9hlbZlZ3RTwUrO4gY4JK0ZtJSLaELSjCn4qQ
|
|
||||||
lwO6N8hp9dCcBrR9SJIUEHmIb3y+bdAjiC/3XfkuCc7mgeikfqhn+3Qh3UvMWGna
|
|
||||||
x2F5t21zOYiamj6e3u9925qmm24gnbROF0C+jcyVigCGK+y8kqe2VY8DA8xB3J7P
|
|
||||||
DD+rtPljwMLIklPJ2vk+szP1L9ZBOSP8bTLh1mBCicbmvR3U1/6vCSfvwN1caS1U
|
|
||||||
MwEE/jX5VacQMEJOWBIWNARjojNqh/yzyrwrZQIDAQABAoIBAAOicycSLu+10Jq/
|
|
||||||
ABZ2njsIPaq+mUgvaDJxa9KBASe7Rz92AFW0blfSSXELDwlXm2FNNbw5jACnFS0h
|
|
||||||
xB5rT1Yeo0CwP7Lx2zptCtUV45iFxZsgCGRsYs9f7RAcLzZ8yBqDxNHpcwNd/bXj
|
|
||||||
TqCitXnMD4WM+5P1TrfgxqN2Pj/Atg8w/4dP7KcFcTzcZzIz5rr3NTyjsrLdiFis
|
|
||||||
sR+7m7Qu4PyEfrDpR9Np111nQqVJ1bpt9qt/hv318FaBnpNY6MMBaSni99mvMXSd
|
|
||||||
SwHn3gnfHREWcNSLGA9gjEQmyIPHpV9T6SJ/zyr++6y8QCq4DiSP36A9zeA1XThP
|
|
||||||
YEIsWxUCgYEAyLppQerpOT2CnbTbKO/9rGwlbf8FT2GWFcPBtUm0lp21/C32BX+H
|
|
||||||
jNCmQsE1pZ6+sqv2mb1onr6Xl9cSEt6KsI1EJtFFR9Lnvqqu+JKo31U94z2yTqgv
|
|
||||||
sc+qMl7shy1kja8T5NaRc++UkCVzVNsnFB9torIaqQwY9IRdRwmYjisCgYEAxvHR
|
|
||||||
MwvWpOg25zz75OfupIOQhj9W6yphpY5/yoYBms/4OeabJhMrOV142s9souCHmuGU
|
|
||||||
EtzOQC5jbEc+3MUjx1ZlboHY7UuoEu87kykFEs9mnaD+T34PEAJcQjSzqzS5KMJE
|
|
||||||
Ro275xf+V/e3hS/Z3hQXmDQNQDNRYMcAZfTW9K8CgYBkHITOuYikYcc5PLBplHhi
|
|
||||||
fHWWjLBrTPJ73GxKLH6C+BmBsrKXP2mtk4q4lIBbH/dgSV/ugYciVVBqDHwZKSDm
|
|
||||||
uS4aZhk1nzyx3ZLyqsLK0ErTgTvi+wL+neH2yV0SdlNGTuGPKmzU89KWqfcBhWPS
|
|
||||||
J3KYyFd/pGb13OZgvap2jQKBgBXCXR84LEHdJCQmh2aB95gGy8fjJZ6TBBsXeuKr
|
|
||||||
xYEpPf0XO+DuN8wObSmBhmBKLorCIW/utqBOcpFlOXrsFP24dV+g1BkgLUHk6J8v
|
|
||||||
3V4xUQfsk+Qd5YfaujyDhyMyoQ3UMaOF3QdpmGgGsAvhL/MaP3pmNwzOkBgFrAV6
|
|
||||||
wggBAoGBAMflqy2pfqGhaj9S6qZ3K95h7NdCUikdQzqmgbNtOHaZ2kHByyYtOPLB
|
|
||||||
1VnuDRQiacmum+fTZa6wNmvp2FWg+uxI/aspfF6SdPfGpyPrG5D+ITtqKF2xieK+
|
|
||||||
XpzehKTrTuYQRAVhmWbhpuyahYnQyd/MrsCMGzUfAJtM7l5vKa2O
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEpAIBAAKCAQEA1zVmMhPqpSPMmYkKh5wwlRD5XuS8YWJKEM6tjFx61VK8qxHE
|
||||||
|
YngkC2KnL5EuKAjQZIF3tJskwt0hAat047CCCZxrkNEpbVvSnvnk+A/8bg/Ww1n3
|
||||||
|
qxzfifhsWfpUKlDnwrtH+ftt+5rZeEkf37XAPy7ZjzecAF9SDV6WSiPeAxUX2+hN
|
||||||
|
dId42Pf45woo4LFGUlQeagCFkD/R0dpNIMGwcnkKCUikiBqr2ijSIgvRtBfZ9fBG
|
||||||
|
jFGER2uE/Eay4AgcQsHue8skRwDCng8OnqtPnBtTytmqTy9V/BRgsVKUoksm6wsx
|
||||||
|
kUYwgHeaq7UCvlCm25SZ7yRyd4k8t0BKDf2h+wIDAQABAoIBAEQcrHmRACTADdNS
|
||||||
|
IjkFYALt2l8EOfMAbryfDSJtapr1kqz59JPNvmq0EIHnixo0n/APYdmReLML1ZR3
|
||||||
|
tYkSpjVwgkLVUC1CcIjMQoGYXaZf8PLnGJHZk45RR8m6hsTV0mQ5bfBaeVa2jbma
|
||||||
|
OzJMjcnxg/3l9cPQZ2G/3AUfEPccMxOXp1KRz3mUQcGnKJGtDbN/kfmntcwYoxaE
|
||||||
|
Zg4RoeKAoMpK1SSHAiJKe7TnztINJ7uygR9XSzNd6auY8A3vomSIjpYO7XL+lh7L
|
||||||
|
izm4Ir3Gb/eCYBvWgQyQa2KCJgK/sQyEs3a09ngofSEUhQJQYhgZDwUj+fDDOGqj
|
||||||
|
hCZOA8ECgYEA+ZWuHdcUQ3ygYhLds2QcogUlIsx7C8n/Gk/FUrqqXJrTkuO0Eqqa
|
||||||
|
B47lCITvmn2zm0ODfSFIARgKEUEDLS/biZYv7SUTrFqBLcet+aGI7Dpv91CgB75R
|
||||||
|
tNzcIf8VxoiP0jPqdbh9mLbbxGi5Uc4p9TVXRljC4hkswaouebWee0sCgYEA3L2E
|
||||||
|
YB3kiHrhPI9LHS5Px9C1w+NOu5wP5snxrDGEgaFCvL6zgY6PflacppgnmTXl8D1x
|
||||||
|
im0IDKSw5dP3FFonSVXReq3CXDql7UnhfTCiLDahV7bLxTH42FofcBpDN3ERdOal
|
||||||
|
58RwQh6VrLkzQRVoObo+hbGlFiwwSAfQC509FhECgYBsRSBpVXo25IN2yBRg09cP
|
||||||
|
+gdoFyhxrsj5kw1YnB13WrrZh+oABv4WtUhp77E5ZbpaamlKCPwBbXpAjeFg4tfr
|
||||||
|
0bksuN7V79UGFQ9FsWuCfr8/nDwv38H2IbFlFhFONMOfPmJBey0Q6JJhm8R41mSh
|
||||||
|
OOiJXcv85UrjIH5U0hLUDQKBgQDVLOU5WcUJlPoOXSgiT0ZW5xWSzuOLRUUKEf6l
|
||||||
|
19BqzAzCcLy0orOrRAPW01xylt2v6/bJw1Ahva7k1ZZo/kOwjANYoZPxM+ZoSZBN
|
||||||
|
MXl8j2mzZuJVV1RFxItV3NcLJNPB/Lk+IbRz9kt/2f9InF7iWR3mSU/wIM6j0X+2
|
||||||
|
p6yFsQKBgQCM/ldWb511lA+SNkqXB2P6WXAgAM/7+jwsNHX2ia2Ikufm4SUEKMSv
|
||||||
|
mti/nZkHDHsrHU4wb/2cOAywMELzv9EHzdcoenjBQP65OAc/1qWJs+LnBcCXfqKk
|
||||||
|
aHjEZW6+brkHdRGLLY3YAHlt/AUL+RsKPJfN72i/FSpmu+52G36eeQ==
|
||||||
|
-----END RSA PRIVATE KEY-----
|
|
@ -0,0 +1,9 @@
|
||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1zVmMhPqpSPMmYkKh5ww
|
||||||
|
lRD5XuS8YWJKEM6tjFx61VK8qxHEYngkC2KnL5EuKAjQZIF3tJskwt0hAat047CC
|
||||||
|
CZxrkNEpbVvSnvnk+A/8bg/Ww1n3qxzfifhsWfpUKlDnwrtH+ftt+5rZeEkf37XA
|
||||||
|
Py7ZjzecAF9SDV6WSiPeAxUX2+hNdId42Pf45woo4LFGUlQeagCFkD/R0dpNIMGw
|
||||||
|
cnkKCUikiBqr2ijSIgvRtBfZ9fBGjFGER2uE/Eay4AgcQsHue8skRwDCng8OnqtP
|
||||||
|
nBtTytmqTy9V/BRgsVKUoksm6wsxkUYwgHeaq7UCvlCm25SZ7yRyd4k8t0BKDf2h
|
||||||
|
+wIDAQAB
|
||||||
|
-----END PUBLIC KEY-----
|
|
@ -1,21 +0,0 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDiDCCAnACCQCCsPcIlZO4TDANBgkqhkiG9w0BAQsFADCBhTELMAkGA1UEBhMC
|
|
||||||
Q0ExGTAXBgNVBAgMEEJyaXRpc2ggQ29sdW1iaWExDjAMBgNVBAcMBUNvbW94MRQw
|
|
||||||
EgYDVQQKDAtUaGVCcmFpbi5jYTEUMBIGA1UEAwwLdGhlYnJhaW4uY2ExHzAdBgkq
|
|
||||||
hkiG9w0BCQEWEGluZm9AdGhlYnJhaW4uY2EwHhcNMjEwMTEzMDkwNDIyWhcNMzEw
|
|
||||||
MTExMDkwNDIyWjCBhTELMAkGA1UEBhMCQ0ExGTAXBgNVBAgMEEJyaXRpc2ggQ29s
|
|
||||||
dW1iaWExDjAMBgNVBAcMBUNvbW94MRQwEgYDVQQKDAtUaGVCcmFpbi5jYTEUMBIG
|
|
||||||
A1UEAwwLdGhlYnJhaW4uY2ExHzAdBgkqhkiG9w0BCQEWEGluZm9AdGhlYnJhaW4u
|
|
||||||
Y2EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2YWuwplM2Hc5tzBMu
|
|
||||||
covW9nwZ8iNEFo5pbDc8710pmnkF+wsDztLy4afJe6OeVHyCgQxmE+rTZcoWbvoh
|
|
||||||
pxW3Zy/8es4My07RKHqI3NYadThUvDsmI10cF3tJbhOZaIrMaExLGookZYKwbNAy
|
|
||||||
7yJ1+MLyNCuFFsaOiNNxHOjH/InKSzEuGSLV68tdC7Pe+uanBcC7RKhOrjUC6Occ
|
|
||||||
naHPC+a/YMyRYx29T8CfkCBB7N6WanWylFN/1RBmAgq++kDflSaF9k+Zdl6I4jiF
|
|
||||||
mCPGS0k+AMre4PuAKOZOZOwhF0sWlXIxH6zPm9w0bSYdTLBupL846RTO72NtNP+X
|
|
||||||
KX5DAgMBAAEwDQYJKoZIhvcNAQELBQADggEBACXXFws+h+Zo9HsxW3BWpl2JU5u6
|
|
||||||
KyfbLQt4kSN/gqltd4s84Q8c4z2jNdI0t8Oh5dXTjbLCpFjzuF2tdMtOWeYBCdsQ
|
|
||||||
4NJ69RrwkFdsSPxDPhSE0WGXPaOBaA92wJjTkVf+UYIek1ozeyWwFm1LPiZVei00
|
|
||||||
mwDVgbAbIEb8cf6OqJrl2r5PMBCLWBwwg5aca3fe6TopJhyPA//DZDRPA5xzKb9e
|
|
||||||
PHUgF3apbcWxuxm8Mts4bAq8BcKoEvLHYWJ4fEWQvXPP7q1jYC3TkpSt5n3FQZTe
|
|
||||||
nLyQ+RNzsEHzmyOtTSa0Q+5KVluO1TE3ifpv8737pTLdY8t2waBamoboCu8=
|
|
||||||
-----END CERTIFICATE-----
|
|
|
@ -1 +0,0 @@
|
||||||
BB275A0F903CFBBD
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDBDCCAeygAwIBAgIBAjANBgkqhkiG9w0BAQsFADA8MTowOAYDVQQDDDFNeVNR
|
||||||
|
TF9TZXJ2ZXJfOC4wLjE5X0F1dG9fR2VuZXJhdGVkX0NBX0NlcnRpZmljYXRlMB4X
|
||||||
|
DTIwMDYxMTAzMzg0NloXDTMwMDYwOTAzMzg0NlowQDE+MDwGA1UEAww1TXlTUUxf
|
||||||
|
U2VydmVyXzguMC4xOV9BdXRvX0dlbmVyYXRlZF9TZXJ2ZXJfQ2VydGlmaWNhdGUw
|
||||||
|
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCcEnEm5hqP1EbEJycOz8Ua
|
||||||
|
NWp29QdpFUzTWhkKGhVXk+0msmNTw4NBAFB42moY44OU8wvDideOlJNhPRWveD8z
|
||||||
|
G2lxzJA91p0UK4et8ia9MmeuCGhdC9jxJ8X69WNlUiPyy0hI/ZsqRq9Z0C2eW0iL
|
||||||
|
JPXsy4X8Xpw3SFwoXf5pR9RFY5Pb2tuyxqmSestu2VXT/NQjJg4CVDR3mFcHPXZB
|
||||||
|
4elRzH0WshExEGkgy0bg20MJeRc2Qdb5Xx+EakbmwroDWaCn3NSGqQ7jv6Vw0doy
|
||||||
|
TGvS6h6RHBxnyqRfRgKGlCoOMG9/5+rFJC00QpCUG2vHXHWGoWlMlJ3foN7rj5v9
|
||||||
|
AgMBAAGjDTALMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAJ5zt2rj4Ag6
|
||||||
|
zpN59AWC1Fur8g8l41ksHkSpKPp+PtyO/ngvbMqBpfmK1e7JCKZv/68QXfMyWWAI
|
||||||
|
hwalqZkXXWHKjuz3wE7dE25PXFXtGJtcZAaj10xt98fzdqt8lQSwh2kbfNwZIz1F
|
||||||
|
sgAStgE7+ZTcqTgvNB76Os1UK0to+/P0VBWktaVFdyub4Nc2SdPVnZNvrRBXBwOD
|
||||||
|
3V8ViwywDOFoE7DvCvwx/SVsvoC0Z4j3AMMovO6oHicP7uU83qsQgm1Qru3YeoLR
|
||||||
|
+DoVi7IPHbWvN7MqFYn3YjNlByO2geblY7MR0BlqbFlmFrqLsUfjsh2ys7/U/knC
|
||||||
|
dN/klu446fI=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEowIBAAKCAQEAnBJxJuYaj9RGxCcnDs/FGjVqdvUHaRVM01oZChoVV5PtJrJj
|
||||||
|
U8ODQQBQeNpqGOODlPMLw4nXjpSTYT0Vr3g/MxtpccyQPdadFCuHrfImvTJnrgho
|
||||||
|
XQvY8SfF+vVjZVIj8stISP2bKkavWdAtnltIiyT17MuF/F6cN0hcKF3+aUfURWOT
|
||||||
|
29rbssapknrLbtlV0/zUIyYOAlQ0d5hXBz12QeHpUcx9FrIRMRBpIMtG4NtDCXkX
|
||||||
|
NkHW+V8fhGpG5sK6A1mgp9zUhqkO47+lcNHaMkxr0uoekRwcZ8qkX0YChpQqDjBv
|
||||||
|
f+fqxSQtNEKQlBtrx1x1hqFpTJSd36De64+b/QIDAQABAoIBAFiah66Dt9SruLkn
|
||||||
|
WR8piUaFyLlcBib8Nq9OWSTJBhDAJERxxb4KIvvGB+l0ZgNXNp5bFPSfzsZdRwZP
|
||||||
|
PX5uj8Kd71Dxx3mz211WESMJdEC42u+MSmN4lGLkJ5t/sDwXU91E1vbJM0ve8THV
|
||||||
|
4/Ag9qA4DX2vVZOeyqT/6YHpSsPNZplqzrbAiwrfHwkctHfgqwOf3QLfhmVQgfCS
|
||||||
|
VwidBldEUv2whSIiIxh4Rv5St4kA68IBCbJxdpOpyuQBkk6CkxZ7VN9FqOuSd4Pk
|
||||||
|
Wm7iWyBMZsCmELZh5XAXld4BEt87C5R4CvbPBDZxAv3THk1DNNvpy3PFQfwARRFb
|
||||||
|
SAToYMECgYEAyL7U8yxpzHDYWd3oCx6vTi9p9N/z0FfAkWrRF6dm4UcSklNiT1Aq
|
||||||
|
EOnTA+SaW8tV3E64gCWcY23gNP8so/ZseWj6L+peHwtchaP9+KB7yGw2A+05+lOx
|
||||||
|
VetLTjAOmfpiUXFe5w1q4C1RGhLjZjjzW+GvwdAuchQgUEFaomrV+PUCgYEAxwfH
|
||||||
|
cmVGFbAktcjU4HSRjKSfawCrut+3YUOLybyku3Q/hP9amG8qkVTFe95CTLjLe2D0
|
||||||
|
ccaTTpofFEJ32COeck0g0Ujn/qQ+KXRoauOYs4FB1DtqMpqB78wufWEUpDpbd9/h
|
||||||
|
J+gJdC/IADd4tJW9zA92g8IA7ZtFmqDtiSpQ0ekCgYAQGkaorvJZpN+l7cf0RGTZ
|
||||||
|
h7IfI2vCVZer0n6tQA9fmLzjoe6r4AlPzAHSOR8sp9XeUy43kUzHKQQoHCPvjw/K
|
||||||
|
eWJAP7OHF/k2+x2fOPhU7mEy1W+mJdp+wt4Kio5RSaVjVQ3AyPG+w8PSrJszEvRq
|
||||||
|
dWMMz+851WV2KpfjmWBKlQKBgQC++4j4DZQV5aMkSKV1CIZOBf3vaIJhXKEUFQPD
|
||||||
|
PmB4fBEjpwCg+zNGp6iktt65zi17o8qMjrb1mtCt2SY04eD932LZUHNFlwcLMmes
|
||||||
|
Ad+aiDLJ24WJL1f16eDGcOyktlblDZB5gZ/ovJzXEGOkLXglosTfo77OQculmDy2
|
||||||
|
/UL2WQKBgGeKasmGNfiYAcWio+KXgFkHXWtAXB9B91B1OFnCa40wx+qnl71MIWQH
|
||||||
|
PQ/CZFNWOfGiNEJIZjrHsfNJoeXkhq48oKcT0AVCDYyLV0VxDO4ejT95mGW6njNd
|
||||||
|
JpvmhwwAjOvuWVr0tn4iXlSK8irjlJHmwcRjLTJq97vE9fsA2MjI
|
||||||
|
-----END RSA PRIVATE KEY-----
|
|
@ -1,21 +0,0 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDiDCCAnACCQCCsPcIlZO4TDANBgkqhkiG9w0BAQsFADCBhTELMAkGA1UEBhMC
|
|
||||||
Q0ExGTAXBgNVBAgMEEJyaXRpc2ggQ29sdW1iaWExDjAMBgNVBAcMBUNvbW94MRQw
|
|
||||||
EgYDVQQKDAtUaGVCcmFpbi5jYTEUMBIGA1UEAwwLdGhlYnJhaW4uY2ExHzAdBgkq
|
|
||||||
hkiG9w0BCQEWEGluZm9AdGhlYnJhaW4uY2EwHhcNMjEwMTEzMDkwNDIyWhcNMzEw
|
|
||||||
MTExMDkwNDIyWjCBhTELMAkGA1UEBhMCQ0ExGTAXBgNVBAgMEEJyaXRpc2ggQ29s
|
|
||||||
dW1iaWExDjAMBgNVBAcMBUNvbW94MRQwEgYDVQQKDAtUaGVCcmFpbi5jYTEUMBIG
|
|
||||||
A1UEAwwLdGhlYnJhaW4uY2ExHzAdBgkqhkiG9w0BCQEWEGluZm9AdGhlYnJhaW4u
|
|
||||||
Y2EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2YWuwplM2Hc5tzBMu
|
|
||||||
covW9nwZ8iNEFo5pbDc8710pmnkF+wsDztLy4afJe6OeVHyCgQxmE+rTZcoWbvoh
|
|
||||||
pxW3Zy/8es4My07RKHqI3NYadThUvDsmI10cF3tJbhOZaIrMaExLGookZYKwbNAy
|
|
||||||
7yJ1+MLyNCuFFsaOiNNxHOjH/InKSzEuGSLV68tdC7Pe+uanBcC7RKhOrjUC6Occ
|
|
||||||
naHPC+a/YMyRYx29T8CfkCBB7N6WanWylFN/1RBmAgq++kDflSaF9k+Zdl6I4jiF
|
|
||||||
mCPGS0k+AMre4PuAKOZOZOwhF0sWlXIxH6zPm9w0bSYdTLBupL846RTO72NtNP+X
|
|
||||||
KX5DAgMBAAEwDQYJKoZIhvcNAQELBQADggEBACXXFws+h+Zo9HsxW3BWpl2JU5u6
|
|
||||||
KyfbLQt4kSN/gqltd4s84Q8c4z2jNdI0t8Oh5dXTjbLCpFjzuF2tdMtOWeYBCdsQ
|
|
||||||
4NJ69RrwkFdsSPxDPhSE0WGXPaOBaA92wJjTkVf+UYIek1ozeyWwFm1LPiZVei00
|
|
||||||
mwDVgbAbIEb8cf6OqJrl2r5PMBCLWBwwg5aca3fe6TopJhyPA//DZDRPA5xzKb9e
|
|
||||||
PHUgF3apbcWxuxm8Mts4bAq8BcKoEvLHYWJ4fEWQvXPP7q1jYC3TkpSt5n3FQZTe
|
|
||||||
nLyQ+RNzsEHzmyOtTSa0Q+5KVluO1TE3ifpv8737pTLdY8t2waBamoboCu8=
|
|
||||||
-----END CERTIFICATE-----
|
|
|
@ -1,27 +0,0 @@
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAtmFrsKZTNh3ObcwTLnKL1vZ8GfIjRBaOaWw3PO9dKZp5BfsL
|
|
||||||
A87S8uGnyXujnlR8goEMZhPq02XKFm76IacVt2cv/HrODMtO0Sh6iNzWGnU4VLw7
|
|
||||||
JiNdHBd7SW4TmWiKzGhMSxqKJGWCsGzQMu8idfjC8jQrhRbGjojTcRzox/yJyksx
|
|
||||||
Lhki1evLXQuz3vrmpwXAu0SoTq41AujnHJ2hzwvmv2DMkWMdvU/An5AgQezelmp1
|
|
||||||
spRTf9UQZgIKvvpA35UmhfZPmXZeiOI4hZgjxktJPgDK3uD7gCjmTmTsIRdLFpVy
|
|
||||||
MR+sz5vcNG0mHUywbqS/OOkUzu9jbTT/lyl+QwIDAQABAoIBAA6UVR6G/UnrMhBW
|
|
||||||
6wWghItHov4T/Du6LeJBk1zcqa7kuV4ABo5kXzqpTVdu+dJzYIyyMkKKvw/tKC2I
|
|
||||||
65f7GmJR7mUZkBU3v3I68Si1tqvgyQMFFRlkZFIVknZ5RTnTQJ08jTTHx1lHgB4I
|
|
||||||
ZNBdi3ywySzBfOUjv/Wu/HAjZnxuEh2guBpRMZdwQwZLXr2koDa5inL3IwJrA4Ir
|
|
||||||
QzpZ0y6ql3A0tw7jAw36G1AKyyz74aFwJ0I8U8w+2Uk4iX5hcKGA8mFq4lyO4/3+
|
|
||||||
7W2Z4V8cQzwMq2SMixI0Omxlc2BJUi9j17Ey//5dAXyPaG8QI1kzeL/3Gbs8YBMq
|
|
||||||
ekN8AZECgYEA5YxcFIVv3yO+ARNWUHovrsMuf9ElhyRuZd0I2+vjrq1b9zQsSy2d
|
|
||||||
PsyYWD17lO/GDmpTzZOdVsYtZHi+EiXmQnkzLJ4m2nlc7W4annWlbzlQMEn6vAji
|
|
||||||
l9bSHJXXiiIB7X/oHpDUdsnJp/uyAJppmnVLbSBboNCrG4Mf5cJqOnsCgYEAy2We
|
|
||||||
scp19h4UEKAU0Yh+5jh8W4VVtlISkH64vMgz/JZWXMPt1bM5C/5j+3UVUL5VmFqF
|
|
||||||
J1g0gXYkTGTL0+entb3SUiL42zrp3rZ3GgMU6V+aktq3dmri5bOifzihuLHLgjO5
|
|
||||||
u/MJPBzvFxIiJxnNBybNLijIZfPm+9roUfpcBNkCgYBGE3Zc0WuYnEm5/FRCVzrN
|
|
||||||
SEqevJOPUSDeuf6lXLryLXxA2E2ZWcCCVmU/su1SR2yYI/+XZ7QFtJRQ8sdbtPQ5
|
|
||||||
YNStj05fLeOfnBhGPbYWYVHInB0OYEwEfJFCJsBZLA6YmY6cHiyuYuXMAXuS0ZDh
|
|
||||||
lWNEWjd+vZUu3fXT52kUlwKBgDgq/eH3GRA4Si41JsqeOPz2iFD1xy+sBnhkpjtr
|
|
||||||
xf9wvLStXpZvAcfwHkgokxRTG2wRQ0gUMZu2tltqUmdYR5YGr3gDNFnGMSNRnB5Q
|
|
||||||
z4uK3TLEt3k6FyJ7stoTF4Xbg2mXQylF+jzheJ0UYt4NX/MjofGnTX/qFNVkJFfP
|
|
||||||
HW4xAoGBAMBb9cXTpzOMiMcSdQRlaLttV1p05pqxTgQNEQD8HB+lkx4AGnnHvtxW
|
|
||||||
XQJvPumtqdCEpfe4kaqLip8T+67sGfcDVQMogJc/tpvZ0AN4FuViFsf/YDuTPXEp
|
|
||||||
whMldPHtusbRP2fk/JFq4Ak0Xz2wAI1iMD3qfBeW6eJpvRllUo69
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
|
@ -115,3 +115,17 @@ auth.redis.acl_cmd = HGETALL mqtt_acl:%u
|
||||||
## Value: File
|
## Value: File
|
||||||
#auth.redis.ssl.keyfile = path/to/your/keyfile
|
#auth.redis.ssl.keyfile = path/to/your/keyfile
|
||||||
|
|
||||||
|
## In mode verify_none the default behavior is to allow all x509-path
|
||||||
|
## validation errors.
|
||||||
|
##
|
||||||
|
## Value: true | false
|
||||||
|
#auth.redis.ssl.verify = false
|
||||||
|
|
||||||
|
## If not specified, the server's names returned in server's certificate is validated against
|
||||||
|
## what's provided `auth.redis.server` config's host part.
|
||||||
|
## Setting to 'disable' will make EMQ X ignore unmatched server names.
|
||||||
|
## If set with a host name, the server's names returned in server's certificate is validated
|
||||||
|
## against this value.
|
||||||
|
##
|
||||||
|
## Value: String | disable
|
||||||
|
## auth.redis.ssl.server_name_indication = disable
|
|
@ -50,21 +50,27 @@
|
||||||
{datatype, string}
|
{datatype, string}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
|
{mapping, "auth.redis.ssl.verify", "emqx_auth_redis.options", [
|
||||||
|
{default, false},
|
||||||
|
{datatype, {enum, [true, false]}}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{mapping, "auth.redis.ssl.server_name_indication", "emqx_auth_redis.options", [
|
||||||
|
{datatype, string}
|
||||||
|
]}.
|
||||||
|
|
||||||
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
||||||
{mapping, "auth.redis.cafile", "emqx_auth_redis.options", [
|
{mapping, "auth.redis.cafile", "emqx_auth_redis.options", [
|
||||||
{default, ""},
|
|
||||||
{datatype, string}
|
{datatype, string}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
||||||
{mapping, "auth.redis.certfile", "emqx_auth_redis.options", [
|
{mapping, "auth.redis.certfile", "emqx_auth_redis.options", [
|
||||||
{default, ""},
|
|
||||||
{datatype, string}
|
{datatype, string}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
||||||
{mapping, "auth.redis.keyfile", "emqx_auth_redis.options", [
|
{mapping, "auth.redis.keyfile", "emqx_auth_redis.options", [
|
||||||
{default, ""},
|
|
||||||
{datatype, string}
|
{datatype, string}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
|
@ -76,7 +82,7 @@
|
||||||
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
%% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0
|
||||||
CA = cuttlefish:conf_get(
|
CA = cuttlefish:conf_get(
|
||||||
"auth.redis.ssl.cacertfile", Conf,
|
"auth.redis.ssl.cacertfile", Conf,
|
||||||
cuttlefish:conf_get("auth.redis.cacertfile", Conf, undefined)
|
cuttlefish:conf_get("auth.redis.cafile", Conf, undefined)
|
||||||
),
|
),
|
||||||
Cert = cuttlefish:conf_get(
|
Cert = cuttlefish:conf_get(
|
||||||
"auth.redis.ssl.certfile", Conf,
|
"auth.redis.ssl.certfile", Conf,
|
||||||
|
@ -86,10 +92,21 @@
|
||||||
"auth.redis.ssl.keyfile", Conf,
|
"auth.redis.ssl.keyfile", Conf,
|
||||||
cuttlefish:conf_get("auth.redis.keyfile", Conf, undefined)
|
cuttlefish:conf_get("auth.redis.keyfile", Conf, undefined)
|
||||||
),
|
),
|
||||||
|
Verify = case cuttlefish:conf_get("auth.redis.ssl.verify", Conf, false) of
|
||||||
|
true -> verify_peer;
|
||||||
|
flase -> verify_none
|
||||||
|
end,
|
||||||
|
SNI = case cuttlefish:conf_get("auth.redis.ssl.server_name_indication", Conf, undefined) of
|
||||||
|
"disable" -> disable;
|
||||||
|
SNI0 -> SNI0
|
||||||
|
end,
|
||||||
[{options, [{ssl_options,
|
[{options, [{ssl_options,
|
||||||
Filter([{cacertfile, CA},
|
Filter([{cacertfile, CA},
|
||||||
{certfile, Cert},
|
{certfile, Cert},
|
||||||
{keyfile, Key}])
|
{keyfile, Key},
|
||||||
|
{verify, Verify},
|
||||||
|
{server_name_indication, SNI}
|
||||||
|
])
|
||||||
}]}];
|
}]}];
|
||||||
_ -> [{options, []}]
|
_ -> [{options, []}]
|
||||||
end
|
end
|
||||||
|
|
|
@ -65,10 +65,11 @@ save_files_return_opts(Options, Dir) ->
|
||||||
false -> verify_none;
|
false -> verify_none;
|
||||||
_ -> verify_peer
|
_ -> verify_peer
|
||||||
end,
|
end,
|
||||||
|
SNI = Get(<<"server_name_indication">>),
|
||||||
Versions = emqx_tls_lib:integral_versions(Get(<<"tls_versions">>)),
|
Versions = emqx_tls_lib:integral_versions(Get(<<"tls_versions">>)),
|
||||||
Ciphers = emqx_tls_lib:integral_ciphers(Versions, Get(<<"ciphers">>)),
|
Ciphers = emqx_tls_lib:integral_ciphers(Versions, Get(<<"ciphers">>)),
|
||||||
filter([{keyfile, Key}, {certfile, Cert}, {cacertfile, CA},
|
filter([{keyfile, Key}, {certfile, Cert}, {cacertfile, CA},
|
||||||
{verify, Verify}, {versions, Versions}, {ciphers, Ciphers}]).
|
{verify, Verify}, {server_name_indication, SNI}, {versions, Versions}, {ciphers, Ciphers}]).
|
||||||
|
|
||||||
%% @doc Save a key or certificate file in data dir,
|
%% @doc Save a key or certificate file in data dir,
|
||||||
%% and return path of the saved file.
|
%% and return path of the saved file.
|
||||||
|
|
|
@ -43,6 +43,15 @@ web.hook.body.encoding_of_payload_field = plain
|
||||||
## Value: true | false
|
## Value: true | false
|
||||||
## web.hook.ssl.verify = false
|
## web.hook.ssl.verify = false
|
||||||
|
|
||||||
|
## If not specified, the server's names returned in server's certificate is validated against
|
||||||
|
## what's provided `web.hook.url` config's host part.
|
||||||
|
## Setting to 'disable' will make EMQ X ignore unmatched server names.
|
||||||
|
## If set with a host name, the server's names returned in server's certificate is validated
|
||||||
|
## against this value.
|
||||||
|
##
|
||||||
|
## Value: String | disable
|
||||||
|
## web.hook.ssl.server_name_indication = disable
|
||||||
|
|
||||||
## Connection process pool size
|
## Connection process pool size
|
||||||
##
|
##
|
||||||
## Value: Number
|
## Value: Number
|
||||||
|
|
|
@ -34,6 +34,10 @@
|
||||||
{datatype, {enum, [true, false]}}
|
{datatype, {enum, [true, false]}}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
|
{mapping, "web.hook.ssl.server_name_indication", "emqx_web_hook.server_name_indication", [
|
||||||
|
{datatype, string}
|
||||||
|
]}.
|
||||||
|
|
||||||
{mapping, "web.hook.pool_size", "emqx_web_hook.pool_size", [
|
{mapping, "web.hook.pool_size", "emqx_web_hook.pool_size", [
|
||||||
{default, 32},
|
{default, 32},
|
||||||
{datatype, integer}
|
{datatype, integer}
|
||||||
|
|
|
@ -84,17 +84,23 @@
|
||||||
certfile => #{order => 7,
|
certfile => #{order => 7,
|
||||||
type => file,
|
type => file,
|
||||||
default => <<"">>,
|
default => <<"">>,
|
||||||
title =>#{en => <<"SSL Cert">>,
|
title => #{en => <<"SSL Cert">>,
|
||||||
zh => <<"SSL Cert"/utf8>>},
|
zh => <<"SSL Cert"/utf8>>},
|
||||||
description => #{en => <<"Your ssl certfile">>,
|
description => #{en => <<"Your ssl certfile">>,
|
||||||
zh => <<"SSL 证书"/utf8>>}},
|
zh => <<"SSL 证书"/utf8>>}},
|
||||||
verify => #{order => 8,
|
verify => #{order => 8,
|
||||||
type => boolean,
|
type => boolean,
|
||||||
default => false,
|
default => false,
|
||||||
title =>#{en => <<"Verify Server Certfile">>,
|
title => #{en => <<"Verify Server Certfile">>,
|
||||||
zh => <<"校验服务器证书"/utf8>>},
|
zh => <<"校验服务器证书"/utf8>>},
|
||||||
description => #{en => <<"Whether to verify the server certificate. By default, the client will not verify the server's certificate. If verification is required, please set it to true.">>,
|
description => #{en => <<"Whether to verify the server certificate. By default, the client will not verify the server's certificate. If verification is required, please set it to true.">>,
|
||||||
zh => <<"是否校验服务器证书。 默认客户端不会去校验服务器的证书,如果需要校验,请设置成true。"/utf8>>}}
|
zh => <<"是否校验服务器证书。 默认客户端不会去校验服务器的证书,如果需要校验,请设置成true。"/utf8>>}},
|
||||||
|
server_name_indication => #{order => 9,
|
||||||
|
type => string,
|
||||||
|
title => #{en => <<"Server Name Indication">>,
|
||||||
|
zh => <<"服务器名称指示"/utf8>>},
|
||||||
|
description => #{en => <<"Specify the hostname used for peer certificate verification, or set to disable to turn off this verification.">>,
|
||||||
|
zh => <<"指定用于对端证书验证时使用的主机名,或者设置为 disable 以关闭此项验证。"/utf8>>}}
|
||||||
}).
|
}).
|
||||||
|
|
||||||
-define(ACTION_PARAM_RESOURCE, #{
|
-define(ACTION_PARAM_RESOURCE, #{
|
||||||
|
|
|
@ -60,11 +60,18 @@ translate_env() ->
|
||||||
true -> verify_peer;
|
true -> verify_peer;
|
||||||
false -> verify_none
|
false -> verify_none
|
||||||
end,
|
end,
|
||||||
|
SNI = case application:get_env(?APP, server_name_indication, undefined) of
|
||||||
|
"disable" -> disable;
|
||||||
|
SNI0 -> SNI0
|
||||||
|
end,
|
||||||
TLSOpts = lists:filter(fun({_K, V}) ->
|
TLSOpts = lists:filter(fun({_K, V}) ->
|
||||||
V /= <<>> andalso V /= undefined andalso V /= "" andalso true
|
V /= <<>> andalso V /= undefined andalso V /= "" andalso true
|
||||||
end, [{keyfile, KeyFile}, {certfile, CertFile}, {cacertfile, CACertFile}]),
|
end, [{keyfile, KeyFile},
|
||||||
NTLSOpts = [ {verify, VerifyType}
|
{certfile, CertFile},
|
||||||
, {versions, emqx_tls_lib:default_versions()}
|
{cacertfile, CACertFile},
|
||||||
|
{verify, VerifyType},
|
||||||
|
{server_name_indication, SNI}]),
|
||||||
|
NTLSOpts = [ {versions, emqx_tls_lib:default_versions()}
|
||||||
, {ciphers, emqx_tls_lib:default_ciphers()}
|
, {ciphers, emqx_tls_lib:default_ciphers()}
|
||||||
| TLSOpts
|
| TLSOpts
|
||||||
],
|
],
|
||||||
|
|
|
@ -19,7 +19,7 @@ echo "elvis -v: $elvis_version"
|
||||||
echo "git diff base: $base"
|
echo "git diff base: $base"
|
||||||
|
|
||||||
if [ ! -f ./elvis ] || [ "$(./elvis -v | grep -oE '[1-9]+\.[0-9]+\.[0-9]+\-emqx-[0-9]+')" != "$elvis_version" ]; then
|
if [ ! -f ./elvis ] || [ "$(./elvis -v | grep -oE '[1-9]+\.[0-9]+\.[0-9]+\-emqx-[0-9]+')" != "$elvis_version" ]; then
|
||||||
curl -fLO "https://github.com/emqx/elvis/releases/download/$elvis_version/elvis"
|
curl --silent --show-error -fLO "https://github.com/emqx/elvis/releases/download/$elvis_version/elvis"
|
||||||
chmod +x ./elvis
|
chmod +x ./elvis
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -27,7 +27,11 @@ if [[ "$base" =~ [0-9a-f]{8,40} ]]; then
|
||||||
# base is a commit sha1
|
# base is a commit sha1
|
||||||
compare_base="$base"
|
compare_base="$base"
|
||||||
else
|
else
|
||||||
remote="$(git remote -v | grep -E 'github\.com(.|/)emqx' | grep fetch | awk '{print $1}')"
|
if [[ $CI == true ]];then
|
||||||
|
remote="$(git remote -v | grep -E "github\.com(.|/)$GITHUB_REPOSITORY" | grep fetch | awk '{print $1}')"
|
||||||
|
else
|
||||||
|
remote="$(git remote -v | grep -E 'github\.com(.|/)emqx' | grep fetch | awk '{print $1}')"
|
||||||
|
fi
|
||||||
git fetch "$remote" "$base"
|
git fetch "$remote" "$base"
|
||||||
compare_base="$remote/$base"
|
compare_base="$remote/$base"
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Reference in New Issue