2
0

Compare commits

...

6 Commits

Author SHA1 Message Date
9737e7a057 [tests] append ".test"-suffix to vhost names, recreate test CA with wildcard and client certificate
- wildcards in TLS need at least two dots after the wildcard;
  ".test" is an offical TLD for tests - use it for all tests.
- add wildcards to both server certs for use in other unit tests that
  might need custom configs (i.e. vhosts)
- also add a client certificate for future tests
- while recreating the test CA switch to ECC keys

Change-Id: Ic6fecd414ec9e83b6b634f3cd31a2f07d96a99f6
2025-01-05 14:12:20 +01:00
b183301a62 [lua] disable undocumented vr:subrequest(..)
Change-Id: Ic6ddd19b99b79dbadde8e74860cf896577f912b5
2025-01-05 14:12:20 +01:00
1561ceaa97 [lua] rework handling of environment (i.e. globals)
* globals shouldn't persist "by default" to avoid leaking memory by
  accident
* "non-request" environments are ephemeral and will be cleaned up after
  (mostly) every call
* request environments are local to handlers in a request
* new REQ global for persistent request state across handlers

Change-Id: I2a31b12860dd0b5640191612b82929effa38cd28
2025-01-05 14:12:20 +01:00
1c79b9c879 [lua] rename li_lua_push_lvalues_dict to li_lua_set_global_condition_lvalues
It doesn't actually push things to the lua stack.

Change-Id: Ia25940fc4dd50b7b41b6c5b0d8e6db6b9055c6b2
2025-01-05 14:12:20 +01:00
39afc6e0a2 [tests] lua: make show_env_info function local
Change-Id: Iafde90908bbdc6c972d49f31328bf9cfad210a0e
2025-01-05 14:12:18 +01:00
5f14705f4c [mod_lua] fix error handler stack position when calling lua "setups"
Change-Id: I2e16145248a25e1a6a8666ab471455ad3b877ba2
2025-01-05 14:11:19 +01:00
44 changed files with 884 additions and 1346 deletions

View File

@ -11,6 +11,20 @@
* [`lua_handler`](mod_lua.html#mod_lua__action_lua-handler): without locking, and every worker has its own `lua_State` (and they cannot share their global context). * [`lua_handler`](mod_lua.html#mod_lua__action_lua-handler): without locking, and every worker has its own `lua_State` (and they cannot share their global context).
</markdown></description> </markdown></description>
<section title="Lua global environment">
<markdown>
To prevent accidental pollution of the global environment a limited environment is provided:
* Outside of request handling the limited environment will forget any globals you set
* Within request handling globals will persist per context (i.e. a handler) and request; also the `REQ` global will provide access to persistent state per request (across handlers).
* Objects already present in the global environment will be accessible and can be modified.
* The global environment can be accessed explicitly via `_G`.
* Also everything in the environment is confined to the `lua_State` (see above), as data can't be shared between different `lua_State`s.
This should mostly work just fine; you only need to be careful when providing data to your handlers from a parent block; those variables should be declared `local` or your handler won't see them.
</markdown>
</section>
<section title="Lua Config"> <section title="Lua Config">
<markdown> <markdown>
This section describe how to translate concepts from the main config to Lua. You can write the whole config in Lua or only parts and include them (for example with [`include_lua`](core_config.html#core_config__includes)). This section describe how to translate concepts from the main config to Lua. You can write the whole config in Lua or only parts and include them (for example with [`include_lua`](core_config.html#core_config__includes)).
@ -22,7 +36,7 @@
]]></markdown></description> ]]></markdown></description>
<config><![CDATA[ <config><![CDATA[
function mydebug(vr) local function mydebug(vr)
local url_fields = { "raw", "raw_path", "raw_orig_path", "scheme", "authority", "path", "query", "host" } local url_fields = { "raw", "raw_path", "raw_orig_path", "scheme", "authority", "path", "query", "host" }
local phys_fields = { "path", "doc_root", "pathinfo" } local phys_fields = { "path", "doc_root", "pathinfo" }
if vr:handle_direct() then if vr:handle_direct() then

View File

@ -12,6 +12,8 @@ struct lua_State;
struct liLuaState { struct liLuaState {
struct lua_State* L; /** NULL if compiled without Lua */ struct lua_State* L; /** NULL if compiled without Lua */
GStaticRecMutex lualock; GStaticRecMutex lualock;
int li_env_ref;
int li_env_default_metatable_ref;
}; };
LI_API void li_lua_init(liLuaState* LL, liServer* srv, liWorker* wrk); LI_API void li_lua_init(liLuaState* LL, liServer* srv, liWorker* wrk);

View File

@ -9,6 +9,6 @@ LI_API void li_lua_init_condition_mt(liServer *srv, lua_State *L);
LI_API liCondition* li_lua_get_condition(lua_State *L, int ndx); LI_API liCondition* li_lua_get_condition(lua_State *L, int ndx);
LI_API int li_lua_push_condition(liServer *srv, lua_State *L, liCondition *c); LI_API int li_lua_push_condition(liServer *srv, lua_State *L, liCondition *c);
LI_API void li_lua_push_lvalues_dict(liServer *srv, lua_State *L); LI_API void li_lua_set_global_condition_lvalues(liServer *srv, lua_State *L);
#endif #endif

View File

@ -77,7 +77,9 @@ LI_API struct stat* li_lua_get_stat(lua_State *L, int ndx);
LI_API int li_lua_push_stat(lua_State *L, struct stat *st); LI_API int li_lua_push_stat(lua_State *L, struct stat *st);
/* subrequest_lua.c */ /* subrequest_lua.c */
/* DISABLED FOR NOW
LI_API void li_lua_init_subrequest_mt(lua_State *L); LI_API void li_lua_init_subrequest_mt(lua_State *L);
*/
/* virtualrequest_lua.c */ /* virtualrequest_lua.c */
LI_API void li_lua_init_virtualrequest_mt(lua_State *L); LI_API void li_lua_init_virtualrequest_mt(lua_State *L);
@ -109,8 +111,42 @@ LI_API int li_lua_push_traceback(lua_State *L, int nargs);
*/ */
LI_API gboolean li_lua_call_object(liServer *srv, liVRequest *vr, lua_State *L, const char* method, int nargs, int nresults, gboolean optional); LI_API gboolean li_lua_call_object(liServer *srv, liVRequest *vr, lua_State *L, const char* method, int nargs, int nresults, gboolean optional);
LI_API void li_lua_restore_globals(lua_State *L); /* Manage environment ("globals", `_ENV`, ...)
LI_API void li_lua_new_globals(lua_State *L); * - by default globals shouldn't survive across requests (and not from initial execution either)
* - globals set during a request should be "local" to request and context (per handler, filter, ...)
* - only overwrite environment "locally" for our code
* - inherit normal environment through metatables (just setting globals is "local")
* - `_G` is inherited and can be used for persistent state.
* - `REQ` in request context points to a "request-global" table (per lua state of course)
* - lua5.2+: can use _ENV.x to make access to global "x" explicit
*
* modifying existing objects in environment (inherited from "main" global environment)
* are persisted though (per lua state).
*
* Implementation:
* - remember initial GLOBALS in liLuaState
* - single instance of "our environment" table LI_ENV; "empty" userdata with (initial) metatable LI_ENV_MT_DEFAULT={__index=GLOBALS}
* * creating new globals would fail - not designed for actual use
* - "ephemeral" environment for code running outside of requests:
* change LI_ENV metatable to {__index=__newindex={} with metatable LI_ENV_MT_DEFAULT }
* globals lost once environment is "restored"
* - "request" environment for code running during a requests:
* create REQ_CTX table with metatable LI_ENV_MT_DEFAULT for lifetime of request
* change LI_ENV metatable to {__index=__newindex=REQ_CTX }
* globals lost once request is cleaned up
* - restoring environment:
restore LI_ENV metatable to previous meta table (index returned by active methods)
*/
LI_API void li_lua_environment_activate_ephemeral(liLuaState *LL); /* +1 */
LI_API int li_lua_environment_create(liLuaState *LL, liVRequest *vr); /* returns env (metatable) ref */
INLINE void li_lua_environment_free(lua_State *L, int env_mt_ref);
LI_API void li_lua_environment_activate(liLuaState *LL, int env_mt_ref); /* +1 */
LI_API void li_lua_environment_restore(liLuaState *LL); /* -1 */
/* make LI_ENV the current global environment (backup old environment on stack) */
LI_API void li_lua_environment_use_globals(liLuaState *LL); /* +1 */
/* restore previous global environment from stack */
LI_API void li_lua_environment_restore_globals(lua_State *L); /* -1 */
/* joinWith " " (map tostring parameter[from..to]) */ /* joinWith " " (map tostring parameter[from..to]) */
LI_API GString* li_lua_print_get_string(lua_State *L, int from, int to); LI_API GString* li_lua_print_get_string(lua_State *L, int from, int to);
@ -125,11 +161,10 @@ LI_API GString* li_lua_print_get_string(lua_State *L, int from, int to);
*/ */
LI_API int li_lua_ghashtable_gstring_pairs(lua_State *L, GHashTable *ht); LI_API int li_lua_ghashtable_gstring_pairs(lua_State *L, GHashTable *ht);
LI_API void li_lua_setfenv(lua_State *L, int funcindex); /* -1 */
/* internal: subrequests (vrequest metamethod) */ /* internal: subrequests (vrequest metamethod) */
/* DISABLED FOR NOW
LI_API int li_lua_vrequest_subrequest(lua_State *L); LI_API int li_lua_vrequest_subrequest(lua_State *L);
*/
/* inline implementations */ /* inline implementations */
@ -158,6 +193,20 @@ INLINE int li_lua_new_protected_metatable(lua_State *L, const char *tname) {
return r; return r;
} }
/* create "stable" stack index from negative offsets like -1 and -2 (but not pseudo-indices) */
INLINE int li_lua_stable_index(lua_State *L, int index) {
if (index < 0) {
int top = lua_gettop(L);
/* valid iff: 1 <= abs(index) = -index <= top; "-index" might overflow, so check `index >= -top` instead */
if (index >= -top) return (top + index) + 1;
}
return index;
}
INLINE void li_lua_environment_free(lua_State *L, int env_mt_ref) {
luaL_unref(L, LUA_REGISTRYINDEX, env_mt_ref);
}
INLINE void li_lua_setfuncs(lua_State *L, const luaL_Reg *l) { INLINE void li_lua_setfuncs(lua_State *L, const luaL_Reg *l) {
#if LUA_VERSION_NUM == 501 #if LUA_VERSION_NUM == 501
luaL_register(L, NULL, l); luaL_register(L, NULL, l);

View File

@ -93,6 +93,9 @@ struct liVRequest {
/* environment entries will be passed to the backends */ /* environment entries will be passed to the backends */
liEnvironment env; liEnvironment env;
/* request specific table; `REQ` global in lua */
int lua_server_env_ref; /* for srv->LL */
int lua_worker_env_ref; /* for wrk->LL */
/* -> vr_in -> filters_in -> in_memory ->(buffer_on_disk) -> in -> handle -> out -> filters_out -> vr_out -> */ /* -> vr_in -> filters_in -> in_memory ->(buffer_on_disk) -> in -> handle -> out -> filters_out -> vr_out -> */
GPtrArray *filters; GPtrArray *filters;

View File

@ -68,7 +68,6 @@ int li_lua_push_action(liServer *srv, lua_State *L, liAction *a) {
typedef struct lua_action_param lua_action_param; typedef struct lua_action_param lua_action_param;
struct lua_action_param { struct lua_action_param {
int func_ref; int func_ref;
int env_ref;
liLuaState *LL; liLuaState *LL;
}; };
@ -87,24 +86,17 @@ static liHandlerResult lua_action_func(liVRequest *vr, gpointer param, gpointer
li_lua_lock(par->LL); li_lua_lock(par->LL);
/* set _G in environment to request specific table */
lua_rawgeti(L, LUA_REGISTRYINDEX, par->env_ref); /* +1 */
if (!ctx) { if (!ctx) {
*context = ctx = g_slice_new0(lua_action_ctx); *context = ctx = g_slice_new0(lua_action_ctx);
lua_newtable(L); /* +1 */ ctx->g_ref = li_lua_environment_create(par->LL, vr);
lua_pushvalue(L, -1); /* +1 */
ctx->g_ref = luaL_ref(L, LUA_REGISTRYINDEX); /* -1 */
} else {
lua_rawgeti(L, LUA_REGISTRYINDEX, ctx->g_ref); /* +1 */
} }
lua_setfield(L, -2, "_G"); /* -1 (pops request context table) */ li_lua_environment_activate(par->LL, ctx->g_ref); /* +1 */
lua_pop(L, 1); /* -1 (pop env) */
lua_rawgeti(L, LUA_REGISTRYINDEX, par->func_ref); /* +1 */ lua_rawgeti(L, LUA_REGISTRYINDEX, par->func_ref); /* +1 */
li_lua_push_vrequest(L, vr); /* +1 */ li_lua_push_vrequest(L, vr); /* +1 */
errfunc = li_lua_push_traceback(L, 1); /* +1, but inserted before `1` args */ errfunc = li_lua_push_traceback(L, 1); /* +1, but inserted before `1` args */
if (lua_pcall(L, 1, 1, errfunc)) { if (lua_pcall(L, 1, 1, errfunc)) { /* -2 (func + arg), +1 (result / error) */
ERROR(srv, "lua_pcall(): %s", lua_tostring(L, -1)); ERROR(srv, "lua_pcall(): %s", lua_tostring(L, -1));
lua_pop(L, 1); /* -1 (pop error) */ lua_pop(L, 1); /* -1 (pop error) */
res = LI_HANDLER_ERROR; res = LI_HANDLER_ERROR;
@ -126,11 +118,7 @@ static liHandlerResult lua_action_func(liVRequest *vr, gpointer param, gpointer
} }
lua_remove(L, errfunc); /* -1 (should be at the top of the stack) */ lua_remove(L, errfunc); /* -1 (should be at the top of the stack) */
/* clear _G */ li_lua_environment_restore(par->LL); /* -1 */
lua_rawgeti(L, LUA_REGISTRYINDEX, par->env_ref); /* +1 */
lua_pushnil(L); /* +1 */
lua_setfield(L, -2, "_G"); /* -1 (pops value nil) */
lua_pop(L, 1); /* -1 (pop env) */
li_lua_unlock(par->LL); li_lua_unlock(par->LL);
@ -162,7 +150,6 @@ static void lua_action_free(liServer *srv, gpointer param) {
L = par->LL->L; L = par->LL->L;
li_lua_lock(par->LL); li_lua_lock(par->LL);
luaL_unref(L, LUA_REGISTRYINDEX, par->env_ref);
luaL_unref(L, LUA_REGISTRYINDEX, par->func_ref); luaL_unref(L, LUA_REGISTRYINDEX, par->func_ref);
lua_gc(L, LUA_GCCOLLECT, 0); lua_gc(L, LUA_GCCOLLECT, 0);
li_lua_unlock(par->LL); li_lua_unlock(par->LL);
@ -172,36 +159,11 @@ static void lua_action_free(liServer *srv, gpointer param) {
liAction* li_lua_make_action(lua_State *L, int ndx) { liAction* li_lua_make_action(lua_State *L, int ndx) {
lua_action_param *par = g_slice_new0(lua_action_param); lua_action_param *par = g_slice_new0(lua_action_param);
liWorker *wrk;
lua_getfield(L, LUA_REGISTRYINDEX, LI_LUA_REGISTRY_WORKER);
wrk = lua_touserdata(L, -1);
lua_pop(L, 1);
lua_pushvalue(L, ndx); /* +1 */ lua_pushvalue(L, ndx); /* +1 */
par->func_ref = luaL_ref(L, LUA_REGISTRYINDEX); /* -1 */ par->func_ref = luaL_ref(L, LUA_REGISTRYINDEX); /* -1 */
par->LL = li_lua_state_get(L); par->LL = li_lua_state_get(L);
/* new environment for function */
lua_pushvalue(L, ndx); /* +1 */
lua_newtable(L); /* +1 */
/* new mt */
lua_newtable(L); /* +1 */
/* TODO: protect metatable? */
lua_getfield(L, LUA_REGISTRYINDEX, LI_LUA_REGISTRY_GLOBALS); /* +1 */
lua_setfield(L, -2, "__index"); /* -1 */
lua_setmetatable(L, -2); /* -1 */
if (NULL != wrk) {
li_lua_push_action_table(wrk->srv, wrk, L); /* +1 */
lua_setfield(L, -2, "action"); /* -1 */
}
/* remember environment */
lua_pushvalue(L, -1); /* +1 */
par->env_ref = luaL_ref(L, LUA_REGISTRYINDEX); /* -1 */
/* set environment for function */
li_lua_setfenv(L, -2); /* -1 */
lua_pop(L, 1); /* -1 */
return li_action_new_function(lua_action_func, lua_action_cleanup, lua_action_free, par); return li_action_new_function(lua_action_func, lua_action_cleanup, lua_action_free, par);
} }

View File

@ -299,10 +299,7 @@ static int lua_push_cond_lvalue_t(liServer *srv, lua_State *L, liCondLValue t) {
return 1; return 1;
} }
void li_lua_set_global_condition_lvalues(liServer *srv, lua_State *L) {
void li_lua_push_lvalues_dict(liServer *srv, lua_State *L) {
size_t i; size_t i;
for (i = 0; i < LI_COND_LVALUE_FIRST_WITH_KEY; i++) { for (i = 0; i < LI_COND_LVALUE_FIRST_WITH_KEY; i++) {

View File

@ -106,6 +106,7 @@ static int li_lua_config_handle_server_action(liServer *srv, liWorker *wrk, lua_
li_lua_unlock(LL); li_lua_unlock(LL);
if (!wrk) wrk = srv->main_worker;
a = li_plugin_config_action(srv, wrk, key, val); a = li_plugin_config_action(srv, wrk, key, val);
li_lua_lock(LL); li_lua_lock(LL);
@ -159,10 +160,10 @@ gboolean li_config_lua_load(liLuaState *LL, liServer *srv, liWorker *wrk, const
li_lua_lock(LL); li_lua_lock(LL);
li_lua_environment_use_globals(LL); /* +1 */
li_lua_environment_activate_ephemeral(LL); /* +1 */
lua_stack_top = lua_gettop(L); lua_stack_top = lua_gettop(L);
li_lua_new_globals(L);
if (0 != luaL_loadfile(L, filename)) { if (0 != luaL_loadfile(L, filename)) {
_ERROR(srv, wrk, NULL, "Loading script '%s' failed: %s", filename, lua_tostring(L, -1)); _ERROR(srv, wrk, NULL, "Loading script '%s' failed: %s", filename, lua_tostring(L, -1));
return FALSE; return FALSE;
@ -176,19 +177,14 @@ gboolean li_config_lua_load(liLuaState *LL, liServer *srv, liWorker *wrk, const
lua_setglobal(L, "setup"); lua_setglobal(L, "setup");
} }
li_lua_push_action_table(srv, wrk, L);
lua_setglobal(L, "action");
li_lua_push_lvalues_dict(srv, L);
/* arguments for config: local filename, args = ... */ /* arguments for config: local filename, args = ... */
/* 1. filename */ /* 1. filename */
lua_pushstring(L, filename); lua_pushstring(L, filename); /* +1 */
/* 2. args */ /* 2. args */
li_lua_push_value(L, args); li_lua_push_value(L, args); /* +1 */
errfunc = li_lua_push_traceback(L, 2); errfunc = li_lua_push_traceback(L, 2); /* +1, but before args */
if (lua_pcall(L, 2, 0, errfunc)) { if (lua_pcall(L, 2, 0, errfunc)) { /* -3 (func + args), 0 results (but 1 error) */
_ERROR(srv, wrk, NULL, "lua_pcall(): %s", lua_tostring(L, -1)); _ERROR(srv, wrk, NULL, "lua_pcall(): %s", lua_tostring(L, -1));
/* cleanup stack */ /* cleanup stack */
@ -196,7 +192,8 @@ gboolean li_config_lua_load(liLuaState *LL, liServer *srv, liWorker *wrk, const
lua_pop(L, lua_gettop(L) - lua_stack_top); lua_pop(L, lua_gettop(L) - lua_stack_top);
} }
li_lua_restore_globals(L); li_lua_environment_restore(LL); /* -1 */
li_lua_environment_restore_globals(L); /* -1 */
li_lua_unlock(LL); li_lua_unlock(LL);
@ -210,7 +207,8 @@ gboolean li_config_lua_load(liLuaState *LL, liServer *srv, liWorker *wrk, const
LI_FORCE_ASSERT(lua_gettop(L) == lua_stack_top); LI_FORCE_ASSERT(lua_gettop(L) == lua_stack_top);
li_lua_restore_globals(L); li_lua_environment_restore(LL); /* -1 */
li_lua_environment_restore_globals(L); /* -1 */
lua_gc(L, LUA_GCCOLLECT, 0); lua_gc(L, LUA_GCCOLLECT, 0);

View File

@ -2,6 +2,7 @@
#include <lighttpd/core_lua.h> #include <lighttpd/core_lua.h>
#include <lighttpd/actions_lua.h> #include <lighttpd/actions_lua.h>
#include <lighttpd/condition_lua.h> #include <lighttpd/condition_lua.h>
#include <lighttpd/config_lua.h>
#include <lighttpd/value_lua.h> #include <lighttpd/value_lua.h>
liLuaState *li_lua_state_get(lua_State *L) { liLuaState *li_lua_state_get(lua_State *L) {
@ -106,33 +107,101 @@ static void li_lua_push_globals(lua_State *L) { /* +1 */
static void li_lua_set_globals(lua_State *L) { /* -1 */ static void li_lua_set_globals(lua_State *L) { /* -1 */
#if LUA_VERSION_NUM == 501 #if LUA_VERSION_NUM == 501
LI_FORCE_ASSERT(lua_istable(L, -1) && "LUA_GLOBALSINDEX must contain a table in lua5.1");
lua_replace(L, LUA_GLOBALSINDEX); /* -1 */ lua_replace(L, LUA_GLOBALSINDEX); /* -1 */
#else #else
lua_rawseti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS); /* -1 */ lua_rawseti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS); /* -1 */
#endif #endif
} }
static void li_lua_store_globals(lua_State *L) { static void create_environment(liLuaState *LL) /* +1 (a new LI_ENV metatable) */ {
/* backup global table reference */ lua_State *L = LL->L;
li_lua_push_globals(L); /* +1 */
lua_setfield(L, LUA_REGISTRYINDEX, LI_LUA_REGISTRY_GLOBALS); /* -1 */ lua_createtable(L, 0, 2); /* +1 LI_ENV metatable (return value) */
lua_newtable(L); /* +1 storage table */
/* setup storage metatable */
lua_rawgeti(L, LUA_REGISTRYINDEX, LL->li_env_default_metatable_ref); /* +1 */
lua_setmetatable(L, -2); /* -1 set default metatable as metatable storage table */
/* use storage in new ENV metatable */
lua_pushvalue(L, -1); /* +1, duplicate storage table */
lua_setfield(L, -3, "__index"); /* -1, __index=storage */
lua_setfield(L, -2, "__newindex"); /* -1, __newindex=storage */
} }
void li_lua_restore_globals(lua_State *L) { void li_lua_environment_activate_ephemeral(liLuaState *LL) /* +1 (leaves backup of old metatable to restore with) */ {
lua_getfield(L, LUA_REGISTRYINDEX, LI_LUA_REGISTRY_GLOBALS); /* +1 */ lua_State *L = LL->L;
lua_rawgeti(L, LUA_REGISTRYINDEX, LL->li_env_ref); /* +1 */
LI_FORCE_ASSERT(lua_getmetatable(L, -1)); /* +1 remember old metatable */
lua_insert(L, -2); /* swap top two stack elements */
create_environment(LL); /* +1 */
lua_setmetatable(L, -2); /* -1 set new environment metatable for LI_ENV */
lua_pop(L, 1); /* -1 pop LI_ENV */
}
int li_lua_environment_create(liLuaState *LL, liVRequest *vr) /* returns env ref */ {
lua_State *L = LL->L;
int *req_ref = NULL;
create_environment(LL);
if (NULL != vr) {
if (LL == &vr->wrk->LL) {
req_ref = &vr->lua_worker_env_ref;
} else if (LL == &vr->wrk->srv->LL) {
req_ref = &vr->lua_server_env_ref;
}
if (NULL != req_ref) {
lua_getfield(L, -1, "__newindex"); /* +1 get storage table */
if (*req_ref == LUA_NOREF) {
lua_newtable(L); /* +1 */
lua_pushvalue(L, -1); /* +1 */
*req_ref = luaL_ref(L, LUA_REGISTRYINDEX); /* -1 */
} else {
lua_rawgeti(L, LUA_REGISTRYINDEX, *req_ref); /* +1 */
}
lua_setfield(L, -2, "REQ"); /* -1 set REQ in storage table */
lua_pop(L, 1); /* -1 pop storage table */
}
}
return luaL_ref(L, LUA_REGISTRYINDEX);
}
void li_lua_environment_activate(liLuaState *LL, int env_mt_ref) /* +1 */ {
lua_State *L = LL->L;
lua_rawgeti(L, LUA_REGISTRYINDEX, LL->li_env_ref); /* +1 */
LI_FORCE_ASSERT(lua_getmetatable(L, -1)); /* +1 remember old metatable */
lua_insert(L, -2); /* swap top two stack elements */
lua_rawgeti(L, LUA_REGISTRYINDEX, env_mt_ref); /* +1 */
lua_setmetatable(L, -2); /* -1 set env_mt for LI_ENV */
lua_pop(L, 1); /* -1 pop LI_ENV */
}
void li_lua_environment_restore(liLuaState *LL) /* -1 (expects previous metatable to restore on top) */ {
lua_State *L = LL->L;
lua_rawgeti(L, LUA_REGISTRYINDEX, LL->li_env_ref); /* +1 */
lua_pushvalue(L, -2); /* +1 */
lua_setmetatable(L, -2); /* -1 restore prev mt for LI_ENV */
lua_pop(L, 1); /* -2 */
}
void li_lua_environment_use_globals(liLuaState *LL) /* +1 */ {
lua_State *L = LL->L;
li_lua_push_globals(L); /* +1 backup previous GLOBALS on stack */
lua_rawgeti(L, LUA_REGISTRYINDEX, LL->li_env_ref); /* +1 */
li_lua_set_globals(L); /* -1 */ li_lua_set_globals(L); /* -1 */
} }
void li_lua_new_globals(lua_State *L) { void li_lua_environment_restore_globals(lua_State *L) /* -1 */ {
lua_newtable(L); /* +1 */
/* metatable for new global env, link old globals as readonly */
lua_newtable(L); /* +1 */
/* TODO: protect metatable? */
li_lua_push_globals(L); /* +1 */
lua_setfield(L, -2, "__index"); /* -1 */
lua_setmetatable(L, -2); /* -1 */
li_lua_set_globals(L); /* -1 */ li_lua_set_globals(L); /* -1 */
} }
@ -365,6 +434,30 @@ static void li_lua_push_lighty_constants(lua_State *L, int ndx) {
void li_lua_init2(liLuaState *LL, liServer *srv, liWorker *wrk) { void li_lua_init2(liLuaState *LL, liServer *srv, liWorker *wrk) {
lua_State *L = LL->L; lua_State *L = LL->L;
/* setup refs (won't need cleanup when we free the lua_State) */
lua_createtable(L, 0, 1); /* +1 LI_ENV default metatable */
li_lua_push_globals(L); /* +1 GLOBALS */
lua_setfield(L, -2, "__index"); /* -1, __index=GLOBALS */
LL->li_env_default_metatable_ref = luaL_ref(L, LUA_REGISTRYINDEX); /* -1 */
#if LUA_VERSION_NUM == 501
/* in lua 5.1 the "fenv" / global must be an actual table */
lua_newtable(L); /* +1 LI_ENV */
/* as we have a "real" table we prevent new globals through a broken __newindex metatable entry;
* build a special metatable for this.
*/
lua_createtable(L, 0, 2); /* +1 LI_ENV special metatable */
li_lua_push_globals(L); /* +1 GLOBALS */
lua_setfield(L, -2, "__index"); /* -1, __index=GLOBALS */
lua_newuserdata(L, 0); /* +1 */
lua_setfield(L, -2, "__newindex"); /* -1, __newindex=EMPTYUSERDATA */
#else
lua_newuserdata(L, 0); /* +1 LI_ENV */
lua_rawgeti(L, LUA_REGISTRYINDEX, LL->li_env_default_metatable_ref); /* +1 */
#endif
lua_setmetatable(L, -2); /* -1 (pops LI_ENV metatable) */
LL->li_env_ref = luaL_ref(L, LUA_REGISTRYINDEX); /* -1 */
li_lua_init_chunk_mt(L); li_lua_init_chunk_mt(L);
li_lua_init_environment_mt(L); li_lua_init_environment_mt(L);
li_lua_init_filter_mt(L); li_lua_init_filter_mt(L);
@ -373,7 +466,9 @@ void li_lua_init2(liLuaState *LL, liServer *srv, liWorker *wrk) {
li_lua_init_request_mt(L); li_lua_init_request_mt(L);
li_lua_init_response_mt(L); li_lua_init_response_mt(L);
li_lua_init_stat_mt(L); li_lua_init_stat_mt(L);
/* DISABLED FOR NOW
li_lua_init_subrequest_mt(L); li_lua_init_subrequest_mt(L);
*/
li_lua_init_virtualrequest_mt(L); li_lua_init_virtualrequest_mt(L);
if (NULL == wrk) { if (NULL == wrk) {
@ -449,7 +544,10 @@ void li_lua_init2(liLuaState *LL, liServer *srv, liWorker *wrk) {
/* store "lighty" object in globals */ /* store "lighty" object in globals */
lua_setglobal(L, "lighty"); lua_setglobal(L, "lighty");
li_lua_store_globals(L); li_lua_push_action_table(srv, wrk, L);
lua_setglobal(L, "action");
li_lua_set_global_condition_lvalues(srv, L);
li_plugins_init_lua(LL, srv, wrk); li_plugins_init_lua(LL, srv, wrk);
} }
@ -476,29 +574,3 @@ int li_lua_ghashtable_gstring_pairs(lua_State *L, GHashTable *ht) {
lua_pushnil(L); lua_pushnil(L); /* +2 */ lua_pushnil(L); lua_pushnil(L); /* +2 */
return 3; return 3;
} }
void li_lua_setfenv(lua_State *L, int funcindex) /* -1 */ {
/* set _ENV upvalue of lua function */
#if LUA_VERSION_NUM == 501
lua_setfenv(L, funcindex); /* -1 */
#else
int n;
lua_pushvalue(L, funcindex); /* +1, for consistent index */
for (n = 0; n < 10; ++n) {
const char *name = lua_getupvalue(L, -1, n); /* +1 unless name == NULL */
if (!name) break; /* last upvalue or a C function (empty upvalue names) */
lua_pop(L, 1); /* -1, drop upvalue value */
if (!name[0]) break; /* C function (empty upvalue names) */
if (0 == strcmp(name, "_ENV")) {
lua_pushvalue(L, -2);
if (NULL == lua_setupvalue(L, -2, n)) {
/* shouldn't happen - upvalue index `n` was valid above */
lua_pop(L, 1); /* -1 */
}
break;
}
}
lua_pop(L, 2); /* -2: copy of function and env */
#endif
}

View File

@ -162,6 +162,7 @@ struct filter_lua_config {
typedef struct filter_lua_state filter_lua_state; typedef struct filter_lua_state filter_lua_state;
struct filter_lua_state { struct filter_lua_state {
liLuaState *LL; liLuaState *LL;
int env_ref;
int object_ref; int object_ref;
}; };
@ -169,8 +170,11 @@ static filter_lua_state* filter_lua_state_new(liVRequest *vr, filter_lua_config
int object_ref = LUA_NOREF; int object_ref = LUA_NOREF;
liServer *srv = vr->wrk->srv; liServer *srv = vr->wrk->srv;
lua_State *L = config->LL->L; lua_State *L = config->LL->L;
int env_ref;
li_lua_lock(config->LL); li_lua_lock(config->LL);
env_ref = li_lua_environment_create(config->LL, vr);
li_lua_environment_activate(config->LL, env_ref); /* +1 */
lua_rawgeti(L, LUA_REGISTRYINDEX, config->class_ref); /* +1 */ lua_rawgeti(L, LUA_REGISTRYINDEX, config->class_ref); /* +1 */
li_lua_push_vrequest(L, vr); /* +1 */ li_lua_push_vrequest(L, vr); /* +1 */
@ -186,12 +190,19 @@ static filter_lua_state* filter_lua_state_new(liVRequest *vr, filter_lua_config
li_vrequest_error(vr); li_vrequest_error(vr);
} }
li_lua_environment_restore(config->LL); /* -1 */
if (LUA_NOREF == object_ref) {
li_lua_environment_free(L, env_ref);
env_ref = LUA_NOREF;
}
li_lua_unlock(config->LL); li_lua_unlock(config->LL);
if (LUA_NOREF != object_ref) { if (LUA_NOREF != object_ref) {
filter_lua_state *state = g_slice_new0(filter_lua_state); filter_lua_state *state = g_slice_new0(filter_lua_state);
state->LL = config->LL; state->LL = config->LL;
state->object_ref = object_ref; state->object_ref = object_ref;
state->env_ref = env_ref;
return state; return state;
} else { } else {
@ -204,12 +215,15 @@ static void filter_lua_state_free(liVRequest *vr, filter_lua_state *state) {
lua_State *L = state->LL->L; lua_State *L = state->LL->L;
li_lua_lock(state->LL); li_lua_lock(state->LL);
li_lua_environment_activate(state->LL, state->env_ref); /* +1 */
lua_rawgeti(L, LUA_REGISTRYINDEX, state->object_ref); /* +1 */ lua_rawgeti(L, LUA_REGISTRYINDEX, state->object_ref); /* +1 */
li_lua_push_vrequest(L, vr); /* +1 */ li_lua_push_vrequest(L, vr); /* +1 */
li_lua_call_object(srv, vr, L, "finished", 2, 0, TRUE); /* -2 */ li_lua_call_object(srv, vr, L, "finished", 2, 0, TRUE); /* -2 */
li_lua_environment_restore(state->LL); /* -1 */
luaL_unref(L, LUA_REGISTRYINDEX, state->object_ref); luaL_unref(L, LUA_REGISTRYINDEX, state->object_ref);
li_lua_environment_free(L, state->env_ref);
li_lua_unlock(state->LL); li_lua_unlock(state->LL);
@ -229,6 +243,7 @@ static liHandlerResult filter_lua_handle(liVRequest *vr, liFilter *f) {
liHandlerResult res; liHandlerResult res;
li_lua_lock(state->LL); li_lua_lock(state->LL);
li_lua_environment_activate(state->LL, state->env_ref); /* +1 */
lua_rawgeti(L, LUA_REGISTRYINDEX, state->object_ref); /* +1 */ lua_rawgeti(L, LUA_REGISTRYINDEX, state->object_ref); /* +1 */
li_lua_push_vrequest(L, vr); /* +1 */ li_lua_push_vrequest(L, vr); /* +1 */
@ -255,6 +270,7 @@ static liHandlerResult filter_lua_handle(liVRequest *vr, liFilter *f) {
res = LI_HANDLER_ERROR; res = LI_HANDLER_ERROR;
} }
li_lua_environment_restore(state->LL); /* -1 */
li_lua_unlock(state->LL); li_lua_unlock(state->LL);
return res; return res;

View File

@ -65,7 +65,7 @@ if get_option('lua')
'request_lua.c', 'request_lua.c',
'response_lua.c', 'response_lua.c',
'stat_lua.c', 'stat_lua.c',
'subrequest_lua.c', # 'subrequest_lua.c',
'virtualrequest_lua.c', 'virtualrequest_lua.c',
] ]
endif endif

View File

@ -4,6 +4,10 @@
#include <lighttpd/plugin_core.h> #include <lighttpd/plugin_core.h>
#include <lighttpd/filter_buffer_on_disk.h> #include <lighttpd/filter_buffer_on_disk.h>
#ifdef HAVE_LUA_H
# include <lighttpd/core_lua.h>
#endif
static void vrequest_job_cb(liJob *job) { static void vrequest_job_cb(liJob *job) {
liVRequest *vr = LI_CONTAINER_OF(job, liVRequest, job); liVRequest *vr = LI_CONTAINER_OF(job, liVRequest, job);
li_vrequest_state_machine(vr); li_vrequest_state_machine(vr);
@ -40,6 +44,9 @@ liVRequest* li_vrequest_new(liWorker *wrk, liConInfo *coninfo) {
li_response_init(&vr->response); li_response_init(&vr->response);
li_environment_init(&vr->env); li_environment_init(&vr->env);
vr->lua_server_env_ref = LUA_NOREF;
vr->lua_worker_env_ref = LUA_NOREF;
li_vrequest_filters_init(vr); li_vrequest_filters_init(vr);
li_action_stack_init(&vr->action_stack); li_action_stack_init(&vr->action_stack);
@ -76,6 +83,21 @@ void li_vrequest_free(liVRequest* vr) {
li_response_clear(&vr->response); li_response_clear(&vr->response);
li_environment_clear(&vr->env); li_environment_clear(&vr->env);
#ifdef HAVE_LUA_H
if (vr->lua_server_env_ref != LUA_NOREF) {
li_lua_lock(&srv->LL);
luaL_unref(srv->LL.L, LUA_REGISTRYINDEX, vr->lua_server_env_ref);
li_lua_unlock(&srv->LL);
vr->lua_server_env_ref = LUA_NOREF;
}
if (vr->lua_worker_env_ref != LUA_NOREF) {
li_lua_lock(&vr->wrk->LL);
luaL_unref(vr->wrk->LL.L, LUA_REGISTRYINDEX, vr->lua_worker_env_ref);
li_lua_unlock(&vr->wrk->LL);
vr->lua_worker_env_ref = LUA_NOREF;
}
#endif
li_vrequest_filters_clear(vr); li_vrequest_filters_clear(vr);
li_job_clear(&vr->job); li_job_clear(&vr->job);
@ -130,6 +152,21 @@ void li_vrequest_reset(liVRequest *vr, gboolean keepalive) {
li_response_reset(&vr->response); li_response_reset(&vr->response);
li_environment_reset(&vr->env); li_environment_reset(&vr->env);
#ifdef HAVE_LUA_H
if (vr->lua_server_env_ref != LUA_NOREF) {
li_lua_lock(&srv->LL);
luaL_unref(srv->LL.L, LUA_REGISTRYINDEX, vr->lua_server_env_ref);
li_lua_unlock(&srv->LL);
vr->lua_server_env_ref = LUA_NOREF;
}
if (vr->lua_worker_env_ref != LUA_NOREF) {
li_lua_lock(&vr->wrk->LL);
luaL_unref(vr->wrk->LL.L, LUA_REGISTRYINDEX, vr->lua_worker_env_ref);
li_lua_unlock(&vr->wrk->LL);
vr->lua_worker_env_ref = LUA_NOREF;
}
#endif
li_vrequest_filters_reset(vr); li_vrequest_filters_reset(vr);
li_job_reset(&vr->job); li_job_reset(&vr->job);

View File

@ -332,8 +332,9 @@ static const luaL_Reg vrequest_mt[] = {
{ "add_filter_in", lua_vrequest_add_filter_in }, { "add_filter_in", lua_vrequest_add_filter_in },
{ "add_filter_out", lua_vrequest_add_filter_out }, { "add_filter_out", lua_vrequest_add_filter_out },
/* DISABLED FOR NOW
{ "subrequest", li_lua_vrequest_subrequest }, { "subrequest", li_lua_vrequest_subrequest },
*/
{ NULL, NULL } { NULL, NULL }
}; };

View File

@ -266,13 +266,19 @@ static gboolean lua_plugin_handle_setup(liServer *srv, liPlugin *p, liValue *val
li_lua_lock(&srv->LL); li_lua_lock(&srv->LL);
lua_rawgeti(L, LUA_REGISTRYINDEX, lua_ref); li_lua_environment_use_globals(&srv->LL); /* +1 */
nargs = push_args(L, val); li_lua_environment_activate_ephemeral(&srv->LL); /* +1 */
errfunc = li_lua_push_traceback(L, 0); li_lua_push_setup_table(srv, srv->main_worker, L);
if (lua_pcall(L, nargs, 1, errfunc)) { lua_setglobal(L, "setup");
lua_rawgeti(L, LUA_REGISTRYINDEX, lua_ref); /* +1: setup function */
nargs = push_args(L, val); /* +nargs: variable number of args */
errfunc = li_lua_push_traceback(L, nargs); /* +1, but before nargs */
if (lua_pcall(L, nargs, 1, errfunc)) { /* -1-nargs, +1*/
ERROR(srv, "lua_pcall(): %s", lua_tostring(L, -1)); ERROR(srv, "lua_pcall(): %s", lua_tostring(L, -1));
lua_pop(L, 1); lua_pop(L, 1); /* -1 */
res = FALSE; res = FALSE;
} else { } else {
res = TRUE; res = TRUE;
@ -280,9 +286,12 @@ static gboolean lua_plugin_handle_setup(liServer *srv, liPlugin *p, liValue *val
if (!lua_isnil(L, -1) && (!lua_isboolean(L, -1) || !lua_toboolean(L, -1))) { if (!lua_isnil(L, -1) && (!lua_isboolean(L, -1) || !lua_toboolean(L, -1))) {
res = FALSE; res = FALSE;
} }
lua_pop(L, 1); lua_pop(L, 1); /* -1 */
} }
lua_remove(L, errfunc); lua_remove(L, errfunc); /* -1 */
li_lua_environment_restore(&srv->LL); /* -1 */
li_lua_environment_restore_globals(L); /* -1 */
lua_gc(L, LUA_GCCOLLECT, 0); lua_gc(L, LUA_GCCOLLECT, 0);
li_lua_unlock(&srv->LL); li_lua_unlock(&srv->LL);
@ -300,21 +309,30 @@ static liAction* lua_plugin_handle_action(liServer *srv, liWorker *wrk, liPlugin
li_lua_lock(&srv->LL); li_lua_lock(&srv->LL);
lua_rawgeti(L, LUA_REGISTRYINDEX, lua_ref); li_lua_environment_use_globals(&srv->LL); /* +1 */
nargs = push_args(L, val); li_lua_environment_activate_ephemeral(&srv->LL); /* +1 */
errfunc = li_lua_push_traceback(L, nargs); li_lua_push_setup_table(srv, wrk, L);
if (lua_pcall(L, nargs, 1, errfunc)) { lua_setglobal(L, "setup");
lua_rawgeti(L, LUA_REGISTRYINDEX, lua_ref); /* +1 */
nargs = push_args(L, val); /* +nargs: variable number of args */
errfunc = li_lua_push_traceback(L, nargs); /* +1, but before nargs */
if (lua_pcall(L, nargs, 1, errfunc)) { /* -1-nargs, +1 */
ERROR(srv, "lua_pcall(): %s", lua_tostring(L, -1)); ERROR(srv, "lua_pcall(): %s", lua_tostring(L, -1));
lua_pop(L, 1); lua_pop(L, 1); /* -1 */
} else { } else {
res = li_lua_get_action_ref(L, -1); res = li_lua_get_action_ref(L, -1);
if (res == NULL) { if (res == NULL) {
ERROR(srv, "%s", "lua plugin action-create callback didn't return an action"); ERROR(srv, "%s", "lua plugin action-create callback didn't return an action");
} }
lua_pop(L, 1); lua_pop(L, 1); /* -1 */
} }
lua_remove(L, errfunc); lua_remove(L, errfunc); /* -1 */
li_lua_environment_restore(&srv->LL); /* -1 */
li_lua_environment_restore_globals(L); /* -1 */
lua_gc(L, LUA_GCCOLLECT, 0); lua_gc(L, LUA_GCCOLLECT, 0);
li_lua_unlock(&srv->LL); li_lua_unlock(&srv->LL);
@ -429,7 +447,7 @@ static void lua_plugin_init(liServer *srv, liPlugin *p, gpointer userdata) {
p->options = lp_options; p->options = lp_options;
p->actions = &g_array_index(lp->actions, liPluginAction, 0); p->actions = &g_array_index(lp->actions, liPluginAction, 0);
p->setups = &g_array_index(lp->setups, liPluginSetup, 0);; p->setups = &g_array_index(lp->setups, liPluginSetup, 0);
p->data = lp; p->data = lp;
p->free = lua_plugin_free; p->free = lua_plugin_free;
@ -443,14 +461,15 @@ static gboolean lua_plugin_load(liServer *srv, liPlugin *p, GString *filename, l
module_config *mc = p->data; module_config *mc = p->data;
liPlugin *newp; liPlugin *newp;
lua_find_file(filename);
li_lua_lock(&srv->LL); li_lua_lock(&srv->LL);
li_lua_environment_use_globals(&srv->LL); /* +1 */
li_lua_environment_activate_ephemeral(&srv->LL); /* +1 */
lua_stack_top = lua_gettop(L); lua_stack_top = lua_gettop(L);
li_lua_new_globals(L);
lua_find_file(filename);
if (0 != luaL_loadfile(L, filename->str)) { if (0 != luaL_loadfile(L, filename->str)) {
ERROR(srv, "Loading lua plugin '%s' failed: %s", filename->str, lua_tostring(L, -1)); ERROR(srv, "Loading lua plugin '%s' failed: %s", filename->str, lua_tostring(L, -1));
goto failed_unlock_lua; goto failed_unlock_lua;
@ -459,23 +478,18 @@ static gboolean lua_plugin_load(liServer *srv, liPlugin *p, GString *filename, l
li_lua_push_setup_table(srv, srv->main_worker, L); li_lua_push_setup_table(srv, srv->main_worker, L);
lua_setglobal(L, "setup"); lua_setglobal(L, "setup");
li_lua_push_action_table(srv, srv->main_worker, L);
lua_setglobal(L, "action");
li_lua_push_lvalues_dict(srv, L);
/* arguments for plugin: local filename, args = ... */ /* arguments for plugin: local filename, args = ... */
/* 1. filename */ /* 1. filename */
lua_pushlstring(L, GSTR_LEN(filename)); lua_pushlstring(L, GSTR_LEN(filename)); /* +1 */
/* 2. args */ /* 2. args */
li_lua_push_value(L, args); li_lua_push_value(L, args); /* +1 */
errfunc = li_lua_push_traceback(L, 2); errfunc = li_lua_push_traceback(L, 2); /* +1, but before fn args */
if (lua_pcall(L, 2, 0, errfunc)) { if (lua_pcall(L, 2, 0, errfunc)) { /* -3 (fn + args), 0 results (but 1 error)*/
ERROR(srv, "lua_pcall(): %s", lua_tostring(L, -1)); ERROR(srv, "lua_pcall(): %s", lua_tostring(L, -1));
goto failed_unlock_lua; goto failed_unlock_lua;
} }
lua_remove(L, errfunc); lua_remove(L, errfunc); /* -1 */
if (NULL == (lp = lua_plugin_create_data(srv, L))) { if (NULL == (lp = lua_plugin_create_data(srv, L))) {
ERROR(srv, "failed to create plugin data for lua plugin '%s'", filename->str); ERROR(srv, "failed to create plugin data for lua plugin '%s'", filename->str);
@ -490,7 +504,10 @@ static gboolean lua_plugin_load(liServer *srv, liPlugin *p, GString *filename, l
g_ptr_array_add(mc->lua_plugins, newp); g_ptr_array_add(mc->lua_plugins, newp);
li_lua_restore_globals(L); LI_FORCE_ASSERT(lua_gettop(L) == lua_stack_top);
li_lua_environment_restore(&srv->LL); /* -1 */
li_lua_environment_restore_globals(L); /* -1 */
lua_gc(L, LUA_GCCOLLECT, 0); lua_gc(L, LUA_GCCOLLECT, 0);
li_lua_unlock(&srv->LL); li_lua_unlock(&srv->LL);
@ -501,8 +518,9 @@ static gboolean lua_plugin_load(liServer *srv, liPlugin *p, GString *filename, l
return TRUE; return TRUE;
failed_unlock_lua: failed_unlock_lua:
lua_pop(L, lua_gettop(L) - lua_stack_top); lua_pop(L, lua_gettop(L) - lua_stack_top); /* reset stack */
li_lua_restore_globals(L); li_lua_environment_restore(&srv->LL); /* -1 */
li_lua_environment_restore_globals(L); /* -1 */
lua_gc(L, LUA_GCCOLLECT, 0); lua_gc(L, LUA_GCCOLLECT, 0);
li_lua_unlock(&srv->LL); li_lua_unlock(&srv->LL);

View File

@ -1,26 +1,13 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIEUzCCArugAwIBAgIBATANBgkqhkiG9w0BAQ0FADBLMScwJQYDVQQDEx5saWdo MIICAzCCAYqgAwIBAgIBATAKBggqhkjOPQQDBDBLMScwJQYDVQQDEx5saWdodHRw
dHRwZDIgdGVzdCBzdWl0ZSBBdXRob3JpdHkxIDAeBgNVBAsTF2xpZ2h0dHBkMiB0 ZDIgdGVzdCBzdWl0ZSBBdXRob3JpdHkxIDAeBgNVBAsTF2xpZ2h0dHBkMiB0ZXN0
ZXN0IHN1aXRlIENBMB4XDTI0MTIyNTIyNTIzMVoXDTM0MTIyMzIyNTIzMVowSzEn IHN1aXRlIENBMB4XDTI1MDEwMTEzMzIyNloXDTM0MTIzMDEzMzIyNlowSzEnMCUG
MCUGA1UEAxMebGlnaHR0cGQyIHRlc3Qgc3VpdGUgQXV0aG9yaXR5MSAwHgYDVQQL A1UEAxMebGlnaHR0cGQyIHRlc3Qgc3VpdGUgQXV0aG9yaXR5MSAwHgYDVQQLExds
ExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTCCAaIwDQYJKoZIhvcNAQEBBQADggGP aWdodHRwZDIgdGVzdCBzdWl0ZSBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABELi
ADCCAYoCggGBANiY4hXiOZkyx1Oz5qcFZUA4i8OCaZH4y1EYdJg5l+PwkzjR9Jib eTNiaScZ2eF/OkuczjC2L2iHw3KtzsiLNxMiBlxhBH0/Lsw96s1pf/FZ5+NR+CTe
a8zWee56XLsn1OeOM29nWu2rex9n7FjjOhIJOr7E+VTxorEHhGYdp+8fA5x+WnSQ 5AnHCizcIdOK7ZUgs4de3jXNsEmuADvc5WAgIhAMewLsbROkCDdMwmN9/8Xnu6NC
NBkrk+SUZi096/aZ32OZFDJKzgnmkY5BMuzxvcuI3/En/sAtM3Zv4MPHefAjnz2a MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMEz
7nqmNWcxcR982DGeJ9ggE+G0BxdlG3HZVUUrU3y0qx9lH3LU+NJANVDkDTthvVyJ tottTkpfEMdgJyKaXwKTAIJrMAoGCCqGSM49BAMEA2cAMGQCMEOSIX2o5l64UiJ1
MFe3q8ssANxoe+h2tKlu18KMCUNFrUjL2zGxfn/SNJ0baklMpEnpOcttRQbYL943 desOcopAzZYEcQJvEIXwn0OAPLZ2eYBJ7n2tJMpBJALT6gV70wIwd3kFAXMbyC9J
/+x6pmLc55FAKb8RtAoJWoaXcMFEuXq2osuXS3EoUnWODa7CWJOCcldU6EymSgka B2kD93IzgHJUaHTUCOCgixVCyuuhcEkH+sosx/3g05oV0yV1zSGR
I+sknyYyV3WaumT7yWpc42XIBMp5YeLKu7UwccPGzg5COJmOK/NbTX7mxKKf9U37
4D/F9cPSZ51TjHHO4XnMAfeuG8h7vZoN99kvzS9/zhd9BWfZJFVsB2cEZ+wTkXKw
xK3kTy3qVmE/vwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
AwIBBjAdBgNVHQ4EFgQUeCorT1z8K+qFb3++SNJRuXcNOsIwDQYJKoZIhvcNAQEN
BQADggGBAFtorzGNsNLWzEUoKtzWtkNS8n9yzfSU4FmNMh+fHgDuC57mjd46Wls7
8aJnrNhqakNs2DLQBHiiPSx3qDaNyPDw/6vNnB0FUQkZTcW8xa2NxnvdliuO7Y0S
cxSHEI2K+yhzYGyBlXBtegE5B6firfT07JI/6FT34hhjSNAgdyde2yMvUUGLdcqz
onxtCS8OjkWcClKcyzr2ILsyoqsicjFek9w/SZAFcDpRwGQuohB/3cDKTf7JIgTP
liVS+kX9Wout16pcj8EyNZEKNm3AdnlktM7lqOIXAER+1A6gun9eGNZqT383x+xe
I96yCczv02OK2JpUzv9xuUonSY4FI5PGf8DQ3uh3Qe11KkM3NDhkrADSk8tzICb9
unL8GBFjpsnUhZU77TPNPSSDJYlx8weWqDtfKp5XyySiqeZiNimM+EHZbMfwgkzr
n+WFlzBU6QEI9/EpYoY3dtutGyvkaKSVLCyae4BIls/sH3qzJB9QeW77+JjzaZod
CSfaP0YJIA==
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,182 +1,36 @@
Public Key Info: Public Key Info:
Public Key Algorithm: RSA Public Key Algorithm: EC/ECDSA
Key Security Level: High (3072 bits) Key Security Level: Ultra (384 bits)
modulus: curve: SECP384R1
00:d8:98:e2:15:e2:39:99:32:c7:53:b3:e6:a7:05:65 private key:
40:38:8b:c3:82:69:91:f8:cb:51:18:74:98:39:97:e3 5e:ca:7f:3a:1f:16:b3:1e:7d:e9:e3:b5:cc:0e:fa:74
f0:93:38:d1:f4:98:9b:6b:cc:d6:79:ee:7a:5c:bb:27 8b:2d:46:e7:f1:93:84:73:b7:dd:19:d5:71:ef:b2:89
d4:e7:8e:33:6f:67:5a:ed:ab:7b:1f:67:ec:58:e3:3a 06:16:22:b9:73:35:ff:f3:0e:82:4e:56:fd:99:df:31
12:09:3a:be:c4:f9:54:f1:a2:b1:07:84:66:1d:a7:ef
1f:03:9c:7e:5a:74:90:34:19:2b:93:e4:94:66:2d:3d
eb:f6:99:df:63:99:14:32:4a:ce:09:e6:91:8e:41:32
ec:f1:bd:cb:88:df:f1:27:fe:c0:2d:33:76:6f:e0:c3
c7:79:f0:23:9f:3d:9a:ee:7a:a6:35:67:31:71:1f:7c
d8:31:9e:27:d8:20:13:e1:b4:07:17:65:1b:71:d9:55
45:2b:53:7c:b4:ab:1f:65:1f:72:d4:f8:d2:40:35:50
e4:0d:3b:61:bd:5c:89:30:57:b7:ab:cb:2c:00:dc:68
7b:e8:76:b4:a9:6e:d7:c2:8c:09:43:45:ad:48:cb:db
31:b1:7e:7f:d2:34:9d:1b:6a:49:4c:a4:49:e9:39:cb
6d:45:06:d8:2f:de:37:ff:ec:7a:a6:62:dc:e7:91:40
29:bf:11:b4:0a:09:5a:86:97:70:c1:44:b9:7a:b6:a2
cb:97:4b:71:28:52:75:8e:0d:ae:c2:58:93:82:72:57
54:e8:4c:a6:4a:09:1a:23:eb:24:9f:26:32:57:75:9a
ba:64:fb:c9:6a:5c:e3:65:c8:04:ca:79:61:e2:ca:bb
b5:30:71:c3:c6:ce:0e:42:38:99:8e:2b:f3:5b:4d:7e
e6:c4:a2:9f:f5:4d:fb:e0:3f:c5:f5:c3:d2:67:9d:53
8c:71:ce:e1:79:cc:01:f7:ae:1b:c8:7b:bd:9a:0d:f7
d9:2f:cd:2f:7f:ce:17:7d:05:67:d9:24:55:6c:07:67
04:67:ec:13:91:72:b0:c4:ad:e4:4f:2d:ea:56:61:3f
bf:
public exponent:
01:00:01:
private exponent:
62:5c:bb:7f:78:a6:f3:9d:8d:cb:c3:4d:21:d8:5f:6c
d4:c1:13:de:6b:96:f0:c7:54:62:a8:c0:60:97:4b:da
7a:e1:38:e7:bd:4e:07:9c:94:61:f7:1c:f6:73:bf:d8
fd:f7:24:00:99:8d:3f:95:ba:6a:3e:c5:a4:70:3c:74
e8:60:17:36:58:8c:6c:d7:97:51:74:9c:f3:26:ca:7e
e9:22:ee:76:a1:ac:c3:1c:13:20:2c:93:ff:fa:d7:be
0a:d5:42:0f:76:fb:27:03:b5:a1:e5:65:80:96:b7:4b
c7:54:8b:d3:f2:ef:0f:5c:af:65:57:93:97:a7:19:01
c3:ac:7c:60:da:97:3b:69:d3:85:39:01:c8:ff:a5:b0
80:87:f4:4c:3f:f5:07:70:bc:2f:b1:a8:cf:01:05:aa
4d:cc:b2:3b:51:e3:06:07:4c:1c:cf:8a:9b:c2:1a:a4
16:26:3b:72:c5:4d:3f:f8:f5:de:3c:7c:15:40:02:ea
3b:cc:ae:8c:6c:37:ba:0f:52:54:b3:7e:82:ad:68:46
ee:22:bd:4a:81:a2:f4:a6:4e:dd:04:0b:b0:6b:80:69
36:8d:bb:9a:f3:d2:07:c7:24:35:ba:59:0b:c7:20:6d
91:71:ef:af:d0:e7:2b:ea:ea:d4:1f:73:5e:7c:5b:af
c2:74:f6:fe:9c:ba:03:54:92:50:02:72:67:37:5b:59
88:85:7c:17:11:d8:0f:b9:ef:49:0b:f4:6d:10:3e:1a
ab:ef:9a:d1:7e:65:cf:e1:2c:bc:fd:80:54:ae:8f:4e
04:b2:b3:38:ec:73:cb:7b:50:b1:54:2d:59:70:1e:f3
e1:da:cb:ae:2d:3f:eb:c5:d6:82:93:6f:69:a5:63:b2
9b:a5:21:5b:b7:e2:76:72:3a:5b:0b:77:4e:b6:0d:e9
c2:d6:4e:3d:20:05:25:90:fa:c6:e7:39:fd:ea:c1:c4
6e:a5:8d:af:55:46:b7:9e:7d:e7:f3:5b:d4:b9:80:e1
prime1: x:
00:ff:2f:99:73:82:d7:81:8c:0e:8b:ac:53:60:4c:38 42:e2:79:33:62:69:27:19:d9:e1:7f:3a:4b:9c:ce:30
e4:78:c9:52:16:cc:bd:18:66:48:01:f6:ad:4c:15:14 b6:2f:68:87:c3:72:ad:ce:c8:8b:37:13:22:06:5c:61
48:93:2e:c7:9d:86:b3:12:6e:94:6c:b5:87:9c:0f:8f 04:7d:3f:2e:cc:3d:ea:cd:69:7f:f1:59:e7:e3:51:f8
e0:59:2f:12:39:4a:ee:2d:39:44:76:df:f6:f2:8c:6c
c9:32:e3:d8:83:d2:0c:7d:f7:3d:5a:7a:4f:bf:da:73
e2:f6:28:66:53:ad:0a:68:34:30:ef:b4:72:f3:f1:61
78:8c:01:06:48:28:fd:2c:73:d9:5f:d3:59:80:e9:ea
50:42:61:b5:27:b0:1c:8b:f3:af:37:0a:e9:a0:7c:fa
f3:4b:ac:27:62:c8:64:57:b4:63:5c:39:1d:88:87:95
76:fc:68:88:77:df:da:83:56:5a:00:a6:7f:59:7c:8c
3b:50:02:72:ea:71:cc:88:19:f6:6d:b9:01:a6:7c:4b
31:60:28:66:6d:cc:20:14:26:f8:14:f8:57:d7:b4:17
67:
prime2:
00:d9:49:c5:10:a2:d5:b0:e1:51:eb:73:68:68:b2:76
08:f9:1c:4c:99:da:05:c5:2d:3a:5c:40:80:dc:75:3c
76:29:16:8b:91:78:2d:f8:21:65:ea:b1:51:51:e7:99
28:e2:98:5b:3b:a8:04:28:e7:e5:1c:bb:ea:57:2c:34
7e:94:9a:05:fd:4a:18:3d:f2:3b:c2:e6:96:63:c5:8a
6d:a9:d3:f9:87:24:50:44:15:82:46:14:e3:ba:ef:e7
c2:0f:f0:f3:30:92:f8:48:ec:6d:e7:c3:d5:9d:41:7b
87:44:73:63:85:b5:f1:eb:43:35:f5:b7:a5:4d:14:88
86:ee:51:19:e5:23:fa:fe:40:1e:74:5d:c5:a2:9b:e5
f5:f2:b5:b2:79:48:cf:07:07:30:0f:1b:6d:d1:40:82
34:bd:43:c0:63:e6:35:44:61:43:b1:d4:e9:95:81:7a
46:cd:ce:9d:5b:39:ca:0d:e9:9a:a5:71:5a:e4:bf:95
e9:
coefficient:
00:c3:6f:52:ff:f0:94:d8:cc:44:d9:06:ee:7b:0b:8f
12:cd:91:a9:5d:01:2f:a1:f9:45:34:8b:df:b5:44:68
e3:d1:e9:5f:c7:dc:f1:48:f1:05:da:fe:18:63:51:d3
b8:70:c3:af:5e:91:5c:aa:42:88:23:76:4b:ac:f4:93
a7:23:e1:6b:db:37:0d:04:5e:cc:cc:1b:85:87:d0:1a
59:f2:9c:70:b0:b2:5e:01:27:2f:11:e1:62:92:04:fd
c4:5b:5b:60:d1:a6:04:28:35:65:6a:e9:6b:a6:bc:d9
d5:87:7e:ee:48:42:df:d6:df:09:5d:18:53:34:dc:ca
6d:5a:2f:06:a4:5f:2a:2b:60:c1:fe:03:c6:ba:8a:5e
7c:b9:5b:88:fd:4f:17:67:c4:03:23:69:67:ae:3b:53
7e:8a:75:3c:cf:d8:ae:5a:16:ac:94:29:6b:32:f1:4b
f1:12:7b:fc:07:3c:af:07:52:4d:b4:8a:e9:da:ed:1d
b1:
exp1:
3a:6b:10:2b:04:6a:07:6b:23:ad:4f:ee:ea:5d:a8:ac
8d:06:31:77:ac:b9:21:4b:d0:f2:3a:21:64:08:73:53
45:f6:70:96:1c:4f:04:4a:32:4a:4c:a8:55:ce:ae:36
42:d4:66:cc:9c:dd:b7:96:a3:98:bf:1e:ce:59:dd:51
96:07:d8:fa:1c:6c:e5:ad:62:eb:42:92:dd:2d:ca:57
cb:d8:65:cc:84:11:9c:d7:4d:d8:a2:2b:aa:b2:b8:88
9b:2c:64:de:c2:1b:6b:40:be:23:94:c3:a9:a2:63:14
aa:8d:a9:a6:03:48:15:b5:dc:87:b2:44:d7:8b:a4:fb
6b:78:66:af:d3:86:3d:19:bb:a1:52:25:f3:aa:6e:4a
05:f0:7c:45:4d:06:be:08:57:a4:4c:79:5c:e8:09:46
4e:c3:b0:c1:00:fa:3c:b2:0c:db:03:7e:60:39:96:11
20:9d:3f:0d:a5:ac:36:50:d1:7c:23:7a:20:94:46:c3
exp2: y:
27:3e:07:75:25:b3:6a:2a:87:5c:fa:8e:d4:b9:c6:4f 24:de:e4:09:c7:0a:2c:dc:21:d3:8a:ed:95:20:b3:87
80:8d:f7:d7:a1:64:81:63:d5:b2:6b:83:da:4c:e2:0a 5e:de:35:cd:b0:49:ae:00:3b:dc:e5:60:20:22:10:0c
85:09:29:53:b0:5c:bc:ff:6b:24:a3:b9:88:0d:47:bf 7b:02:ec:6d:13:a4:08:37:4c:c2:63:7d:ff:c5:e7:bb
f6:8c:85:8d:94:9e:8b:b4:b5:d0:26:af:ff:e6:5f:e4
ac:79:d4:b3:15:fa:a2:d5:68:ad:9e:6f:72:bd:6e:6e
b7:c9:2c:bb:97:77:57:94:7a:de:a5:4f:2b:a7:c0:37
70:21:98:0a:21:c0:ed:8a:a5:9e:c1:e3:86:6f:19:1c
28:e4:9e:08:bb:ff:60:f9:d6:78:f6:1d:c8:79:f8:de
45:94:28:15:16:16:72:6c:aa:13:62:0c:1b:7e:04:5e
12:e3:75:c4:29:be:1a:0a:d6:47:24:31:05:25:9d:5e
61:00:27:72:e3:54:a3:70:dd:84:f4:6a:eb:31:63:1f
fe:73:5e:3f:e7:83:f2:57:4a:32:ae:f2:37:75:d2:61
Public Key PIN: Public Key PIN:
pin-sha256:vjVDop8uOVaqTw6GK4qv6IeJAv9FtpdVbvx5+2BssSU= pin-sha256:lMWzBgixjgubOuTReiygfOlYjtIjm+GpneEegi92kAM=
Public Key ID: Public Key ID:
sha256:be3543a29f2e3956aa4f0e862b8aafe8878902ff45b697556efc79fb606cb125 sha256:94c5b30608b18e0b9b3ae4d17a2ca07ce9588ed2239be1a99de11e822f769003
sha1:782a2b4f5cfc2bea856f7fbe48d251b9770d3ac2 sha1:c133b68b6d4e4a5f10c76027229a5f029300826b
-----BEGIN RSA PRIVATE KEY----- -----BEGIN EC PRIVATE KEY-----
MIIG4wIBAAKCAYEA2JjiFeI5mTLHU7PmpwVlQDiLw4JpkfjLURh0mDmX4/CTONH0 MIGkAgEBBDBeyn86HxazHn3p47XMDvp0iy1G5/GThHO33RnVce+yiQYWIrlzNf/z
mJtrzNZ57npcuyfU544zb2da7at7H2fsWOM6Egk6vsT5VPGisQeEZh2n7x8DnH5a DoJOVv2Z3zGgBwYFK4EEACKhZANiAARC4nkzYmknGdnhfzpLnM4wti9oh8Nyrc7I
dJA0GSuT5JRmLT3r9pnfY5kUMkrOCeaRjkEy7PG9y4jf8Sf+wC0zdm/gw8d58COf izcTIgZcYQR9Py7MPerNaX/xWefjUfgk3uQJxwos3CHTiu2VILOHXt41zbBJrgA7
PZrueqY1ZzFxH3zYMZ4n2CAT4bQHF2UbcdlVRStTfLSrH2UfctT40kA1UOQNO2G9 3OVgICIQDHsC7G0TpAg3TMJjff/F57s=
XIkwV7eryywA3Gh76Ha0qW7XwowJQ0WtSMvbMbF+f9I0nRtqSUykSek5y21FBtgv -----END EC PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

View File

@ -1,50 +1,25 @@
Public Key Information: Public Key Information:
Public Key Algorithm: RSA Public Key Algorithm: EC/ECDSA
Algorithm Security Level: High (3072 bits) Algorithm Security Level: Ultra (384 bits)
Modulus (bits 3072): Curve: SECP384R1
00:d8:98:e2:15:e2:39:99:32:c7:53:b3:e6:a7:05:65 X:
40:38:8b:c3:82:69:91:f8:cb:51:18:74:98:39:97:e3 42:e2:79:33:62:69:27:19:d9:e1:7f:3a:4b:9c:ce:30
f0:93:38:d1:f4:98:9b:6b:cc:d6:79:ee:7a:5c:bb:27 b6:2f:68:87:c3:72:ad:ce:c8:8b:37:13:22:06:5c:61
d4:e7:8e:33:6f:67:5a:ed:ab:7b:1f:67:ec:58:e3:3a 04:7d:3f:2e:cc:3d:ea:cd:69:7f:f1:59:e7:e3:51:f8
12:09:3a:be:c4:f9:54:f1:a2:b1:07:84:66:1d:a7:ef Y:
1f:03:9c:7e:5a:74:90:34:19:2b:93:e4:94:66:2d:3d 24:de:e4:09:c7:0a:2c:dc:21:d3:8a:ed:95:20:b3:87
eb:f6:99:df:63:99:14:32:4a:ce:09:e6:91:8e:41:32 5e:de:35:cd:b0:49:ae:00:3b:dc:e5:60:20:22:10:0c
ec:f1:bd:cb:88:df:f1:27:fe:c0:2d:33:76:6f:e0:c3 7b:02:ec:6d:13:a4:08:37:4c:c2:63:7d:ff:c5:e7:bb
c7:79:f0:23:9f:3d:9a:ee:7a:a6:35:67:31:71:1f:7c
d8:31:9e:27:d8:20:13:e1:b4:07:17:65:1b:71:d9:55
45:2b:53:7c:b4:ab:1f:65:1f:72:d4:f8:d2:40:35:50
e4:0d:3b:61:bd:5c:89:30:57:b7:ab:cb:2c:00:dc:68
7b:e8:76:b4:a9:6e:d7:c2:8c:09:43:45:ad:48:cb:db
31:b1:7e:7f:d2:34:9d:1b:6a:49:4c:a4:49:e9:39:cb
6d:45:06:d8:2f:de:37:ff:ec:7a:a6:62:dc:e7:91:40
29:bf:11:b4:0a:09:5a:86:97:70:c1:44:b9:7a:b6:a2
cb:97:4b:71:28:52:75:8e:0d:ae:c2:58:93:82:72:57
54:e8:4c:a6:4a:09:1a:23:eb:24:9f:26:32:57:75:9a
ba:64:fb:c9:6a:5c:e3:65:c8:04:ca:79:61:e2:ca:bb
b5:30:71:c3:c6:ce:0e:42:38:99:8e:2b:f3:5b:4d:7e
e6:c4:a2:9f:f5:4d:fb:e0:3f:c5:f5:c3:d2:67:9d:53
8c:71:ce:e1:79:cc:01:f7:ae:1b:c8:7b:bd:9a:0d:f7
d9:2f:cd:2f:7f:ce:17:7d:05:67:d9:24:55:6c:07:67
04:67:ec:13:91:72:b0:c4:ad:e4:4f:2d:ea:56:61:3f
bf
Exponent (bits 24):
01:00:01
Public Key ID: Public Key ID:
sha1:782a2b4f5cfc2bea856f7fbe48d251b9770d3ac2 sha1:c133b68b6d4e4a5f10c76027229a5f029300826b
sha256:be3543a29f2e3956aa4f0e862b8aafe8878902ff45b697556efc79fb606cb125 sha256:94c5b30608b18e0b9b3ae4d17a2ca07ce9588ed2239be1a99de11e822f769003
Public Key PIN: Public Key PIN:
pin-sha256:vjVDop8uOVaqTw6GK4qv6IeJAv9FtpdVbvx5+2BssSU= pin-sha256:lMWzBgixjgubOuTReiygfOlYjtIjm+GpneEegi92kAM=
-----BEGIN PUBLIC KEY----- -----BEGIN PUBLIC KEY-----
MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA2JjiFeI5mTLHU7PmpwVl MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEQuJ5M2JpJxnZ4X86S5zOMLYvaIfDcq3O
QDiLw4JpkfjLURh0mDmX4/CTONH0mJtrzNZ57npcuyfU544zb2da7at7H2fsWOM6 yIs3EyIGXGEEfT8uzD3qzWl/8Vnn41H4JN7kCccKLNwh04rtlSCzh17eNc2wSa4A
Egk6vsT5VPGisQeEZh2n7x8DnH5adJA0GSuT5JRmLT3r9pnfY5kUMkrOCeaRjkEy O9zlYCAiEAx7AuxtE6QIN0zCY33/xee7
7PG9y4jf8Sf+wC0zdm/gw8d58COfPZrueqY1ZzFxH3zYMZ4n2CAT4bQHF2UbcdlV
RStTfLSrH2UfctT40kA1UOQNO2G9XIkwV7eryywA3Gh76Ha0qW7XwowJQ0WtSMvb
MbF+f9I0nRtqSUykSek5y21FBtgv3jf/7HqmYtznkUApvxG0CglahpdwwUS5erai
y5dLcShSdY4NrsJYk4JyV1ToTKZKCRoj6ySfJjJXdZq6ZPvJalzjZcgEynlh4sq7
tTBxw8bODkI4mY4r81tNfubEop/1TfvgP8X1w9JnnVOMcc7hecwB964byHu9mg33
2S/NL3/OF30FZ9kkVWwHZwRn7BORcrDEreRPLepWYT+/AgMBAAE=
-----END PUBLIC KEY----- -----END PUBLIC KEY-----

15
tests/ca/client1.crt Normal file
View File

@ -0,0 +1,15 @@
-----BEGIN CERTIFICATE-----
MIICRzCCAc6gAwIBAgIUTXuH5LA/Ee7GxPU8psTxrsOB3nMwCgYIKoZIzj0EAwQw
WTEuMCwGA1UEAxMlbGlnaHR0cGQyIHRlc3Qgc3VpdGUgQ2xpZW50IEF1dGhvcml0
eTEnMCUGA1UECxMebGlnaHR0cGQyIHRlc3Qgc3VpdGUgQ2xpZW50IENBMB4XDTI1
MDEwMTEzMzIyNloXDTM0MTIzMDEzMzIyNlowOzEQMA4GA1UEAxMHY2xpZW50MTEn
MCUGA1UECxMebGlnaHR0cGQyIHRlc3Qgc3VpdGUgQ2xpZW50IENBMHYwEAYHKoZI
zj0CAQYFK4EEACIDYgAED0VUvV0QW1TY0qxDrkTsln6WGJcifQdFB+uLXzBCfTwV
SbCXhdY0EdowT2uVZjlDI2xHTAkSdqfSGcrkPJDhSpJYIanX8MbiNSMxQ3kY3ZyF
oGpZ40PhD5O97jX3uvRLo3UwczAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsG
AQUFBwMCMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQU5L/1A0rcCn/DHaFHJnPl
8hgX8GcwHwYDVR0jBBgwFoAU2hsHrFdo+I7ndox2VLpzaSW3Ws4wCgYIKoZIzj0E
AwQDZwAwZAIwBf9uuyS+5V0f3EROHCcXc73lPHv8BhmPt+u/5yJJhl7PqzRuFRsT
t8BwnRbkm95tAjBpStZOKGgl10T4nk0VBvap7Y8rjcIzVgM5g2ppLkaLUMwmI+tu
aSuQ6gOp73Yshes=
-----END CERTIFICATE-----

36
tests/ca/client1.key Normal file
View File

@ -0,0 +1,36 @@
Public Key Info:
Public Key Algorithm: EC/ECDSA
Key Security Level: Ultra (384 bits)
curve: SECP384R1
private key:
00:a9:ce:10:df:bc:99:a8:5b:89:00:e6:16:5c:cc:52
09:3f:49:07:74:95:21:35:4d:00:25:b8:a4:64:0e:64
15:f6:52:29:fa:39:77:27:a9:65:90:e7:ec:de:a7:3e
00:
x:
0f:45:54:bd:5d:10:5b:54:d8:d2:ac:43:ae:44:ec:96
7e:96:18:97:22:7d:07:45:07:eb:8b:5f:30:42:7d:3c
15:49:b0:97:85:d6:34:11:da:30:4f:6b:95:66:39:43
y:
23:6c:47:4c:09:12:76:a7:d2:19:ca:e4:3c:90:e1:4a
92:58:21:a9:d7:f0:c6:e2:35:23:31:43:79:18:dd:9c
85:a0:6a:59:e3:43:e1:0f:93:bd:ee:35:f7:ba:f4:4b
Public Key PIN:
pin-sha256:tiP++hy/M1YPIiNHrKyqWySy8mpf+mrPCwGyI/HOTrs=
Public Key ID:
sha256:b623fefa1cbf33560f222347acacaa5b24b2f26a5ffa6acf0b01b223f1ce4ebb
sha1:e4bff5034adc0a7fc31da1472673e5f21817f067
-----BEGIN EC PRIVATE KEY-----
MIGlAgEBBDEAqc4Q37yZqFuJAOYWXMxSCT9JB3SVITVNACW4pGQOZBX2Uin6OXcn
qWWQ5+zepz4AoAcGBSuBBAAioWQDYgAED0VUvV0QW1TY0qxDrkTsln6WGJcifQdF
B+uLXzBCfTwVSbCXhdY0EdowT2uVZjlDI2xHTAkSdqfSGcrkPJDhSpJYIanX8Mbi
NSMxQ3kY3ZyFoGpZ40PhD5O97jX3uvRL
-----END EC PRIVATE KEY-----

25
tests/ca/client1.pub Normal file
View File

@ -0,0 +1,25 @@
Public Key Information:
Public Key Algorithm: EC/ECDSA
Algorithm Security Level: Ultra (384 bits)
Curve: SECP384R1
X:
0f:45:54:bd:5d:10:5b:54:d8:d2:ac:43:ae:44:ec:96
7e:96:18:97:22:7d:07:45:07:eb:8b:5f:30:42:7d:3c
15:49:b0:97:85:d6:34:11:da:30:4f:6b:95:66:39:43
Y:
23:6c:47:4c:09:12:76:a7:d2:19:ca:e4:3c:90:e1:4a
92:58:21:a9:d7:f0:c6:e2:35:23:31:43:79:18:dd:9c
85:a0:6a:59:e3:43:e1:0f:93:bd:ee:35:f7:ba:f4:4b
Public Key ID:
sha1:e4bff5034adc0a7fc31da1472673e5f21817f067
sha256:b623fefa1cbf33560f222347acacaa5b24b2f26a5ffa6acf0b01b223f1ce4ebb
Public Key PIN:
pin-sha256:tiP++hy/M1YPIiNHrKyqWySy8mpf+mrPCwGyI/HOTrs=
-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAED0VUvV0QW1TY0qxDrkTsln6WGJcifQdF
B+uLXzBCfTwVSbCXhdY0EdowT2uVZjlDI2xHTAkSdqfSGcrkPJDhSpJYIanX8Mbi
NSMxQ3kY3ZyFoGpZ40PhD5O97jX3uvRL
-----END PUBLIC KEY-----

View File

@ -0,0 +1,7 @@
dn = "OU=lighttpd2 test suite Client CA,CN=client1"
expiration_days = 3650
tls_www_client
signing_key

14
tests/ca/client_ca.crt Normal file
View File

@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICIDCCAaagAwIBAgIBATAKBggqhkjOPQQDBDBZMS4wLAYDVQQDEyVsaWdodHRw
ZDIgdGVzdCBzdWl0ZSBDbGllbnQgQXV0aG9yaXR5MScwJQYDVQQLEx5saWdodHRw
ZDIgdGVzdCBzdWl0ZSBDbGllbnQgQ0EwHhcNMjUwMTAxMTMzMjI2WhcNMzQxMjMw
MTMzMjI2WjBZMS4wLAYDVQQDEyVsaWdodHRwZDIgdGVzdCBzdWl0ZSBDbGllbnQg
QXV0aG9yaXR5MScwJQYDVQQLEx5saWdodHRwZDIgdGVzdCBzdWl0ZSBDbGllbnQg
Q0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASS3dTmmtjhKfTQw33jA8vGC9LJkGh1
hMH5N2kmE52C46cZFZwH6wZMVkcLmp3EpyASiCfuOi3RvIzUPRkrlXbvY7aL3NkT
/7WhZZtn7cwFaD/NiBO5YWN5zbA6ERatOF6jQjBAMA8GA1UdEwEB/wQFMAMBAf8w
DgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTaGwesV2j4jud2jHZUunNpJbdazjAK
BggqhkjOPQQDBANoADBlAjAsUDPUAQQTNXMCNmxIQ3qba9ZrJSfMIVhZlDO/mUSJ
Vp7nku/3lUdg6VOCCyEnv1kCMQCONCYvNaTMsn7wn6I5Euxyn++S/zwZ+eY3NrCD
xSj8IeL4vDXzU39pNc9Z0nYWKzs=
-----END CERTIFICATE-----

36
tests/ca/client_ca.key Normal file
View File

@ -0,0 +1,36 @@
Public Key Info:
Public Key Algorithm: EC/ECDSA
Key Security Level: Ultra (384 bits)
curve: SECP384R1
private key:
48:92:1f:d3:2a:81:6b:7e:08:c7:de:99:26:6a:c2:c2
f5:28:53:01:c5:9d:ae:b7:6a:2d:db:3c:a9:b7:04:f1
20:5a:0a:35:11:09:90:eb:0c:e3:6a:45:f7:3a:f1:dd
x:
00:92:dd:d4:e6:9a:d8:e1:29:f4:d0:c3:7d:e3:03:cb
c6:0b:d2:c9:90:68:75:84:c1:f9:37:69:26:13:9d:82
e3:a7:19:15:9c:07:eb:06:4c:56:47:0b:9a:9d:c4:a7
20:
y:
12:88:27:ee:3a:2d:d1:bc:8c:d4:3d:19:2b:95:76:ef
63:b6:8b:dc:d9:13:ff:b5:a1:65:9b:67:ed:cc:05:68
3f:cd:88:13:b9:61:63:79:cd:b0:3a:11:16:ad:38:5e
Public Key PIN:
pin-sha256:ClC41VsR43G8CaiRcPuncIR9mdMdf8aTr3b2aZKV5Ec=
Public Key ID:
sha256:0a50b8d55b11e371bc09a89170fba770847d99d31d7fc693af76f6699295e447
sha1:da1b07ac5768f88ee7768c7654ba736925b75ace
-----BEGIN EC PRIVATE KEY-----
MIGkAgEBBDBIkh/TKoFrfgjH3pkmasLC9ShTAcWdrrdqLds8qbcE8SBaCjURCZDr
DONqRfc68d2gBwYFK4EEACKhZANiAASS3dTmmtjhKfTQw33jA8vGC9LJkGh1hMH5
N2kmE52C46cZFZwH6wZMVkcLmp3EpyASiCfuOi3RvIzUPRkrlXbvY7aL3NkT/7Wh
ZZtn7cwFaD/NiBO5YWN5zbA6ERatOF4=
-----END EC PRIVATE KEY-----

26
tests/ca/client_ca.pub Normal file
View File

@ -0,0 +1,26 @@
Public Key Information:
Public Key Algorithm: EC/ECDSA
Algorithm Security Level: Ultra (384 bits)
Curve: SECP384R1
X:
00:92:dd:d4:e6:9a:d8:e1:29:f4:d0:c3:7d:e3:03:cb
c6:0b:d2:c9:90:68:75:84:c1:f9:37:69:26:13:9d:82
e3:a7:19:15:9c:07:eb:06:4c:56:47:0b:9a:9d:c4:a7
20
Y:
12:88:27:ee:3a:2d:d1:bc:8c:d4:3d:19:2b:95:76:ef
63:b6:8b:dc:d9:13:ff:b5:a1:65:9b:67:ed:cc:05:68
3f:cd:88:13:b9:61:63:79:cd:b0:3a:11:16:ad:38:5e
Public Key ID:
sha1:da1b07ac5768f88ee7768c7654ba736925b75ace
sha256:0a50b8d55b11e371bc09a89170fba770847d99d31d7fc693af76f6699295e447
Public Key PIN:
pin-sha256:ClC41VsR43G8CaiRcPuncIR9mdMdf8aTr3b2aZKV5Ec=
-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEkt3U5prY4Sn00MN94wPLxgvSyZBodYTB
+TdpJhOdguOnGRWcB+sGTFZHC5qdxKcgEogn7jot0byM1D0ZK5V272O2i9zZE/+1
oWWbZ+3MBWg/zYgTuWFjec2wOhEWrThe
-----END PUBLIC KEY-----

View File

@ -0,0 +1,11 @@
dn = "OU=lighttpd2 test suite Client CA,CN=lighttpd2 test suite Client Authority"
serial = 01
expiration_days = 3650
ca
cert_signing_key
crl_signing_key

View File

@ -4,7 +4,7 @@ set -e
# (requires gnutls >= 3.2.7 (or >= 3.1.17 and < 3.2.0)) # (requires gnutls >= 3.2.7 (or >= 3.1.17 and < 3.2.0))
KEY_TYPE="${KEY_TYPE:-rsa}" KEY_TYPE="${KEY_TYPE:-ecc}"
HASH_ALG="${HASH_ALG:-SHA512}" HASH_ALG="${HASH_ALG:-SHA512}"
function gen_rsa_key() { function gen_rsa_key() {
@ -55,9 +55,12 @@ function ca_sign() {
gen_key "ca" gen_key "ca"
gen_key "intermediate" gen_key "intermediate"
gen_key "server" gen_key "server"
gen_key "client_ca"
gen_key "client1"
ca_sign_self "ca" ca_sign_self "ca"
ca_sign "ca" "intermediate" ca_sign "ca" "intermediate"
ca_sign_self "client_ca"
for name in test1.ssl test2.ssl; do for name in test1.ssl test2.ssl; do
ca_sign "intermediate" "server_${name}" "server" ca_sign "intermediate" "server_${name}" "server"
@ -65,3 +68,5 @@ for name in test1.ssl test2.ssl; do
echo "Generate server_${name}.pem" echo "Generate server_${name}.pem"
cat "server.key" "server_${name}.crt" "intermediate.crt" > "server_${name}.pem" cat "server.key" "server_${name}.crt" "intermediate.crt" > "server_${name}.pem"
done done
ca_sign "client_ca" "client1"

View File

@ -1,27 +1,14 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIEjDCCAvSgAwIBAgIUR8LOiig3v6yY4ZTxxwwg3LIUqMswDQYJKoZIhvcNAQEN MIICPDCCAcOgAwIBAgIURcjH78CmuAoNZVwLZka0+BmM17wwCgYIKoZIzj0EAwQw
BQAwSzEnMCUGA1UEAxMebGlnaHR0cGQyIHRlc3Qgc3VpdGUgQXV0aG9yaXR5MSAw SzEnMCUGA1UEAxMebGlnaHR0cGQyIHRlc3Qgc3VpdGUgQXV0aG9yaXR5MSAwHgYD
HgYDVQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTAeFw0yNDEyMjUyMjUyMzFa VQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTAeFw0yNTAxMDExMzMyMjZaFw0z
Fw0zNDEyMjMyMjUyMzFaMFAxLDAqBgNVBAMTI2xpZ2h0dHBkMiB0ZXN0IHN1aXRl NDEyMzAxMzMyMjZaMFAxLDAqBgNVBAMTI2xpZ2h0dHBkMiB0ZXN0IHN1aXRlIElu
IEludGVybWVkaWF0ZSAxMSAwHgYDVQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBD dGVybWVkaWF0ZSAxMSAwHgYDVQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTB2
QTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBANR6yGaTgbwvTxUxtnh4 MBAGByqGSM49AgEGBSuBBAAiA2IABGAMLbh3AitDqsKwtO3b1qOwve2RzGWGs7z8
7r8uUj1+FGY+yDr6PN7QlMkdO6maHy5JgDs/Qg2dY5wE/CoF4bFnmdglioInKeYX qsi4Nye9+r9l6VQTnK0TUxrr/WdYOLdNmeMVtMl3tXb+m6XKnBVH442q8pipYbM7
bNj5i3GBrNfHnsoBRMjKVTBIRptytfTXm3JK7YxQ9LzjpOkHuyswhapT0PL3W7kc xSRLTuPDRSpKoJqZTTJcoLC/uhpLu6NjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
qaFjiThch1Exj7gOWswZxL5voH39MJXzhjQuqSknjxDHjNbiJB07q/vz7XVA9BSq HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFIdYZEGTpLS+h8WsSGr4m/7tnnetMB8GA1Ud
Qqr2itBQAv0kFekGL9ZWDlbd0SVqAMKVof5y6eZcOvfqZ/1xAPfoAKRcIT1qrs73 IwQYMBaAFMEztottTkpfEMdgJyKaXwKTAIJrMAoGCCqGSM49BAMEA2cAMGQCMDUJ
78ycJcarUgy1kSg9KhVPn6uetDja6J7K4MNqBFKqBJR0b5409rJ+XoJ+b8lX5dns y41eYkjLnj1x9T1xvy4LPLjhQE4ZdpJ2BwNNnn/+lHgfZtxf8thQtoXbx9uHMgIw
IobL3QfoV+z6auxv80+aIGYQ7XWwfIG7qX8WNrFyMHS8coqQcKdH2ivL+NYK/+uB H8cWKviP+rrBLUW4JdnSvv+8voRJYpNswi+EJoee53hShIWsETixdwGM1hRGQtdB
ZP+cif0cukoxOPQ5wRbbo6QeYLE8lMJSqkdIRHwXQnqHrDIOJWNkpOfTx37YyDCf
vz0H1R10j6JYter8R9GPhgaXMkH1GHihe46/W0QpfxPPpwIDAQABo2MwYTAPBgNV
HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUO0dFwXCG+RvI
O08NsA8rtlkv8dUwHwYDVR0jBBgwFoAUeCorT1z8K+qFb3++SNJRuXcNOsIwDQYJ
KoZIhvcNAQENBQADggGBAG+LHFmCflCOWmWN4VOgi5pVoRNyV3r1hHZL0drmonsw
5h8VOdj6fOj23nzh2b7SpX9hLTcukPRMSt0HIQEcC9YTMB4LooNl9FJsoMBTmW1Z
CiiFapxwYEMOhrDP5KNo3TA6eB5GsUc1CfnJ3/2loivQo/2jMHoP2LcCUjSG0tMS
+WAHSzdlGGVDEh7WQMs7be3lAQev1YBrvmSY+HyP3EZmk1i0D0ZZ9MPcW3C/9Qvr
x5r7lwBq7rIkMjRMKg7XK36eCMs/Xb3crOCR0Tg6LzUm2MAj4m8RVDoSN31FCAFe
ZUvxaj8goU4GquCq+RmxXfL+DQT1UapwHmvsnhTPC9w5y1+4YK8Aq28FIquGkPbE
zIG+mpzgJmpt8GHHiGQjpCo1XHE81m8g/DumvuuAezISIDYIBBvW2Kz8O2xVf8l1
Cs3XBbjD3zx3G8KHZdlSgnNIwDme6r1VUZP/u0YHMnIhl6Bv/M4KiRO5rAYIjoex
Ze0HkL+w6EPzNiJ6DUL9VA==
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,182 +1,36 @@
Public Key Info: Public Key Info:
Public Key Algorithm: RSA Public Key Algorithm: EC/ECDSA
Key Security Level: High (3072 bits) Key Security Level: Ultra (384 bits)
modulus: curve: SECP384R1
00:d4:7a:c8:66:93:81:bc:2f:4f:15:31:b6:78:78:ee private key:
bf:2e:52:3d:7e:14:66:3e:c8:3a:fa:3c:de:d0:94:c9 6c:80:9c:eb:20:30:f0:e5:2e:22:73:0b:32:6f:46:95
1d:3b:a9:9a:1f:2e:49:80:3b:3f:42:0d:9d:63:9c:04 64:9e:fd:14:b6:32:c4:3d:58:24:0f:2c:cf:1f:98:ad
fc:2a:05:e1:b1:67:99:d8:25:8a:82:27:29:e6:17:6c f1:6c:ac:a0:ff:f0:e4:20:66:81:35:fa:f3:f9:50:95
d8:f9:8b:71:81:ac:d7:c7:9e:ca:01:44:c8:ca:55:30
48:46:9b:72:b5:f4:d7:9b:72:4a:ed:8c:50:f4:bc:e3
a4:e9:07:bb:2b:30:85:aa:53:d0:f2:f7:5b:b9:1c:a9
a1:63:89:38:5c:87:51:31:8f:b8:0e:5a:cc:19:c4:be
6f:a0:7d:fd:30:95:f3:86:34:2e:a9:29:27:8f:10:c7
8c:d6:e2:24:1d:3b:ab:fb:f3:ed:75:40:f4:14:aa:42
aa:f6:8a:d0:50:02:fd:24:15:e9:06:2f:d6:56:0e:56
dd:d1:25:6a:00:c2:95:a1:fe:72:e9:e6:5c:3a:f7:ea
67:fd:71:00:f7:e8:00:a4:5c:21:3d:6a:ae:ce:f7:ef
cc:9c:25:c6:ab:52:0c:b5:91:28:3d:2a:15:4f:9f:ab
9e:b4:38:da:e8:9e:ca:e0:c3:6a:04:52:aa:04:94:74
6f:9e:34:f6:b2:7e:5e:82:7e:6f:c9:57:e5:d9:ec:22
86:cb:dd:07:e8:57:ec:fa:6a:ec:6f:f3:4f:9a:20:66
10:ed:75:b0:7c:81:bb:a9:7f:16:36:b1:72:30:74:bc
72:8a:90:70:a7:47:da:2b:cb:f8:d6:0a:ff:eb:81:64
ff:9c:89:fd:1c:ba:4a:31:38:f4:39:c1:16:db:a3:a4
1e:60:b1:3c:94:c2:52:aa:47:48:44:7c:17:42:7a:87
ac:32:0e:25:63:64:a4:e7:d3:c7:7e:d8:c8:30:9f:bf
3d:07:d5:1d:74:8f:a2:58:b5:ea:fc:47:d1:8f:86:06
97:32:41:f5:18:78:a1:7b:8e:bf:5b:44:29:7f:13:cf
a7:
public exponent:
01:00:01:
private exponent:
76:3b:ec:8f:c7:bd:05:6e:7d:df:19:4e:a4:33:07:07
33:4b:68:14:64:5d:90:c9:f2:a7:94:7f:98:29:72:cf
e5:87:36:cf:ea:fd:d3:71:24:7e:28:fd:4f:94:5d:e1
c3:b0:8a:2a:21:b0:25:ea:9d:ec:56:c6:a5:d6:9b:27
11:95:5a:90:02:12:00:6e:87:91:b5:28:d6:0e:19:53
de:96:59:7a:8e:c7:fb:23:da:35:dd:42:9f:2d:0c:af
93:4c:4e:06:76:75:aa:96:01:4b:72:01:84:3c:42:d8
1f:7f:17:f1:c5:0a:95:3d:97:f9:c4:e4:95:e2:38:e5
fc:b4:9e:d3:0e:5d:f8:6b:c9:1b:30:5f:66:e8:bb:61
cf:a0:fe:df:95:78:da:36:9e:08:05:20:cc:ef:01:32
09:06:ad:6c:18:7d:ac:3a:d4:f4:30:62:60:78:92:35
d4:4f:b1:70:c2:d6:68:d2:22:37:ad:8b:dc:f4:5f:66
82:bd:2a:3e:20:a7:64:45:62:98:ac:52:32:11:51:f4
7d:27:60:d5:39:b8:a9:44:8c:26:19:f3:cd:aa:1a:e8
e1:83:8b:0f:0c:6d:d7:cb:5f:19:e5:52:2f:2d:f0:e2
d5:fd:b3:09:9e:bc:06:42:a7:f7:cd:c7:30:89:bb:74
18:66:ec:c3:c6:d7:47:62:65:80:45:76:c4:ad:52:6c
bb:69:48:5d:63:8d:21:e7:dd:61:19:a3:7e:71:47:4a
8e:9d:f0:f3:27:ff:24:a8:15:d3:d0:4c:89:c8:24:20
62:4e:00:95:5e:54:d3:b4:8b:d6:0b:5d:eb:4a:4d:59
de:2b:eb:25:6c:4d:28:7f:01:f7:9f:bc:2f:4d:a8:00
03:3b:4d:86:cf:9c:8f:88:0f:b4:80:b2:3b:40:5e:b4
a7:3b:a0:ca:61:b1:e4:20:33:c6:ef:ec:2b:ed:da:53
46:0e:f5:2b:28:24:19:09:ac:d6:b8:b7:18:16:a4:c1
prime1: x:
00:e8:f2:90:f0:42:a9:66:be:9b:15:64:fb:59:56:dc 60:0c:2d:b8:77:02:2b:43:aa:c2:b0:b4:ed:db:d6:a3
d2:ad:2b:ad:f7:7c:9f:ef:3b:70:ae:ec:b9:bb:66:54 b0:bd:ed:91:cc:65:86:b3:bc:fc:aa:c8:b8:37:27:bd
2f:9a:6a:37:19:6b:37:61:f2:75:c5:ec:18:c6:dc:5d fa:bf:65:e9:54:13:9c:ad:13:53:1a:eb:fd:67:58:38
0b:3d:f2:6f:90:3e:60:6a:b2:3f:db:c4:96:97:27:9a
7f:21:bd:fe:a7:7f:6a:9a:d5:2c:f9:9e:39:76:72:69
63:64:36:a1:59:91:c6:f4:79:85:c3:fc:0b:5c:10:a1
f6:93:fe:87:2a:2d:b2:2e:4b:cd:81:f6:d7:d6:3f:22
4b:13:36:42:cb:df:15:3f:70:d7:ef:e5:f1:c9:99:96
c2:61:f5:1a:a4:63:b9:c1:32:72:96:49:97:a1:86:ac
87:6a:31:77:6a:19:a1:52:a3:15:83:27:9f:db:63:74
5f:8a:c7:7a:07:33:c5:eb:ba:ad:2d:2c:cd:89:a9:8f
28:69:65:21:df:98:96:f3:7e:ae:f0:cf:21:79:10:60
6f:
prime2:
00:e9:81:b0:1c:af:61:ee:b4:ec:11:f5:9e:94:68:5a
82:8b:cd:27:ce:11:ec:3b:fa:a5:41:e0:83:89:e7:cb
7e:49:ee:ac:aa:0e:56:2b:1a:5c:85:94:39:52:28:f8
5b:e0:36:c8:90:47:df:0e:e7:db:9d:ca:20:b0:5a:ec
bc:eb:0c:36:f9:c7:8e:51:d0:74:ab:04:40:aa:26:bc
1b:e0:14:f1:0b:6f:79:91:94:19:b1:87:75:a7:ae:e5
14:0e:52:57:e3:a4:3c:0f:fb:7a:01:f5:a8:ec:c3:77
f7:da:92:77:0a:bf:e5:f1:59:d1:5a:bc:c3:5d:10:de
f8:91:b7:d3:c1:a6:35:b3:47:b2:81:ad:ef:de:6e:fd
38:69:e2:92:29:0c:51:2c:15:a8:fe:69:b4:4f:26:f0
37:b8:dc:46:4d:3f:22:46:45:f6:20:d8:c8:5a:ed:77
82:53:40:17:5b:26:a3:54:d5:5d:6f:55:02:10:a4:b0
49:
coefficient:
20:ee:cc:66:51:fb:a3:82:e4:55:02:7a:98:de:f1:d1
83:d1:0a:26:5e:bf:78:5a:ca:cf:87:2b:19:97:20:ad
29:4c:7c:d3:44:5e:94:ee:6c:68:a9:05:d7:25:6a:60
1e:46:0b:94:f3:f9:5a:d6:27:fc:1d:de:e5:21:9b:47
8d:1f:a4:7a:12:42:95:46:0e:9c:a0:9b:34:51:ba:71
b9:fb:a9:02:2c:1d:a6:69:b5:57:89:ba:7c:47:e0:f5
1a:9a:c0:71:de:e6:b1:52:7e:e6:1d:48:17:d7:22:50
ed:23:d7:b9:6c:d4:6f:c9:d5:cb:13:ca:c0:f5:0c:74
a9:12:ad:03:e1:24:97:07:73:1f:32:40:6f:6a:f9:52
cb:fe:0a:d6:eb:7e:a9:c6:a6:13:c4:bb:55:65:6a:9a
8d:25:a5:c7:1c:12:e8:3b:70:37:ba:a6:a9:1d:16:ba
79:ed:9e:8b:11:0e:25:ca:e3:e3:ab:66:03:e6:7b:1d
exp1: y:
02:11:95:63:ec:d3:a0:4b:f5:08:9d:9a:f5:d2:25:a7 00:b7:4d:99:e3:15:b4:c9:77:b5:76:fe:9b:a5:ca:9c
e1:4d:cf:ff:b0:a5:a2:f4:3e:2d:ef:80:3e:bf:cb:e3 15:47:e3:8d:aa:f2:98:a9:61:b3:3b:c5:24:4b:4e:e3
98:55:75:23:ce:a5:f1:42:bb:f5:04:01:bc:52:5c:a9 c3:45:2a:4a:a0:9a:99:4d:32:5c:a0:b0:bf:ba:1a:4b
2a:e5:aa:43:f7:a9:d7:88:b9:b4:73:ec:7a:6f:29:9a bb:
13:6c:a2:84:4e:47:5e:14:a2:8f:9c:ee:19:b5:2e:66
69:8f:6a:a3:66:fe:03:51:c8:f4:52:9a:af:38:9e:97
97:fc:dc:aa:6d:39:75:db:ca:79:6a:fd:c3:b3:4f:d4
a6:d9:06:82:d4:fa:55:53:e5:37:06:2d:bd:82:95:aa
28:40:8a:fa:06:c0:b1:8c:87:23:fa:87:54:31:e3:fa
57:e1:14:94:66:a1:de:20:00:a2:e7:89:2d:e3:96:36
fa:fe:86:80:e5:de:ce:17:1c:4e:98:65:42:e1:b4:99
c1:45:da:a5:27:af:bf:7d:d2:83:e4:f3:01:26:3a:15
exp2:
00:af:82:2d:c7:f1:be:cf:37:a7:74:7c:44:1c:52:2f
2d:8e:3c:be:5d:72:35:38:83:d5:30:a5:ba:d8:ad:a3
d3:21:68:c6:d8:ee:fb:af:5c:1a:0c:c0:f3:30:a0:e0
c3:d5:cb:f7:86:12:af:42:b9:dc:e5:45:a6:ba:47:2d
47:75:f7:f1:5e:5e:b2:c7:25:c2:7b:44:30:02:74:28
d1:5e:e4:fe:a4:54:be:70:40:7b:eb:66:e0:75:0f:cc
d8:fd:46:c1:0e:b6:43:fa:d3:4e:ca:28:46:36:e7:58
c5:af:c0:84:bf:4c:ab:5d:73:e0:1a:ae:64:bd:0f:d0
37:ce:f6:f7:af:c6:e8:f7:fe:bc:da:21:cd:78:47:be
06:67:f7:c7:5a:19:0a:ed:f2:bd:d9:b3:c3:b5:f6:93
79:9e:75:da:55:77:4d:a0:ba:37:1c:4b:34:94:bb:86
27:2b:c1:b1:8c:6e:87:37:5d:43:e4:49:65:ca:f2:ae
19:
Public Key PIN: Public Key PIN:
pin-sha256:dOiH1Olylhi9fx5sH1F6m7p4IEq/VIq2qdBR2negK60= pin-sha256:81OEBDrqLrlq9D3S34OiNpfVp9N9tQyR0O+6KPeXiFs=
Public Key ID: Public Key ID:
sha256:74e887d4e9729618bd7f1e6c1f517a9bba78204abf548ab6a9d051da77a02bad sha256:f35384043aea2eb96af43dd2df83a23697d5a7d37db50c91d0efba28f797885b
sha1:3b4745c17086f91bc83b4f0db00f2bb6592ff1d5 sha1:8758644193a4b4be87c5ac486af89bfeed9e77ad
-----BEGIN RSA PRIVATE KEY----- -----BEGIN EC PRIVATE KEY-----
MIIG4wIBAAKCAYEA1HrIZpOBvC9PFTG2eHjuvy5SPX4UZj7IOvo83tCUyR07qZof MIGkAgEBBDBsgJzrIDDw5S4icwsyb0aVZJ79FLYyxD1YJA8szx+YrfFsrKD/8OQg
LkmAOz9CDZ1jnAT8KgXhsWeZ2CWKgicp5hds2PmLcYGs18eeygFEyMpVMEhGm3K1 ZoE1+vP5UJWgBwYFK4EEACKhZANiAARgDC24dwIrQ6rCsLTt29ajsL3tkcxlhrO8
9NebckrtjFD0vOOk6Qe7KzCFqlPQ8vdbuRypoWOJOFyHUTGPuA5azBnEvm+gff0w /KrIuDcnvfq/ZelUE5ytE1Ma6/1nWDi3TZnjFbTJd7V2/pulypwVR+ONqvKYqWGz
lfOGNC6pKSePEMeM1uIkHTur+/PtdUD0FKpCqvaK0FAC/SQV6QYv1lYOVt3RJWoA O8UkS07jw0UqSqCamU0yXKCwv7oaS7s=
wpWh/nLp5lw69+pn/XEA9+gApFwhPWquzvfvzJwlxqtSDLWRKD0qFU+fq560ONro -----END EC PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

View File

@ -1,50 +1,26 @@
Public Key Information: Public Key Information:
Public Key Algorithm: RSA Public Key Algorithm: EC/ECDSA
Algorithm Security Level: High (3072 bits) Algorithm Security Level: Ultra (384 bits)
Modulus (bits 3072): Curve: SECP384R1
00:d4:7a:c8:66:93:81:bc:2f:4f:15:31:b6:78:78:ee X:
bf:2e:52:3d:7e:14:66:3e:c8:3a:fa:3c:de:d0:94:c9 60:0c:2d:b8:77:02:2b:43:aa:c2:b0:b4:ed:db:d6:a3
1d:3b:a9:9a:1f:2e:49:80:3b:3f:42:0d:9d:63:9c:04 b0:bd:ed:91:cc:65:86:b3:bc:fc:aa:c8:b8:37:27:bd
fc:2a:05:e1:b1:67:99:d8:25:8a:82:27:29:e6:17:6c fa:bf:65:e9:54:13:9c:ad:13:53:1a:eb:fd:67:58:38
d8:f9:8b:71:81:ac:d7:c7:9e:ca:01:44:c8:ca:55:30 Y:
48:46:9b:72:b5:f4:d7:9b:72:4a:ed:8c:50:f4:bc:e3 00:b7:4d:99:e3:15:b4:c9:77:b5:76:fe:9b:a5:ca:9c
a4:e9:07:bb:2b:30:85:aa:53:d0:f2:f7:5b:b9:1c:a9 15:47:e3:8d:aa:f2:98:a9:61:b3:3b:c5:24:4b:4e:e3
a1:63:89:38:5c:87:51:31:8f:b8:0e:5a:cc:19:c4:be c3:45:2a:4a:a0:9a:99:4d:32:5c:a0:b0:bf:ba:1a:4b
6f:a0:7d:fd:30:95:f3:86:34:2e:a9:29:27:8f:10:c7 bb
8c:d6:e2:24:1d:3b:ab:fb:f3:ed:75:40:f4:14:aa:42
aa:f6:8a:d0:50:02:fd:24:15:e9:06:2f:d6:56:0e:56
dd:d1:25:6a:00:c2:95:a1:fe:72:e9:e6:5c:3a:f7:ea
67:fd:71:00:f7:e8:00:a4:5c:21:3d:6a:ae:ce:f7:ef
cc:9c:25:c6:ab:52:0c:b5:91:28:3d:2a:15:4f:9f:ab
9e:b4:38:da:e8:9e:ca:e0:c3:6a:04:52:aa:04:94:74
6f:9e:34:f6:b2:7e:5e:82:7e:6f:c9:57:e5:d9:ec:22
86:cb:dd:07:e8:57:ec:fa:6a:ec:6f:f3:4f:9a:20:66
10:ed:75:b0:7c:81:bb:a9:7f:16:36:b1:72:30:74:bc
72:8a:90:70:a7:47:da:2b:cb:f8:d6:0a:ff:eb:81:64
ff:9c:89:fd:1c:ba:4a:31:38:f4:39:c1:16:db:a3:a4
1e:60:b1:3c:94:c2:52:aa:47:48:44:7c:17:42:7a:87
ac:32:0e:25:63:64:a4:e7:d3:c7:7e:d8:c8:30:9f:bf
3d:07:d5:1d:74:8f:a2:58:b5:ea:fc:47:d1:8f:86:06
97:32:41:f5:18:78:a1:7b:8e:bf:5b:44:29:7f:13:cf
a7
Exponent (bits 24):
01:00:01
Public Key ID: Public Key ID:
sha1:3b4745c17086f91bc83b4f0db00f2bb6592ff1d5 sha1:8758644193a4b4be87c5ac486af89bfeed9e77ad
sha256:74e887d4e9729618bd7f1e6c1f517a9bba78204abf548ab6a9d051da77a02bad sha256:f35384043aea2eb96af43dd2df83a23697d5a7d37db50c91d0efba28f797885b
Public Key PIN: Public Key PIN:
pin-sha256:dOiH1Olylhi9fx5sH1F6m7p4IEq/VIq2qdBR2negK60= pin-sha256:81OEBDrqLrlq9D3S34OiNpfVp9N9tQyR0O+6KPeXiFs=
-----BEGIN PUBLIC KEY----- -----BEGIN PUBLIC KEY-----
MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA1HrIZpOBvC9PFTG2eHju MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYAwtuHcCK0OqwrC07dvWo7C97ZHMZYaz
vy5SPX4UZj7IOvo83tCUyR07qZofLkmAOz9CDZ1jnAT8KgXhsWeZ2CWKgicp5hds vPyqyLg3J736v2XpVBOcrRNTGuv9Z1g4t02Z4xW0yXe1dv6bpcqcFUfjjarymKlh
2PmLcYGs18eeygFEyMpVMEhGm3K19NebckrtjFD0vOOk6Qe7KzCFqlPQ8vdbuRyp szvFJEtO48NFKkqgmplNMlygsL+6Gku7
oWOJOFyHUTGPuA5azBnEvm+gff0wlfOGNC6pKSePEMeM1uIkHTur+/PtdUD0FKpC
qvaK0FAC/SQV6QYv1lYOVt3RJWoAwpWh/nLp5lw69+pn/XEA9+gApFwhPWquzvfv
zJwlxqtSDLWRKD0qFU+fq560ONronsrgw2oEUqoElHRvnjT2sn5egn5vyVfl2ewi
hsvdB+hX7Ppq7G/zT5ogZhDtdbB8gbupfxY2sXIwdLxyipBwp0faK8v41gr/64Fk
/5yJ/Ry6SjE49DnBFtujpB5gsTyUwlKqR0hEfBdCeoesMg4lY2Sk59PHftjIMJ+/
PQfVHXSPoli16vxH0Y+GBpcyQfUYeKF7jr9bRCl/E8+nAgMBAAE=
-----END PUBLIC KEY----- -----END PUBLIC KEY-----

View File

@ -1,182 +1,36 @@
Public Key Info: Public Key Info:
Public Key Algorithm: RSA Public Key Algorithm: EC/ECDSA
Key Security Level: High (3072 bits) Key Security Level: Ultra (384 bits)
modulus: curve: SECP384R1
00:d1:b4:9f:f9:7f:0b:52:17:51:64:e0:e8:06:d2:55 private key:
ce:be:a8:3b:1f:d7:5c:8e:22:46:1b:03:60:e7:ec:bf 00:c9:a2:25:88:02:2c:62:f6:11:76:bd:b1:bf:ff:1c
ae:c2:7b:b7:c8:c8:7f:07:56:ae:a9:72:ea:a9:d7:fe b8:19:5e:49:a3:df:72:d9:d0:2a:83:cc:b0:90:5e:13
98:0b:b7:72:27:5d:1c:65:4c:8f:d1:bb:c3:97:e4:6a f2:29:59:b0:66:07:32:dd:a1:67:12:8d:91:84:9f:64
da:e3:98:c2:f2:12:bc:94:d2:c6:9a:c9:ae:f5:c3:eb ca:
88:34:e7:59:ec:fb:5f:a0:1b:11:0d:0b:7f:46:3a:a2
4b:9a:ae:08:60:15:df:3a:14:49:3e:30:0b:03:25:12
29:d2:82:5c:35:90:eb:0c:3f:db:b8:2c:d6:29:58:74
21:f3:6b:08:d0:65:7c:ed:6e:71:0c:65:36:82:1b:97
fe:11:48:4c:af:67:28:da:55:09:67:08:47:ed:d3:c5
f1:3c:95:6a:3e:49:36:45:35:f6:cd:38:f7:ef:8c:74
5a:f3:3e:42:13:d5:38:53:11:0c:2c:b0:8d:b4:8b:3c
49:8b:2a:0e:b2:ce:f7:d1:8a:f3:bc:f3:99:e9:99:00
50:48:6b:1b:0b:cc:e8:73:a3:bc:f2:76:98:ab:bc:35
22:21:81:53:8b:58:e7:97:3a:f5:05:37:e4:13:5f:1f
c7:3f:01:59:f8:b6:92:d6:71:95:68:5e:21:6f:5b:de
7f:8d:99:d8:57:6d:7e:72:d4:d1:89:9f:f0:5f:2d:9b
66:a7:ac:c4:8b:09:c8:57:96:73:63:f5:d7:57:4c:fe
81:78:dc:8f:fb:ae:67:ca:bf:31:7d:49:b2:93:5d:e7
fd:60:46:38:9a:cf:5c:ea:7d:76:3e:d8:b2:c0:6b:89
67:f0:f5:e2:69:07:03:8b:35:59:08:cf:0d:74:b3:b5
5e:bd:cf:3e:2f:ba:16:88:3a:d1:b8:0c:bc:bc:d1:9c
0c:b0:be:9a:76:5f:11:bc:8c:1a:7d:a6:8a:db:d8:6b
d6:c4:fb:7a:9e:7b:e6:2a:e6:fd:c7:f2:8d:33:5f:76
19:
public exponent: x:
01:00:01: 00:fb:88:39:71:73:b5:7d:c1:17:c5:a3:17:9c:a0:48
af:97:14:92:2e:9b:ff:fb:1b:16:7b:d6:d1:54:54:3e
49:be:6a:89:3a:44:ef:13:33:6b:ca:84:02:67:6d:65
16:
private exponent: y:
16:a7:94:c0:b7:60:d9:b5:7b:2d:92:be:7e:3e:2a:d6 00:a9:8e:fd:01:17:a6:b7:2c:53:04:e4:d0:99:01:ce
f2:f1:e9:b1:3e:ea:d8:d0:0b:12:d0:02:a0:0b:8b:89 f2:50:43:43:00:66:50:e9:7d:95:c9:0d:55:54:14:93
ad:a8:ff:e9:c8:ff:30:23:c5:2a:b9:27:70:c1:cc:d7 7f:63:b8:b7:c1:a5:d9:e4:b9:57:8b:93:96:78:5c:cd
50:2c:b9:40:57:66:c1:ea:cb:7e:b4:f2:24:6e:a0:bc b0:
94:e9:e3:e5:92:f0:9c:83:48:c1:60:18:6e:a4:83:c5
6b:31:b3:1d:4e:ea:bd:b9:2e:d6:61:ef:95:fe:af:99
cb:54:11:c3:8f:99:56:04:eb:04:b4:db:fb:b2:fd:8b
57:1a:8e:2b:9b:44:49:46:7c:ce:20:c9:e2:1d:94:2e
36:c5:d1:65:f2:10:d4:f5:a1:70:dd:5e:4e:1f:fd:03
8d:8a:69:fe:68:fe:98:d7:a6:f4:62:88:a2:c0:c6:19
91:99:f2:a8:57:f0:6c:f9:af:77:ec:37:9c:c1:67:b0
8b:a6:a6:2c:ce:54:0f:65:40:13:73:df:5b:29:cf:91
50:32:74:7f:35:08:48:f8:d9:0b:b6:7a:f0:16:99:2f
a7:01:f9:14:84:10:65:8b:5e:0b:52:34:ca:09:e6:ba
fc:05:91:e0:2e:55:6a:14:a1:77:84:0a:48:1c:c8:68
27:93:66:f2:a0:54:e9:47:97:5d:4f:58:01:50:b7:84
e6:89:af:49:76:87:58:d9:21:2d:3a:39:1e:61:5d:6a
e4:5f:ef:b2:30:2e:28:b0:de:a2:8d:63:04:cf:61:00
ad:db:15:d1:77:11:97:de:aa:36:b1:0c:76:7d:63:f5
93:b0:81:bf:53:c4:c1:09:4c:1a:8e:27:99:57:db:a0
60:68:fc:67:d7:26:b2:fd:1c:35:53:60:97:50:bb:25
e5:68:93:e3:79:90:45:47:7e:c1:55:ad:aa:84:9d:54
91:33:c1:61:90:33:3a:46:a8:ad:c3:91:75:a8:50:90
5a:b1:a7:65:9c:88:67:05:83:13:96:2d:ef:44:72:81
prime1:
00:f7:da:97:ad:69:3a:7d:5c:52:b0:22:f6:c6:6e:c9
0d:58:a9:bf:aa:3a:de:52:ee:bf:aa:f7:53:f7:8a:cc
e8:e3:c8:12:1d:70:9c:99:81:54:6c:ab:c0:c9:5f:3d
7e:d1:bc:f6:dc:c8:e2:ad:98:6e:f3:45:c7:a2:51:95
51:75:1e:14:ec:ea:2e:0e:4b:5a:51:ad:8b:a4:45:b8
47:26:40:06:af:24:b9:97:e4:d2:6e:75:2f:b9:cc:b7
1a:e6:7c:84:5c:cf:ab:18:0d:49:b9:b0:b0:ee:eb:c9
44:fe:24:f8:b8:74:c3:85:6e:a0:b8:89:e7:4e:a6:41
11:d2:5f:5d:0d:9f:5b:2b:7b:64:22:60:fd:cb:24:6c
48:71:0d:9c:d7:24:42:d2:e0:01:fc:f9:84:36:49:37
97:c9:dd:74:66:9d:51:0c:d7:fa:8a:db:cd:e8:9f:4f
f4:c6:9a:36:d3:33:54:4d:e4:e3:5e:46:07:fe:38:fb
f5:
prime2:
00:d8:99:0e:d3:4c:97:81:d8:5a:e2:05:55:16:61:b5
71:ca:61:9b:5d:0b:a4:89:93:03:fa:d5:2d:1e:b0:a7
f9:80:d0:2e:ff:66:7f:e9:67:0e:f2:05:46:6d:e6:fd
01:8e:b1:7e:5f:10:6a:ad:75:54:90:0b:24:43:52:dc
80:9b:48:5a:4c:82:20:af:ba:91:4f:d5:3c:ca:25:a7
17:57:61:06:19:39:38:a9:2a:90:ec:f7:eb:83:61:68
15:e8:70:b0:a0:6d:d0:1e:00:cc:ab:2e:71:50:c7:f1
7c:ce:ac:7a:9c:71:03:ab:b5:8d:ef:ce:dc:87:7c:35
3c:84:a6:41:a3:97:ba:85:31:73:cc:b3:45:5e:4d:88
7c:63:f3:ea:62:39:20:67:d7:0c:bc:5c:70:ec:d9:ae
77:44:e1:0e:26:43:2b:a0:03:da:f1:7b:37:d7:f7:cc
99:8f:3a:b7:86:df:ed:6e:95:8d:80:30:f2:ee:7b:bf
15:
coefficient:
66:ab:fd:30:7a:54:a9:20:93:56:ac:85:ba:4e:27:60
4c:8b:a4:03:c3:62:d6:9f:66:ed:9b:ed:3d:47:39:49
d4:0c:f2:65:57:ca:96:ef:26:3a:38:64:f4:e1:36:5f
4c:ba:23:8a:d5:68:5e:63:6f:0a:a9:72:d3:0e:72:fd
7a:04:6f:91:9b:40:77:6b:4b:50:2a:e2:53:9f:98:ff
fe:92:dd:4f:e2:2e:ab:e8:40:0f:2e:f3:c1:b7:41:75
16:d4:31:42:d8:0b:31:2d:95:14:a6:19:5c:c4:d4:04
76:9f:70:01:3d:4a:a0:b0:d3:b8:9b:23:df:09:55:3d
5e:aa:d7:06:9e:d6:18:69:d4:54:6e:13:70:6e:87:1e
56:93:c2:99:fb:96:0b:61:46:61:ce:9b:c5:83:2f:dd
c7:cd:5b:02:58:13:7d:5d:10:50:0c:75:62:01:9e:3a
03:49:36:3b:b2:a6:48:a8:64:1b:cb:79:69:26:9d:4c
exp1:
02:bb:03:c4:c3:4e:03:a7:8a:b9:aa:08:f1:f2:b2:80
55:23:b9:9a:d4:7f:32:86:b2:d1:dd:5b:ad:74:78:01
70:d0:f9:72:1d:95:7c:13:72:ac:a7:cf:bd:e8:30:b3
3e:f8:47:f7:f2:b6:9c:96:fb:51:ee:c8:de:3e:eb:d8
33:e4:1a:f2:e9:39:8c:aa:c3:d9:f6:81:7d:53:cf:4d
e9:5b:f7:36:e2:be:b0:af:b2:a9:c8:dc:b7:bd:4b:9f
1e:3e:ec:ee:60:d3:4f:b6:85:c3:67:f0:eb:10:e9:ec
ba:a8:09:9d:6e:9b:e0:d2:71:2e:d7:46:17:15:b9:cd
ca:75:86:7e:e9:ec:85:34:1c:cc:4c:29:3f:9d:ad:1b
b7:33:21:31:35:93:0e:e3:ac:e1:ee:95:c8:4b:52:33
77:e3:da:ae:6e:b9:3f:dc:f9:43:a2:5c:48:5d:c8:f1
b7:66:67:88:38:1e:8b:a5:23:e4:1b:fd:66:8d:96:29
exp2:
2e:2a:c9:a7:2e:2f:29:05:05:b2:21:72:d6:77:73:26
52:fd:e5:10:bb:17:92:1f:5c:fc:cd:0d:75:fa:2f:83
95:fa:49:da:34:6d:d5:41:1b:45:68:ec:6f:26:8a:0d
17:ee:2b:42:76:0c:56:f6:a8:54:9f:9b:56:22:46:4f
bf:49:77:bd:d1:0a:c8:8a:1a:c9:0a:69:8f:a8:e0:e9
af:bd:45:80:80:da:db:eb:ef:c2:22:c1:f7:59:fe:c6
94:a9:d8:6c:09:9c:0f:99:1a:06:ee:ba:46:7e:a7:b1
73:97:fd:f6:74:7c:54:d0:38:f5:c1:80:ed:fc:02:98
e8:a9:4b:5a:64:4f:e4:6d:fb:01:c9:c0:62:6e:62:46
29:43:e7:54:92:5a:9e:e7:8e:96:63:99:ca:52:47:c6
b2:4e:ca:26:4b:b0:f3:c5:7e:98:74:2c:1e:03:7a:7f
cc:b0:b6:47:b0:59:3a:75:f4:18:3b:d6:bc:10:72:55
Public Key PIN: Public Key PIN:
pin-sha256:IegLX95VrhZ9V4+nRaDDOazbhoIeFTqx59KQ8wFNQF0= pin-sha256:7nnoskGn5ykPxCscQsd3tPYd2VWvmjZ5Da6yN4hLiBY=
Public Key ID: Public Key ID:
sha256:21e80b5fde55ae167d578fa745a0c339acdb86821e153ab1e7d290f3014d405d sha256:ee79e8b241a7e7290fc42b1c42c777b4f61dd955af9a36790daeb237884b8816
sha1:493baecacb125e63db1015a2882c1e4e32d7ce90 sha1:34ffccbf6c5e5904d8534af3da79f201fddc733d
-----BEGIN RSA PRIVATE KEY----- -----BEGIN EC PRIVATE KEY-----
MIIG4gIBAAKCAYEA0bSf+X8LUhdRZODoBtJVzr6oOx/XXI4iRhsDYOfsv67Ce7fI MIGlAgEBBDEAyaIliAIsYvYRdr2xv/8cuBleSaPfctnQKoPMsJBeE/IpWbBmBzLd
yH8HVq6pcuqp1/6YC7dyJ10cZUyP0bvDl+Rq2uOYwvISvJTSxprJrvXD64g051ns oWcSjZGEn2TKoAcGBSuBBAAioWQDYgAE+4g5cXO1fcEXxaMXnKBIr5cUki6b//sb
+1+gGxENC39GOqJLmq4IYBXfOhRJPjALAyUSKdKCXDWQ6ww/27gs1ilYdCHzawjQ FnvW0VRUPkm+aok6RO8TM2vKhAJnbWUWqY79ARemtyxTBOTQmQHO8lBDQwBmUOl9
ZXztbnEMZTaCG5f+EUhMr2co2lUJZwhH7dPF8TyVaj5JNkU19s049++MdFrzPkIT lckNVVQUk39juLfBpdnkuVeLk5Z4XM2w
1ThTEQwssI20izxJiyoOss730YrzvPOZ6ZkAUEhrGwvM6HOjvPJ2mKu8NSIhgVOL -----END EC PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

View File

@ -1,50 +1,27 @@
Public Key Information: Public Key Information:
Public Key Algorithm: RSA Public Key Algorithm: EC/ECDSA
Algorithm Security Level: High (3072 bits) Algorithm Security Level: Ultra (384 bits)
Modulus (bits 3072): Curve: SECP384R1
00:d1:b4:9f:f9:7f:0b:52:17:51:64:e0:e8:06:d2:55 X:
ce:be:a8:3b:1f:d7:5c:8e:22:46:1b:03:60:e7:ec:bf 00:fb:88:39:71:73:b5:7d:c1:17:c5:a3:17:9c:a0:48
ae:c2:7b:b7:c8:c8:7f:07:56:ae:a9:72:ea:a9:d7:fe af:97:14:92:2e:9b:ff:fb:1b:16:7b:d6:d1:54:54:3e
98:0b:b7:72:27:5d:1c:65:4c:8f:d1:bb:c3:97:e4:6a 49:be:6a:89:3a:44:ef:13:33:6b:ca:84:02:67:6d:65
da:e3:98:c2:f2:12:bc:94:d2:c6:9a:c9:ae:f5:c3:eb 16
88:34:e7:59:ec:fb:5f:a0:1b:11:0d:0b:7f:46:3a:a2 Y:
4b:9a:ae:08:60:15:df:3a:14:49:3e:30:0b:03:25:12 00:a9:8e:fd:01:17:a6:b7:2c:53:04:e4:d0:99:01:ce
29:d2:82:5c:35:90:eb:0c:3f:db:b8:2c:d6:29:58:74 f2:50:43:43:00:66:50:e9:7d:95:c9:0d:55:54:14:93
21:f3:6b:08:d0:65:7c:ed:6e:71:0c:65:36:82:1b:97 7f:63:b8:b7:c1:a5:d9:e4:b9:57:8b:93:96:78:5c:cd
fe:11:48:4c:af:67:28:da:55:09:67:08:47:ed:d3:c5 b0
f1:3c:95:6a:3e:49:36:45:35:f6:cd:38:f7:ef:8c:74
5a:f3:3e:42:13:d5:38:53:11:0c:2c:b0:8d:b4:8b:3c
49:8b:2a:0e:b2:ce:f7:d1:8a:f3:bc:f3:99:e9:99:00
50:48:6b:1b:0b:cc:e8:73:a3:bc:f2:76:98:ab:bc:35
22:21:81:53:8b:58:e7:97:3a:f5:05:37:e4:13:5f:1f
c7:3f:01:59:f8:b6:92:d6:71:95:68:5e:21:6f:5b:de
7f:8d:99:d8:57:6d:7e:72:d4:d1:89:9f:f0:5f:2d:9b
66:a7:ac:c4:8b:09:c8:57:96:73:63:f5:d7:57:4c:fe
81:78:dc:8f:fb:ae:67:ca:bf:31:7d:49:b2:93:5d:e7
fd:60:46:38:9a:cf:5c:ea:7d:76:3e:d8:b2:c0:6b:89
67:f0:f5:e2:69:07:03:8b:35:59:08:cf:0d:74:b3:b5
5e:bd:cf:3e:2f:ba:16:88:3a:d1:b8:0c:bc:bc:d1:9c
0c:b0:be:9a:76:5f:11:bc:8c:1a:7d:a6:8a:db:d8:6b
d6:c4:fb:7a:9e:7b:e6:2a:e6:fd:c7:f2:8d:33:5f:76
19
Exponent (bits 24):
01:00:01
Public Key ID: Public Key ID:
sha1:493baecacb125e63db1015a2882c1e4e32d7ce90 sha1:34ffccbf6c5e5904d8534af3da79f201fddc733d
sha256:21e80b5fde55ae167d578fa745a0c339acdb86821e153ab1e7d290f3014d405d sha256:ee79e8b241a7e7290fc42b1c42c777b4f61dd955af9a36790daeb237884b8816
Public Key PIN: Public Key PIN:
pin-sha256:IegLX95VrhZ9V4+nRaDDOazbhoIeFTqx59KQ8wFNQF0= pin-sha256:7nnoskGn5ykPxCscQsd3tPYd2VWvmjZ5Da6yN4hLiBY=
-----BEGIN PUBLIC KEY----- -----BEGIN PUBLIC KEY-----
MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0bSf+X8LUhdRZODoBtJV MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+4g5cXO1fcEXxaMXnKBIr5cUki6b//sb
zr6oOx/XXI4iRhsDYOfsv67Ce7fIyH8HVq6pcuqp1/6YC7dyJ10cZUyP0bvDl+Rq FnvW0VRUPkm+aok6RO8TM2vKhAJnbWUWqY79ARemtyxTBOTQmQHO8lBDQwBmUOl9
2uOYwvISvJTSxprJrvXD64g051ns+1+gGxENC39GOqJLmq4IYBXfOhRJPjALAyUS lckNVVQUk39juLfBpdnkuVeLk5Z4XM2w
KdKCXDWQ6ww/27gs1ilYdCHzawjQZXztbnEMZTaCG5f+EUhMr2co2lUJZwhH7dPF
8TyVaj5JNkU19s049++MdFrzPkIT1ThTEQwssI20izxJiyoOss730YrzvPOZ6ZkA
UEhrGwvM6HOjvPJ2mKu8NSIhgVOLWOeXOvUFN+QTXx/HPwFZ+LaS1nGVaF4hb1ve
f42Z2FdtfnLU0Ymf8F8tm2anrMSLCchXlnNj9ddXTP6BeNyP+65nyr8xfUmyk13n
/WBGOJrPXOp9dj7YssBriWfw9eJpBwOLNVkIzw10s7Vevc8+L7oWiDrRuAy8vNGc
DLC+mnZfEbyMGn2mitvYa9bE+3qee+Yq5v3H8o0zX3YZAgMBAAE=
-----END PUBLIC KEY----- -----END PUBLIC KEY-----

View File

@ -1,27 +1,16 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIEoTCCAwmgAwIBAgIUR77KX9aiTmmZQ1XeLrCVOqDKO9kwDQYJKoZIhvcNAQEN MIICdTCCAfygAwIBAgIUcrQcpa5JXvNxkPgRtiMk6atyQJ4wCgYIKoZIzj0EAwQw
BQAwUDEsMCoGA1UEAxMjbGlnaHR0cGQyIHRlc3Qgc3VpdGUgSW50ZXJtZWRpYXRl UDEsMCoGA1UEAxMjbGlnaHR0cGQyIHRlc3Qgc3VpdGUgSW50ZXJtZWRpYXRlIDEx
IDExIDAeBgNVBAsTF2xpZ2h0dHBkMiB0ZXN0IHN1aXRlIENBMB4XDTI0MTIyNTIy IDAeBgNVBAsTF2xpZ2h0dHBkMiB0ZXN0IHN1aXRlIENBMB4XDTI1MDEwMTEzMzIy
NTIzMVoXDTM0MTIyMzIyNTIzMVowNjESMBAGA1UEAxMJdGVzdDEuc3NsMSAwHgYD NloXDTM0MTIzMDEzMzIyNlowNjESMBAGA1UEAxMJdGVzdDEuc3NsMSAwHgYDVQQL
VQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTCCAaIwDQYJKoZIhvcNAQEBBQAD ExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IA
ggGPADCCAYoCggGBANG0n/l/C1IXUWTg6AbSVc6+qDsf11yOIkYbA2Dn7L+uwnu3 BPuIOXFztX3BF8WjF5ygSK+XFJIum//7GxZ71tFUVD5JvmqJOkTvEzNryoQCZ21l
yMh/B1auqXLqqdf+mAu3ciddHGVMj9G7w5fkatrjmMLyEryU0saaya71w+uINOdZ FqmO/QEXprcsUwTk0JkBzvJQQ0MAZlDpfZXJDVVUFJN/Y7i3waXZ5LlXi5OWeFzN
7PtfoBsRDQt/RjqiS5quCGAV3zoUST4wCwMlEinSglw1kOsMP9u4LNYpWHQh82sI sKOBsDCBrTAMBgNVHRMBAf8EAjAAMDgGA1UdEQQxMC+CDnRlc3QxLnNzbC50ZXN0
0GV87W5xDGU2ghuX/hFITK9nKNpVCWcIR+3TxfE8lWo+STZFNfbNOPfvjHRa8z5C gg4qLm9wZW5zc2wudGVzdIINKi5nbnV0bHMudGVzdDATBgNVHSUEDDAKBggrBgEF
E9U4UxEMLLCNtIs8SYsqDrLO99GK87zzmemZAFBIaxsLzOhzo7zydpirvDUiIYFT BQcDATAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFDT/zL9sXlkE2FNK89p58gH9
i1jnlzr1BTfkE18fxz8BWfi2ktZxlWheIW9b3n+NmdhXbX5y1NGJn/BfLZtmp6zE 3HM9MB8GA1UdIwQYMBaAFIdYZEGTpLS+h8WsSGr4m/7tnnetMAoGCCqGSM49BAME
iwnIV5ZzY/XXV0z+gXjcj/uuZ8q/MX1JspNd5/1gRjiaz1zqfXY+2LLAa4ln8PXi A2cAMGQCMECcU3y8OD+uImStj6IRi7iZPp3bEPdyN2zJOnxwG3kbxguGEZTPZoMe
aQcDizVZCM8NdLO1Xr3PPi+6Fog60bgMvLzRnAywvpp2XxG8jBp9porb2GvWxPt6 DMsLdiQSAwIwNc60UE7OKhJJaiNgPnuMybTNvEyksakAP2LfFDpK6/XQyBOnP91J
nnvmKub9x/KNM192GQIDAQABo4GMMIGJMAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0w UZM4P74V6PwR
C4IJdGVzdDEuc3NsMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA4GA1UdDwEB/wQEAwIF
oDAdBgNVHQ4EFgQUSTuuyssSXmPbEBWiiCweTjLXzpAwHwYDVR0jBBgwFoAUO0dF
wXCG+RvIO08NsA8rtlkv8dUwDQYJKoZIhvcNAQENBQADggGBAJBVHp1q0ePKRkuB
FPcnGYh5gV6GFnWSjbZ+CorCPEwE48eNaPrCcvcxSKfFAt1enNwmvk2Cgs5eGe4a
P8qcUw4DOf2y3PJ7c3J9TLJVi4KzAH75xTcU2DFdC2nyGCo8jB5Y+k8HmNxYgi/W
C2opib9L7/v2PbAwdAz4HzCNpdLpl+7a2afTQKn9VioHxDIEghaoVUNOpmXbOStx
OmcjqGaDcHqcucLhl1d5+IRtctOJKL6AcccZl5SIqKmVjYTkivAS1KGZJnlXAugz
dyze1z16tFeuUICFdPV2cx816Arbnw1DN4Bc66zWhPIorqAJAhYcsS/5i5jCCppa
YM8xFaawQ/e/ZTLon5tolCd31/YB/SMFmTgnRbJeTEuUcuDSO4VWdaddCQQw4CPt
3H/rTf3yrGk/xH4QbTzi+NNmgOR9IT7oeasH4OiEa4ARDGekMyf82q3WRBCTe9fv
z2G6v74Rpb4w/ea7E1hRxCW5W+YPLMgv//GV1JoxlL21l1ldRw==
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,236 +1,66 @@
Public Key Info: Public Key Info:
Public Key Algorithm: RSA Public Key Algorithm: EC/ECDSA
Key Security Level: High (3072 bits) Key Security Level: Ultra (384 bits)
modulus: curve: SECP384R1
00:d1:b4:9f:f9:7f:0b:52:17:51:64:e0:e8:06:d2:55 private key:
ce:be:a8:3b:1f:d7:5c:8e:22:46:1b:03:60:e7:ec:bf 00:c9:a2:25:88:02:2c:62:f6:11:76:bd:b1:bf:ff:1c
ae:c2:7b:b7:c8:c8:7f:07:56:ae:a9:72:ea:a9:d7:fe b8:19:5e:49:a3:df:72:d9:d0:2a:83:cc:b0:90:5e:13
98:0b:b7:72:27:5d:1c:65:4c:8f:d1:bb:c3:97:e4:6a f2:29:59:b0:66:07:32:dd:a1:67:12:8d:91:84:9f:64
da:e3:98:c2:f2:12:bc:94:d2:c6:9a:c9:ae:f5:c3:eb ca:
88:34:e7:59:ec:fb:5f:a0:1b:11:0d:0b:7f:46:3a:a2
4b:9a:ae:08:60:15:df:3a:14:49:3e:30:0b:03:25:12
29:d2:82:5c:35:90:eb:0c:3f:db:b8:2c:d6:29:58:74
21:f3:6b:08:d0:65:7c:ed:6e:71:0c:65:36:82:1b:97
fe:11:48:4c:af:67:28:da:55:09:67:08:47:ed:d3:c5
f1:3c:95:6a:3e:49:36:45:35:f6:cd:38:f7:ef:8c:74
5a:f3:3e:42:13:d5:38:53:11:0c:2c:b0:8d:b4:8b:3c
49:8b:2a:0e:b2:ce:f7:d1:8a:f3:bc:f3:99:e9:99:00
50:48:6b:1b:0b:cc:e8:73:a3:bc:f2:76:98:ab:bc:35
22:21:81:53:8b:58:e7:97:3a:f5:05:37:e4:13:5f:1f
c7:3f:01:59:f8:b6:92:d6:71:95:68:5e:21:6f:5b:de
7f:8d:99:d8:57:6d:7e:72:d4:d1:89:9f:f0:5f:2d:9b
66:a7:ac:c4:8b:09:c8:57:96:73:63:f5:d7:57:4c:fe
81:78:dc:8f:fb:ae:67:ca:bf:31:7d:49:b2:93:5d:e7
fd:60:46:38:9a:cf:5c:ea:7d:76:3e:d8:b2:c0:6b:89
67:f0:f5:e2:69:07:03:8b:35:59:08:cf:0d:74:b3:b5
5e:bd:cf:3e:2f:ba:16:88:3a:d1:b8:0c:bc:bc:d1:9c
0c:b0:be:9a:76:5f:11:bc:8c:1a:7d:a6:8a:db:d8:6b
d6:c4:fb:7a:9e:7b:e6:2a:e6:fd:c7:f2:8d:33:5f:76
19:
public exponent: x:
01:00:01: 00:fb:88:39:71:73:b5:7d:c1:17:c5:a3:17:9c:a0:48
af:97:14:92:2e:9b:ff:fb:1b:16:7b:d6:d1:54:54:3e
49:be:6a:89:3a:44:ef:13:33:6b:ca:84:02:67:6d:65
16:
private exponent: y:
16:a7:94:c0:b7:60:d9:b5:7b:2d:92:be:7e:3e:2a:d6 00:a9:8e:fd:01:17:a6:b7:2c:53:04:e4:d0:99:01:ce
f2:f1:e9:b1:3e:ea:d8:d0:0b:12:d0:02:a0:0b:8b:89 f2:50:43:43:00:66:50:e9:7d:95:c9:0d:55:54:14:93
ad:a8:ff:e9:c8:ff:30:23:c5:2a:b9:27:70:c1:cc:d7 7f:63:b8:b7:c1:a5:d9:e4:b9:57:8b:93:96:78:5c:cd
50:2c:b9:40:57:66:c1:ea:cb:7e:b4:f2:24:6e:a0:bc b0:
94:e9:e3:e5:92:f0:9c:83:48:c1:60:18:6e:a4:83:c5
6b:31:b3:1d:4e:ea:bd:b9:2e:d6:61:ef:95:fe:af:99
cb:54:11:c3:8f:99:56:04:eb:04:b4:db:fb:b2:fd:8b
57:1a:8e:2b:9b:44:49:46:7c:ce:20:c9:e2:1d:94:2e
36:c5:d1:65:f2:10:d4:f5:a1:70:dd:5e:4e:1f:fd:03
8d:8a:69:fe:68:fe:98:d7:a6:f4:62:88:a2:c0:c6:19
91:99:f2:a8:57:f0:6c:f9:af:77:ec:37:9c:c1:67:b0
8b:a6:a6:2c:ce:54:0f:65:40:13:73:df:5b:29:cf:91
50:32:74:7f:35:08:48:f8:d9:0b:b6:7a:f0:16:99:2f
a7:01:f9:14:84:10:65:8b:5e:0b:52:34:ca:09:e6:ba
fc:05:91:e0:2e:55:6a:14:a1:77:84:0a:48:1c:c8:68
27:93:66:f2:a0:54:e9:47:97:5d:4f:58:01:50:b7:84
e6:89:af:49:76:87:58:d9:21:2d:3a:39:1e:61:5d:6a
e4:5f:ef:b2:30:2e:28:b0:de:a2:8d:63:04:cf:61:00
ad:db:15:d1:77:11:97:de:aa:36:b1:0c:76:7d:63:f5
93:b0:81:bf:53:c4:c1:09:4c:1a:8e:27:99:57:db:a0
60:68:fc:67:d7:26:b2:fd:1c:35:53:60:97:50:bb:25
e5:68:93:e3:79:90:45:47:7e:c1:55:ad:aa:84:9d:54
91:33:c1:61:90:33:3a:46:a8:ad:c3:91:75:a8:50:90
5a:b1:a7:65:9c:88:67:05:83:13:96:2d:ef:44:72:81
prime1:
00:f7:da:97:ad:69:3a:7d:5c:52:b0:22:f6:c6:6e:c9
0d:58:a9:bf:aa:3a:de:52:ee:bf:aa:f7:53:f7:8a:cc
e8:e3:c8:12:1d:70:9c:99:81:54:6c:ab:c0:c9:5f:3d
7e:d1:bc:f6:dc:c8:e2:ad:98:6e:f3:45:c7:a2:51:95
51:75:1e:14:ec:ea:2e:0e:4b:5a:51:ad:8b:a4:45:b8
47:26:40:06:af:24:b9:97:e4:d2:6e:75:2f:b9:cc:b7
1a:e6:7c:84:5c:cf:ab:18:0d:49:b9:b0:b0:ee:eb:c9
44:fe:24:f8:b8:74:c3:85:6e:a0:b8:89:e7:4e:a6:41
11:d2:5f:5d:0d:9f:5b:2b:7b:64:22:60:fd:cb:24:6c
48:71:0d:9c:d7:24:42:d2:e0:01:fc:f9:84:36:49:37
97:c9:dd:74:66:9d:51:0c:d7:fa:8a:db:cd:e8:9f:4f
f4:c6:9a:36:d3:33:54:4d:e4:e3:5e:46:07:fe:38:fb
f5:
prime2:
00:d8:99:0e:d3:4c:97:81:d8:5a:e2:05:55:16:61:b5
71:ca:61:9b:5d:0b:a4:89:93:03:fa:d5:2d:1e:b0:a7
f9:80:d0:2e:ff:66:7f:e9:67:0e:f2:05:46:6d:e6:fd
01:8e:b1:7e:5f:10:6a:ad:75:54:90:0b:24:43:52:dc
80:9b:48:5a:4c:82:20:af:ba:91:4f:d5:3c:ca:25:a7
17:57:61:06:19:39:38:a9:2a:90:ec:f7:eb:83:61:68
15:e8:70:b0:a0:6d:d0:1e:00:cc:ab:2e:71:50:c7:f1
7c:ce:ac:7a:9c:71:03:ab:b5:8d:ef:ce:dc:87:7c:35
3c:84:a6:41:a3:97:ba:85:31:73:cc:b3:45:5e:4d:88
7c:63:f3:ea:62:39:20:67:d7:0c:bc:5c:70:ec:d9:ae
77:44:e1:0e:26:43:2b:a0:03:da:f1:7b:37:d7:f7:cc
99:8f:3a:b7:86:df:ed:6e:95:8d:80:30:f2:ee:7b:bf
15:
coefficient:
66:ab:fd:30:7a:54:a9:20:93:56:ac:85:ba:4e:27:60
4c:8b:a4:03:c3:62:d6:9f:66:ed:9b:ed:3d:47:39:49
d4:0c:f2:65:57:ca:96:ef:26:3a:38:64:f4:e1:36:5f
4c:ba:23:8a:d5:68:5e:63:6f:0a:a9:72:d3:0e:72:fd
7a:04:6f:91:9b:40:77:6b:4b:50:2a:e2:53:9f:98:ff
fe:92:dd:4f:e2:2e:ab:e8:40:0f:2e:f3:c1:b7:41:75
16:d4:31:42:d8:0b:31:2d:95:14:a6:19:5c:c4:d4:04
76:9f:70:01:3d:4a:a0:b0:d3:b8:9b:23:df:09:55:3d
5e:aa:d7:06:9e:d6:18:69:d4:54:6e:13:70:6e:87:1e
56:93:c2:99:fb:96:0b:61:46:61:ce:9b:c5:83:2f:dd
c7:cd:5b:02:58:13:7d:5d:10:50:0c:75:62:01:9e:3a
03:49:36:3b:b2:a6:48:a8:64:1b:cb:79:69:26:9d:4c
exp1:
02:bb:03:c4:c3:4e:03:a7:8a:b9:aa:08:f1:f2:b2:80
55:23:b9:9a:d4:7f:32:86:b2:d1:dd:5b:ad:74:78:01
70:d0:f9:72:1d:95:7c:13:72:ac:a7:cf:bd:e8:30:b3
3e:f8:47:f7:f2:b6:9c:96:fb:51:ee:c8:de:3e:eb:d8
33:e4:1a:f2:e9:39:8c:aa:c3:d9:f6:81:7d:53:cf:4d
e9:5b:f7:36:e2:be:b0:af:b2:a9:c8:dc:b7:bd:4b:9f
1e:3e:ec:ee:60:d3:4f:b6:85:c3:67:f0:eb:10:e9:ec
ba:a8:09:9d:6e:9b:e0:d2:71:2e:d7:46:17:15:b9:cd
ca:75:86:7e:e9:ec:85:34:1c:cc:4c:29:3f:9d:ad:1b
b7:33:21:31:35:93:0e:e3:ac:e1:ee:95:c8:4b:52:33
77:e3:da:ae:6e:b9:3f:dc:f9:43:a2:5c:48:5d:c8:f1
b7:66:67:88:38:1e:8b:a5:23:e4:1b:fd:66:8d:96:29
exp2:
2e:2a:c9:a7:2e:2f:29:05:05:b2:21:72:d6:77:73:26
52:fd:e5:10:bb:17:92:1f:5c:fc:cd:0d:75:fa:2f:83
95:fa:49:da:34:6d:d5:41:1b:45:68:ec:6f:26:8a:0d
17:ee:2b:42:76:0c:56:f6:a8:54:9f:9b:56:22:46:4f
bf:49:77:bd:d1:0a:c8:8a:1a:c9:0a:69:8f:a8:e0:e9
af:bd:45:80:80:da:db:eb:ef:c2:22:c1:f7:59:fe:c6
94:a9:d8:6c:09:9c:0f:99:1a:06:ee:ba:46:7e:a7:b1
73:97:fd:f6:74:7c:54:d0:38:f5:c1:80:ed:fc:02:98
e8:a9:4b:5a:64:4f:e4:6d:fb:01:c9:c0:62:6e:62:46
29:43:e7:54:92:5a:9e:e7:8e:96:63:99:ca:52:47:c6
b2:4e:ca:26:4b:b0:f3:c5:7e:98:74:2c:1e:03:7a:7f
cc:b0:b6:47:b0:59:3a:75:f4:18:3b:d6:bc:10:72:55
Public Key PIN: Public Key PIN:
pin-sha256:IegLX95VrhZ9V4+nRaDDOazbhoIeFTqx59KQ8wFNQF0= pin-sha256:7nnoskGn5ykPxCscQsd3tPYd2VWvmjZ5Da6yN4hLiBY=
Public Key ID: Public Key ID:
sha256:21e80b5fde55ae167d578fa745a0c339acdb86821e153ab1e7d290f3014d405d sha256:ee79e8b241a7e7290fc42b1c42c777b4f61dd955af9a36790daeb237884b8816
sha1:493baecacb125e63db1015a2882c1e4e32d7ce90 sha1:34ffccbf6c5e5904d8534af3da79f201fddc733d
-----BEGIN RSA PRIVATE KEY----- -----BEGIN EC PRIVATE KEY-----
MIIG4gIBAAKCAYEA0bSf+X8LUhdRZODoBtJVzr6oOx/XXI4iRhsDYOfsv67Ce7fI MIGlAgEBBDEAyaIliAIsYvYRdr2xv/8cuBleSaPfctnQKoPMsJBeE/IpWbBmBzLd
yH8HVq6pcuqp1/6YC7dyJ10cZUyP0bvDl+Rq2uOYwvISvJTSxprJrvXD64g051ns oWcSjZGEn2TKoAcGBSuBBAAioWQDYgAE+4g5cXO1fcEXxaMXnKBIr5cUki6b//sb
+1+gGxENC39GOqJLmq4IYBXfOhRJPjALAyUSKdKCXDWQ6ww/27gs1ilYdCHzawjQ FnvW0VRUPkm+aok6RO8TM2vKhAJnbWUWqY79ARemtyxTBOTQmQHO8lBDQwBmUOl9
ZXztbnEMZTaCG5f+EUhMr2co2lUJZwhH7dPF8TyVaj5JNkU19s049++MdFrzPkIT lckNVVQUk39juLfBpdnkuVeLk5Z4XM2w
1ThTEQwssI20izxJiyoOss730YrzvPOZ6ZkAUEhrGwvM6HOjvPJ2mKu8NSIhgVOL -----END EC PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIEoTCCAwmgAwIBAgIUR77KX9aiTmmZQ1XeLrCVOqDKO9kwDQYJKoZIhvcNAQEN MIICdTCCAfygAwIBAgIUcrQcpa5JXvNxkPgRtiMk6atyQJ4wCgYIKoZIzj0EAwQw
BQAwUDEsMCoGA1UEAxMjbGlnaHR0cGQyIHRlc3Qgc3VpdGUgSW50ZXJtZWRpYXRl UDEsMCoGA1UEAxMjbGlnaHR0cGQyIHRlc3Qgc3VpdGUgSW50ZXJtZWRpYXRlIDEx
IDExIDAeBgNVBAsTF2xpZ2h0dHBkMiB0ZXN0IHN1aXRlIENBMB4XDTI0MTIyNTIy IDAeBgNVBAsTF2xpZ2h0dHBkMiB0ZXN0IHN1aXRlIENBMB4XDTI1MDEwMTEzMzIy
NTIzMVoXDTM0MTIyMzIyNTIzMVowNjESMBAGA1UEAxMJdGVzdDEuc3NsMSAwHgYD NloXDTM0MTIzMDEzMzIyNlowNjESMBAGA1UEAxMJdGVzdDEuc3NsMSAwHgYDVQQL
VQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTCCAaIwDQYJKoZIhvcNAQEBBQAD ExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IA
ggGPADCCAYoCggGBANG0n/l/C1IXUWTg6AbSVc6+qDsf11yOIkYbA2Dn7L+uwnu3 BPuIOXFztX3BF8WjF5ygSK+XFJIum//7GxZ71tFUVD5JvmqJOkTvEzNryoQCZ21l
yMh/B1auqXLqqdf+mAu3ciddHGVMj9G7w5fkatrjmMLyEryU0saaya71w+uINOdZ FqmO/QEXprcsUwTk0JkBzvJQQ0MAZlDpfZXJDVVUFJN/Y7i3waXZ5LlXi5OWeFzN
7PtfoBsRDQt/RjqiS5quCGAV3zoUST4wCwMlEinSglw1kOsMP9u4LNYpWHQh82sI sKOBsDCBrTAMBgNVHRMBAf8EAjAAMDgGA1UdEQQxMC+CDnRlc3QxLnNzbC50ZXN0
0GV87W5xDGU2ghuX/hFITK9nKNpVCWcIR+3TxfE8lWo+STZFNfbNOPfvjHRa8z5C gg4qLm9wZW5zc2wudGVzdIINKi5nbnV0bHMudGVzdDATBgNVHSUEDDAKBggrBgEF
E9U4UxEMLLCNtIs8SYsqDrLO99GK87zzmemZAFBIaxsLzOhzo7zydpirvDUiIYFT BQcDATAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFDT/zL9sXlkE2FNK89p58gH9
i1jnlzr1BTfkE18fxz8BWfi2ktZxlWheIW9b3n+NmdhXbX5y1NGJn/BfLZtmp6zE 3HM9MB8GA1UdIwQYMBaAFIdYZEGTpLS+h8WsSGr4m/7tnnetMAoGCCqGSM49BAME
iwnIV5ZzY/XXV0z+gXjcj/uuZ8q/MX1JspNd5/1gRjiaz1zqfXY+2LLAa4ln8PXi A2cAMGQCMECcU3y8OD+uImStj6IRi7iZPp3bEPdyN2zJOnxwG3kbxguGEZTPZoMe
aQcDizVZCM8NdLO1Xr3PPi+6Fog60bgMvLzRnAywvpp2XxG8jBp9porb2GvWxPt6 DMsLdiQSAwIwNc60UE7OKhJJaiNgPnuMybTNvEyksakAP2LfFDpK6/XQyBOnP91J
nnvmKub9x/KNM192GQIDAQABo4GMMIGJMAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0w UZM4P74V6PwR
C4IJdGVzdDEuc3NsMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA4GA1UdDwEB/wQEAwIF
oDAdBgNVHQ4EFgQUSTuuyssSXmPbEBWiiCweTjLXzpAwHwYDVR0jBBgwFoAUO0dF
wXCG+RvIO08NsA8rtlkv8dUwDQYJKoZIhvcNAQENBQADggGBAJBVHp1q0ePKRkuB
FPcnGYh5gV6GFnWSjbZ+CorCPEwE48eNaPrCcvcxSKfFAt1enNwmvk2Cgs5eGe4a
P8qcUw4DOf2y3PJ7c3J9TLJVi4KzAH75xTcU2DFdC2nyGCo8jB5Y+k8HmNxYgi/W
C2opib9L7/v2PbAwdAz4HzCNpdLpl+7a2afTQKn9VioHxDIEghaoVUNOpmXbOStx
OmcjqGaDcHqcucLhl1d5+IRtctOJKL6AcccZl5SIqKmVjYTkivAS1KGZJnlXAugz
dyze1z16tFeuUICFdPV2cx816Arbnw1DN4Bc66zWhPIorqAJAhYcsS/5i5jCCppa
YM8xFaawQ/e/ZTLon5tolCd31/YB/SMFmTgnRbJeTEuUcuDSO4VWdaddCQQw4CPt
3H/rTf3yrGk/xH4QbTzi+NNmgOR9IT7oeasH4OiEa4ARDGekMyf82q3WRBCTe9fv
z2G6v74Rpb4w/ea7E1hRxCW5W+YPLMgv//GV1JoxlL21l1ldRw==
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIEjDCCAvSgAwIBAgIUR8LOiig3v6yY4ZTxxwwg3LIUqMswDQYJKoZIhvcNAQEN MIICPDCCAcOgAwIBAgIURcjH78CmuAoNZVwLZka0+BmM17wwCgYIKoZIzj0EAwQw
BQAwSzEnMCUGA1UEAxMebGlnaHR0cGQyIHRlc3Qgc3VpdGUgQXV0aG9yaXR5MSAw SzEnMCUGA1UEAxMebGlnaHR0cGQyIHRlc3Qgc3VpdGUgQXV0aG9yaXR5MSAwHgYD
HgYDVQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTAeFw0yNDEyMjUyMjUyMzFa VQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTAeFw0yNTAxMDExMzMyMjZaFw0z
Fw0zNDEyMjMyMjUyMzFaMFAxLDAqBgNVBAMTI2xpZ2h0dHBkMiB0ZXN0IHN1aXRl NDEyMzAxMzMyMjZaMFAxLDAqBgNVBAMTI2xpZ2h0dHBkMiB0ZXN0IHN1aXRlIElu
IEludGVybWVkaWF0ZSAxMSAwHgYDVQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBD dGVybWVkaWF0ZSAxMSAwHgYDVQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTB2
QTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBANR6yGaTgbwvTxUxtnh4 MBAGByqGSM49AgEGBSuBBAAiA2IABGAMLbh3AitDqsKwtO3b1qOwve2RzGWGs7z8
7r8uUj1+FGY+yDr6PN7QlMkdO6maHy5JgDs/Qg2dY5wE/CoF4bFnmdglioInKeYX qsi4Nye9+r9l6VQTnK0TUxrr/WdYOLdNmeMVtMl3tXb+m6XKnBVH442q8pipYbM7
bNj5i3GBrNfHnsoBRMjKVTBIRptytfTXm3JK7YxQ9LzjpOkHuyswhapT0PL3W7kc xSRLTuPDRSpKoJqZTTJcoLC/uhpLu6NjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
qaFjiThch1Exj7gOWswZxL5voH39MJXzhjQuqSknjxDHjNbiJB07q/vz7XVA9BSq HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFIdYZEGTpLS+h8WsSGr4m/7tnnetMB8GA1Ud
Qqr2itBQAv0kFekGL9ZWDlbd0SVqAMKVof5y6eZcOvfqZ/1xAPfoAKRcIT1qrs73 IwQYMBaAFMEztottTkpfEMdgJyKaXwKTAIJrMAoGCCqGSM49BAMEA2cAMGQCMDUJ
78ycJcarUgy1kSg9KhVPn6uetDja6J7K4MNqBFKqBJR0b5409rJ+XoJ+b8lX5dns y41eYkjLnj1x9T1xvy4LPLjhQE4ZdpJ2BwNNnn/+lHgfZtxf8thQtoXbx9uHMgIw
IobL3QfoV+z6auxv80+aIGYQ7XWwfIG7qX8WNrFyMHS8coqQcKdH2ivL+NYK/+uB H8cWKviP+rrBLUW4JdnSvv+8voRJYpNswi+EJoee53hShIWsETixdwGM1hRGQtdB
ZP+cif0cukoxOPQ5wRbbo6QeYLE8lMJSqkdIRHwXQnqHrDIOJWNkpOfTx37YyDCf
vz0H1R10j6JYter8R9GPhgaXMkH1GHihe46/W0QpfxPPpwIDAQABo2MwYTAPBgNV
HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUO0dFwXCG+RvI
O08NsA8rtlkv8dUwHwYDVR0jBBgwFoAUeCorT1z8K+qFb3++SNJRuXcNOsIwDQYJ
KoZIhvcNAQENBQADggGBAG+LHFmCflCOWmWN4VOgi5pVoRNyV3r1hHZL0drmonsw
5h8VOdj6fOj23nzh2b7SpX9hLTcukPRMSt0HIQEcC9YTMB4LooNl9FJsoMBTmW1Z
CiiFapxwYEMOhrDP5KNo3TA6eB5GsUc1CfnJ3/2loivQo/2jMHoP2LcCUjSG0tMS
+WAHSzdlGGVDEh7WQMs7be3lAQev1YBrvmSY+HyP3EZmk1i0D0ZZ9MPcW3C/9Qvr
x5r7lwBq7rIkMjRMKg7XK36eCMs/Xb3crOCR0Tg6LzUm2MAj4m8RVDoSN31FCAFe
ZUvxaj8goU4GquCq+RmxXfL+DQT1UapwHmvsnhTPC9w5y1+4YK8Aq28FIquGkPbE
zIG+mpzgJmpt8GHHiGQjpCo1XHE81m8g/DumvuuAezISIDYIBBvW2Kz8O2xVf8l1
Cs3XBbjD3zx3G8KHZdlSgnNIwDme6r1VUZP/u0YHMnIhl6Bv/M4KiRO5rAYIjoex
Ze0HkL+w6EPzNiJ6DUL9VA==
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,6 +1,8 @@
dn = "OU=lighttpd2 test suite CA,CN=test1.ssl" dn = "OU=lighttpd2 test suite CA,CN=test1.ssl"
dns_name = "test1.ssl" dns_name = "test1.ssl.test"
dns_name = "*.openssl.test"
dns_name = "*.gnutls.test"
expiration_days = 3650 expiration_days = 3650

View File

@ -1,27 +1,16 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIEoTCCAwmgAwIBAgIUFB+bPxw9ONzNYmESaCnnLIMelUswDQYJKoZIhvcNAQEN MIICdjCCAfygAwIBAgIUSthFkk2qsTj4RNfm/uyiQpsDdzAwCgYIKoZIzj0EAwQw
BQAwUDEsMCoGA1UEAxMjbGlnaHR0cGQyIHRlc3Qgc3VpdGUgSW50ZXJtZWRpYXRl UDEsMCoGA1UEAxMjbGlnaHR0cGQyIHRlc3Qgc3VpdGUgSW50ZXJtZWRpYXRlIDEx
IDExIDAeBgNVBAsTF2xpZ2h0dHBkMiB0ZXN0IHN1aXRlIENBMB4XDTI0MTIyNTIy IDAeBgNVBAsTF2xpZ2h0dHBkMiB0ZXN0IHN1aXRlIENBMB4XDTI1MDEwMTEzMzIy
NTIzMVoXDTM0MTIyMzIyNTIzMVowNjESMBAGA1UEAxMJdGVzdDIuc3NsMSAwHgYD NloXDTM0MTIzMDEzMzIyNlowNjESMBAGA1UEAxMJdGVzdDIuc3NsMSAwHgYDVQQL
VQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTCCAaIwDQYJKoZIhvcNAQEBBQAD ExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IA
ggGPADCCAYoCggGBANG0n/l/C1IXUWTg6AbSVc6+qDsf11yOIkYbA2Dn7L+uwnu3 BPuIOXFztX3BF8WjF5ygSK+XFJIum//7GxZ71tFUVD5JvmqJOkTvEzNryoQCZ21l
yMh/B1auqXLqqdf+mAu3ciddHGVMj9G7w5fkatrjmMLyEryU0saaya71w+uINOdZ FqmO/QEXprcsUwTk0JkBzvJQQ0MAZlDpfZXJDVVUFJN/Y7i3waXZ5LlXi5OWeFzN
7PtfoBsRDQt/RjqiS5quCGAV3zoUST4wCwMlEinSglw1kOsMP9u4LNYpWHQh82sI sKOBsDCBrTAMBgNVHRMBAf8EAjAAMDgGA1UdEQQxMC+CDnRlc3QyLnNzbC50ZXN0
0GV87W5xDGU2ghuX/hFITK9nKNpVCWcIR+3TxfE8lWo+STZFNfbNOPfvjHRa8z5C gg4qLm9wZW5zc2wudGVzdIINKi5nbnV0bHMudGVzdDATBgNVHSUEDDAKBggrBgEF
E9U4UxEMLLCNtIs8SYsqDrLO99GK87zzmemZAFBIaxsLzOhzo7zydpirvDUiIYFT BQcDATAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFDT/zL9sXlkE2FNK89p58gH9
i1jnlzr1BTfkE18fxz8BWfi2ktZxlWheIW9b3n+NmdhXbX5y1NGJn/BfLZtmp6zE 3HM9MB8GA1UdIwQYMBaAFIdYZEGTpLS+h8WsSGr4m/7tnnetMAoGCCqGSM49BAME
iwnIV5ZzY/XXV0z+gXjcj/uuZ8q/MX1JspNd5/1gRjiaz1zqfXY+2LLAa4ln8PXi A2gAMGUCMQDTOUcupCV7GYVaet4uIql6Qgbb5Y7sF8fQ4z9B6nBCde+u54HaijSd
aQcDizVZCM8NdLO1Xr3PPi+6Fog60bgMvLzRnAywvpp2XxG8jBp9porb2GvWxPt6 X9vzCKY5UqoCMDzkFiNc0AFrMHvaKUK+7mA2/8P+qiCI/de/UA/Ke7PzVWmLEDEJ
nnvmKub9x/KNM192GQIDAQABo4GMMIGJMAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0w daygZ2t/xp12vw==
C4IJdGVzdDIuc3NsMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA4GA1UdDwEB/wQEAwIF
oDAdBgNVHQ4EFgQUSTuuyssSXmPbEBWiiCweTjLXzpAwHwYDVR0jBBgwFoAUO0dF
wXCG+RvIO08NsA8rtlkv8dUwDQYJKoZIhvcNAQENBQADggGBAL1qLvAqOMWJUSFa
MGS+jqBqAFI1T+GSom9lqXF+Oqdcunjush3yso9QfxKPLo8hhh0eCtFJCHeJIs9D
FdPVXOncdszaYJN4YdDGelsZGVZNcAoyZpRafHu2p7gCgN5TFHVD3dhEXlddBiVx
AoOavM6VkKsHB1II1/Tqj02boSVtxH1gT6cHrt1VcYdJ2zUOkFxnFIsIUaF0VXOt
B5XPJYwKoKLZsmPhgCLff53pTzKMLJh/mLlnXKI7Qh6FD5Q5PO7bAMAZsQfCkpl/
LLV5IjwQh5RkhW7eMJJO2SfvTJNVvB/zlQm+yDTZd/IXuTyb4GMYwZT2zcO2Du89
6Wpkvngi9DnNEhF3lbCm9Y1ekZpb+9wyL3IUWIs7uMIbLxzM+4RALmrNCG3k+vvC
OI6j5lZOr/JdAsYCzcC29X2Q6o3IacadBGuUQKoc/Nv0VIeqPsT8yj1dYclgL+Y3
xr0L0zaCkNkSeFcFKHb2bfl1gLrbPSNmLtPkqy8s6ruvZcGw8Q==
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,236 +1,66 @@
Public Key Info: Public Key Info:
Public Key Algorithm: RSA Public Key Algorithm: EC/ECDSA
Key Security Level: High (3072 bits) Key Security Level: Ultra (384 bits)
modulus: curve: SECP384R1
00:d1:b4:9f:f9:7f:0b:52:17:51:64:e0:e8:06:d2:55 private key:
ce:be:a8:3b:1f:d7:5c:8e:22:46:1b:03:60:e7:ec:bf 00:c9:a2:25:88:02:2c:62:f6:11:76:bd:b1:bf:ff:1c
ae:c2:7b:b7:c8:c8:7f:07:56:ae:a9:72:ea:a9:d7:fe b8:19:5e:49:a3:df:72:d9:d0:2a:83:cc:b0:90:5e:13
98:0b:b7:72:27:5d:1c:65:4c:8f:d1:bb:c3:97:e4:6a f2:29:59:b0:66:07:32:dd:a1:67:12:8d:91:84:9f:64
da:e3:98:c2:f2:12:bc:94:d2:c6:9a:c9:ae:f5:c3:eb ca:
88:34:e7:59:ec:fb:5f:a0:1b:11:0d:0b:7f:46:3a:a2
4b:9a:ae:08:60:15:df:3a:14:49:3e:30:0b:03:25:12
29:d2:82:5c:35:90:eb:0c:3f:db:b8:2c:d6:29:58:74
21:f3:6b:08:d0:65:7c:ed:6e:71:0c:65:36:82:1b:97
fe:11:48:4c:af:67:28:da:55:09:67:08:47:ed:d3:c5
f1:3c:95:6a:3e:49:36:45:35:f6:cd:38:f7:ef:8c:74
5a:f3:3e:42:13:d5:38:53:11:0c:2c:b0:8d:b4:8b:3c
49:8b:2a:0e:b2:ce:f7:d1:8a:f3:bc:f3:99:e9:99:00
50:48:6b:1b:0b:cc:e8:73:a3:bc:f2:76:98:ab:bc:35
22:21:81:53:8b:58:e7:97:3a:f5:05:37:e4:13:5f:1f
c7:3f:01:59:f8:b6:92:d6:71:95:68:5e:21:6f:5b:de
7f:8d:99:d8:57:6d:7e:72:d4:d1:89:9f:f0:5f:2d:9b
66:a7:ac:c4:8b:09:c8:57:96:73:63:f5:d7:57:4c:fe
81:78:dc:8f:fb:ae:67:ca:bf:31:7d:49:b2:93:5d:e7
fd:60:46:38:9a:cf:5c:ea:7d:76:3e:d8:b2:c0:6b:89
67:f0:f5:e2:69:07:03:8b:35:59:08:cf:0d:74:b3:b5
5e:bd:cf:3e:2f:ba:16:88:3a:d1:b8:0c:bc:bc:d1:9c
0c:b0:be:9a:76:5f:11:bc:8c:1a:7d:a6:8a:db:d8:6b
d6:c4:fb:7a:9e:7b:e6:2a:e6:fd:c7:f2:8d:33:5f:76
19:
public exponent: x:
01:00:01: 00:fb:88:39:71:73:b5:7d:c1:17:c5:a3:17:9c:a0:48
af:97:14:92:2e:9b:ff:fb:1b:16:7b:d6:d1:54:54:3e
49:be:6a:89:3a:44:ef:13:33:6b:ca:84:02:67:6d:65
16:
private exponent: y:
16:a7:94:c0:b7:60:d9:b5:7b:2d:92:be:7e:3e:2a:d6 00:a9:8e:fd:01:17:a6:b7:2c:53:04:e4:d0:99:01:ce
f2:f1:e9:b1:3e:ea:d8:d0:0b:12:d0:02:a0:0b:8b:89 f2:50:43:43:00:66:50:e9:7d:95:c9:0d:55:54:14:93
ad:a8:ff:e9:c8:ff:30:23:c5:2a:b9:27:70:c1:cc:d7 7f:63:b8:b7:c1:a5:d9:e4:b9:57:8b:93:96:78:5c:cd
50:2c:b9:40:57:66:c1:ea:cb:7e:b4:f2:24:6e:a0:bc b0:
94:e9:e3:e5:92:f0:9c:83:48:c1:60:18:6e:a4:83:c5
6b:31:b3:1d:4e:ea:bd:b9:2e:d6:61:ef:95:fe:af:99
cb:54:11:c3:8f:99:56:04:eb:04:b4:db:fb:b2:fd:8b
57:1a:8e:2b:9b:44:49:46:7c:ce:20:c9:e2:1d:94:2e
36:c5:d1:65:f2:10:d4:f5:a1:70:dd:5e:4e:1f:fd:03
8d:8a:69:fe:68:fe:98:d7:a6:f4:62:88:a2:c0:c6:19
91:99:f2:a8:57:f0:6c:f9:af:77:ec:37:9c:c1:67:b0
8b:a6:a6:2c:ce:54:0f:65:40:13:73:df:5b:29:cf:91
50:32:74:7f:35:08:48:f8:d9:0b:b6:7a:f0:16:99:2f
a7:01:f9:14:84:10:65:8b:5e:0b:52:34:ca:09:e6:ba
fc:05:91:e0:2e:55:6a:14:a1:77:84:0a:48:1c:c8:68
27:93:66:f2:a0:54:e9:47:97:5d:4f:58:01:50:b7:84
e6:89:af:49:76:87:58:d9:21:2d:3a:39:1e:61:5d:6a
e4:5f:ef:b2:30:2e:28:b0:de:a2:8d:63:04:cf:61:00
ad:db:15:d1:77:11:97:de:aa:36:b1:0c:76:7d:63:f5
93:b0:81:bf:53:c4:c1:09:4c:1a:8e:27:99:57:db:a0
60:68:fc:67:d7:26:b2:fd:1c:35:53:60:97:50:bb:25
e5:68:93:e3:79:90:45:47:7e:c1:55:ad:aa:84:9d:54
91:33:c1:61:90:33:3a:46:a8:ad:c3:91:75:a8:50:90
5a:b1:a7:65:9c:88:67:05:83:13:96:2d:ef:44:72:81
prime1:
00:f7:da:97:ad:69:3a:7d:5c:52:b0:22:f6:c6:6e:c9
0d:58:a9:bf:aa:3a:de:52:ee:bf:aa:f7:53:f7:8a:cc
e8:e3:c8:12:1d:70:9c:99:81:54:6c:ab:c0:c9:5f:3d
7e:d1:bc:f6:dc:c8:e2:ad:98:6e:f3:45:c7:a2:51:95
51:75:1e:14:ec:ea:2e:0e:4b:5a:51:ad:8b:a4:45:b8
47:26:40:06:af:24:b9:97:e4:d2:6e:75:2f:b9:cc:b7
1a:e6:7c:84:5c:cf:ab:18:0d:49:b9:b0:b0:ee:eb:c9
44:fe:24:f8:b8:74:c3:85:6e:a0:b8:89:e7:4e:a6:41
11:d2:5f:5d:0d:9f:5b:2b:7b:64:22:60:fd:cb:24:6c
48:71:0d:9c:d7:24:42:d2:e0:01:fc:f9:84:36:49:37
97:c9:dd:74:66:9d:51:0c:d7:fa:8a:db:cd:e8:9f:4f
f4:c6:9a:36:d3:33:54:4d:e4:e3:5e:46:07:fe:38:fb
f5:
prime2:
00:d8:99:0e:d3:4c:97:81:d8:5a:e2:05:55:16:61:b5
71:ca:61:9b:5d:0b:a4:89:93:03:fa:d5:2d:1e:b0:a7
f9:80:d0:2e:ff:66:7f:e9:67:0e:f2:05:46:6d:e6:fd
01:8e:b1:7e:5f:10:6a:ad:75:54:90:0b:24:43:52:dc
80:9b:48:5a:4c:82:20:af:ba:91:4f:d5:3c:ca:25:a7
17:57:61:06:19:39:38:a9:2a:90:ec:f7:eb:83:61:68
15:e8:70:b0:a0:6d:d0:1e:00:cc:ab:2e:71:50:c7:f1
7c:ce:ac:7a:9c:71:03:ab:b5:8d:ef:ce:dc:87:7c:35
3c:84:a6:41:a3:97:ba:85:31:73:cc:b3:45:5e:4d:88
7c:63:f3:ea:62:39:20:67:d7:0c:bc:5c:70:ec:d9:ae
77:44:e1:0e:26:43:2b:a0:03:da:f1:7b:37:d7:f7:cc
99:8f:3a:b7:86:df:ed:6e:95:8d:80:30:f2:ee:7b:bf
15:
coefficient:
66:ab:fd:30:7a:54:a9:20:93:56:ac:85:ba:4e:27:60
4c:8b:a4:03:c3:62:d6:9f:66:ed:9b:ed:3d:47:39:49
d4:0c:f2:65:57:ca:96:ef:26:3a:38:64:f4:e1:36:5f
4c:ba:23:8a:d5:68:5e:63:6f:0a:a9:72:d3:0e:72:fd
7a:04:6f:91:9b:40:77:6b:4b:50:2a:e2:53:9f:98:ff
fe:92:dd:4f:e2:2e:ab:e8:40:0f:2e:f3:c1:b7:41:75
16:d4:31:42:d8:0b:31:2d:95:14:a6:19:5c:c4:d4:04
76:9f:70:01:3d:4a:a0:b0:d3:b8:9b:23:df:09:55:3d
5e:aa:d7:06:9e:d6:18:69:d4:54:6e:13:70:6e:87:1e
56:93:c2:99:fb:96:0b:61:46:61:ce:9b:c5:83:2f:dd
c7:cd:5b:02:58:13:7d:5d:10:50:0c:75:62:01:9e:3a
03:49:36:3b:b2:a6:48:a8:64:1b:cb:79:69:26:9d:4c
exp1:
02:bb:03:c4:c3:4e:03:a7:8a:b9:aa:08:f1:f2:b2:80
55:23:b9:9a:d4:7f:32:86:b2:d1:dd:5b:ad:74:78:01
70:d0:f9:72:1d:95:7c:13:72:ac:a7:cf:bd:e8:30:b3
3e:f8:47:f7:f2:b6:9c:96:fb:51:ee:c8:de:3e:eb:d8
33:e4:1a:f2:e9:39:8c:aa:c3:d9:f6:81:7d:53:cf:4d
e9:5b:f7:36:e2:be:b0:af:b2:a9:c8:dc:b7:bd:4b:9f
1e:3e:ec:ee:60:d3:4f:b6:85:c3:67:f0:eb:10:e9:ec
ba:a8:09:9d:6e:9b:e0:d2:71:2e:d7:46:17:15:b9:cd
ca:75:86:7e:e9:ec:85:34:1c:cc:4c:29:3f:9d:ad:1b
b7:33:21:31:35:93:0e:e3:ac:e1:ee:95:c8:4b:52:33
77:e3:da:ae:6e:b9:3f:dc:f9:43:a2:5c:48:5d:c8:f1
b7:66:67:88:38:1e:8b:a5:23:e4:1b:fd:66:8d:96:29
exp2:
2e:2a:c9:a7:2e:2f:29:05:05:b2:21:72:d6:77:73:26
52:fd:e5:10:bb:17:92:1f:5c:fc:cd:0d:75:fa:2f:83
95:fa:49:da:34:6d:d5:41:1b:45:68:ec:6f:26:8a:0d
17:ee:2b:42:76:0c:56:f6:a8:54:9f:9b:56:22:46:4f
bf:49:77:bd:d1:0a:c8:8a:1a:c9:0a:69:8f:a8:e0:e9
af:bd:45:80:80:da:db:eb:ef:c2:22:c1:f7:59:fe:c6
94:a9:d8:6c:09:9c:0f:99:1a:06:ee:ba:46:7e:a7:b1
73:97:fd:f6:74:7c:54:d0:38:f5:c1:80:ed:fc:02:98
e8:a9:4b:5a:64:4f:e4:6d:fb:01:c9:c0:62:6e:62:46
29:43:e7:54:92:5a:9e:e7:8e:96:63:99:ca:52:47:c6
b2:4e:ca:26:4b:b0:f3:c5:7e:98:74:2c:1e:03:7a:7f
cc:b0:b6:47:b0:59:3a:75:f4:18:3b:d6:bc:10:72:55
Public Key PIN: Public Key PIN:
pin-sha256:IegLX95VrhZ9V4+nRaDDOazbhoIeFTqx59KQ8wFNQF0= pin-sha256:7nnoskGn5ykPxCscQsd3tPYd2VWvmjZ5Da6yN4hLiBY=
Public Key ID: Public Key ID:
sha256:21e80b5fde55ae167d578fa745a0c339acdb86821e153ab1e7d290f3014d405d sha256:ee79e8b241a7e7290fc42b1c42c777b4f61dd955af9a36790daeb237884b8816
sha1:493baecacb125e63db1015a2882c1e4e32d7ce90 sha1:34ffccbf6c5e5904d8534af3da79f201fddc733d
-----BEGIN RSA PRIVATE KEY----- -----BEGIN EC PRIVATE KEY-----
MIIG4gIBAAKCAYEA0bSf+X8LUhdRZODoBtJVzr6oOx/XXI4iRhsDYOfsv67Ce7fI MIGlAgEBBDEAyaIliAIsYvYRdr2xv/8cuBleSaPfctnQKoPMsJBeE/IpWbBmBzLd
yH8HVq6pcuqp1/6YC7dyJ10cZUyP0bvDl+Rq2uOYwvISvJTSxprJrvXD64g051ns oWcSjZGEn2TKoAcGBSuBBAAioWQDYgAE+4g5cXO1fcEXxaMXnKBIr5cUki6b//sb
+1+gGxENC39GOqJLmq4IYBXfOhRJPjALAyUSKdKCXDWQ6ww/27gs1ilYdCHzawjQ FnvW0VRUPkm+aok6RO8TM2vKhAJnbWUWqY79ARemtyxTBOTQmQHO8lBDQwBmUOl9
ZXztbnEMZTaCG5f+EUhMr2co2lUJZwhH7dPF8TyVaj5JNkU19s049++MdFrzPkIT lckNVVQUk39juLfBpdnkuVeLk5Z4XM2w
1ThTEQwssI20izxJiyoOss730YrzvPOZ6ZkAUEhrGwvM6HOjvPJ2mKu8NSIhgVOL -----END EC PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIEoTCCAwmgAwIBAgIUFB+bPxw9ONzNYmESaCnnLIMelUswDQYJKoZIhvcNAQEN MIICdjCCAfygAwIBAgIUSthFkk2qsTj4RNfm/uyiQpsDdzAwCgYIKoZIzj0EAwQw
BQAwUDEsMCoGA1UEAxMjbGlnaHR0cGQyIHRlc3Qgc3VpdGUgSW50ZXJtZWRpYXRl UDEsMCoGA1UEAxMjbGlnaHR0cGQyIHRlc3Qgc3VpdGUgSW50ZXJtZWRpYXRlIDEx
IDExIDAeBgNVBAsTF2xpZ2h0dHBkMiB0ZXN0IHN1aXRlIENBMB4XDTI0MTIyNTIy IDAeBgNVBAsTF2xpZ2h0dHBkMiB0ZXN0IHN1aXRlIENBMB4XDTI1MDEwMTEzMzIy
NTIzMVoXDTM0MTIyMzIyNTIzMVowNjESMBAGA1UEAxMJdGVzdDIuc3NsMSAwHgYD NloXDTM0MTIzMDEzMzIyNlowNjESMBAGA1UEAxMJdGVzdDIuc3NsMSAwHgYDVQQL
VQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTCCAaIwDQYJKoZIhvcNAQEBBQAD ExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IA
ggGPADCCAYoCggGBANG0n/l/C1IXUWTg6AbSVc6+qDsf11yOIkYbA2Dn7L+uwnu3 BPuIOXFztX3BF8WjF5ygSK+XFJIum//7GxZ71tFUVD5JvmqJOkTvEzNryoQCZ21l
yMh/B1auqXLqqdf+mAu3ciddHGVMj9G7w5fkatrjmMLyEryU0saaya71w+uINOdZ FqmO/QEXprcsUwTk0JkBzvJQQ0MAZlDpfZXJDVVUFJN/Y7i3waXZ5LlXi5OWeFzN
7PtfoBsRDQt/RjqiS5quCGAV3zoUST4wCwMlEinSglw1kOsMP9u4LNYpWHQh82sI sKOBsDCBrTAMBgNVHRMBAf8EAjAAMDgGA1UdEQQxMC+CDnRlc3QyLnNzbC50ZXN0
0GV87W5xDGU2ghuX/hFITK9nKNpVCWcIR+3TxfE8lWo+STZFNfbNOPfvjHRa8z5C gg4qLm9wZW5zc2wudGVzdIINKi5nbnV0bHMudGVzdDATBgNVHSUEDDAKBggrBgEF
E9U4UxEMLLCNtIs8SYsqDrLO99GK87zzmemZAFBIaxsLzOhzo7zydpirvDUiIYFT BQcDATAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFDT/zL9sXlkE2FNK89p58gH9
i1jnlzr1BTfkE18fxz8BWfi2ktZxlWheIW9b3n+NmdhXbX5y1NGJn/BfLZtmp6zE 3HM9MB8GA1UdIwQYMBaAFIdYZEGTpLS+h8WsSGr4m/7tnnetMAoGCCqGSM49BAME
iwnIV5ZzY/XXV0z+gXjcj/uuZ8q/MX1JspNd5/1gRjiaz1zqfXY+2LLAa4ln8PXi A2gAMGUCMQDTOUcupCV7GYVaet4uIql6Qgbb5Y7sF8fQ4z9B6nBCde+u54HaijSd
aQcDizVZCM8NdLO1Xr3PPi+6Fog60bgMvLzRnAywvpp2XxG8jBp9porb2GvWxPt6 X9vzCKY5UqoCMDzkFiNc0AFrMHvaKUK+7mA2/8P+qiCI/de/UA/Ke7PzVWmLEDEJ
nnvmKub9x/KNM192GQIDAQABo4GMMIGJMAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0w daygZ2t/xp12vw==
C4IJdGVzdDIuc3NsMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA4GA1UdDwEB/wQEAwIF
oDAdBgNVHQ4EFgQUSTuuyssSXmPbEBWiiCweTjLXzpAwHwYDVR0jBBgwFoAUO0dF
wXCG+RvIO08NsA8rtlkv8dUwDQYJKoZIhvcNAQENBQADggGBAL1qLvAqOMWJUSFa
MGS+jqBqAFI1T+GSom9lqXF+Oqdcunjush3yso9QfxKPLo8hhh0eCtFJCHeJIs9D
FdPVXOncdszaYJN4YdDGelsZGVZNcAoyZpRafHu2p7gCgN5TFHVD3dhEXlddBiVx
AoOavM6VkKsHB1II1/Tqj02boSVtxH1gT6cHrt1VcYdJ2zUOkFxnFIsIUaF0VXOt
B5XPJYwKoKLZsmPhgCLff53pTzKMLJh/mLlnXKI7Qh6FD5Q5PO7bAMAZsQfCkpl/
LLV5IjwQh5RkhW7eMJJO2SfvTJNVvB/zlQm+yDTZd/IXuTyb4GMYwZT2zcO2Du89
6Wpkvngi9DnNEhF3lbCm9Y1ekZpb+9wyL3IUWIs7uMIbLxzM+4RALmrNCG3k+vvC
OI6j5lZOr/JdAsYCzcC29X2Q6o3IacadBGuUQKoc/Nv0VIeqPsT8yj1dYclgL+Y3
xr0L0zaCkNkSeFcFKHb2bfl1gLrbPSNmLtPkqy8s6ruvZcGw8Q==
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIEjDCCAvSgAwIBAgIUR8LOiig3v6yY4ZTxxwwg3LIUqMswDQYJKoZIhvcNAQEN MIICPDCCAcOgAwIBAgIURcjH78CmuAoNZVwLZka0+BmM17wwCgYIKoZIzj0EAwQw
BQAwSzEnMCUGA1UEAxMebGlnaHR0cGQyIHRlc3Qgc3VpdGUgQXV0aG9yaXR5MSAw SzEnMCUGA1UEAxMebGlnaHR0cGQyIHRlc3Qgc3VpdGUgQXV0aG9yaXR5MSAwHgYD
HgYDVQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTAeFw0yNDEyMjUyMjUyMzFa VQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTAeFw0yNTAxMDExMzMyMjZaFw0z
Fw0zNDEyMjMyMjUyMzFaMFAxLDAqBgNVBAMTI2xpZ2h0dHBkMiB0ZXN0IHN1aXRl NDEyMzAxMzMyMjZaMFAxLDAqBgNVBAMTI2xpZ2h0dHBkMiB0ZXN0IHN1aXRlIElu
IEludGVybWVkaWF0ZSAxMSAwHgYDVQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBD dGVybWVkaWF0ZSAxMSAwHgYDVQQLExdsaWdodHRwZDIgdGVzdCBzdWl0ZSBDQTB2
QTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBANR6yGaTgbwvTxUxtnh4 MBAGByqGSM49AgEGBSuBBAAiA2IABGAMLbh3AitDqsKwtO3b1qOwve2RzGWGs7z8
7r8uUj1+FGY+yDr6PN7QlMkdO6maHy5JgDs/Qg2dY5wE/CoF4bFnmdglioInKeYX qsi4Nye9+r9l6VQTnK0TUxrr/WdYOLdNmeMVtMl3tXb+m6XKnBVH442q8pipYbM7
bNj5i3GBrNfHnsoBRMjKVTBIRptytfTXm3JK7YxQ9LzjpOkHuyswhapT0PL3W7kc xSRLTuPDRSpKoJqZTTJcoLC/uhpLu6NjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
qaFjiThch1Exj7gOWswZxL5voH39MJXzhjQuqSknjxDHjNbiJB07q/vz7XVA9BSq HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFIdYZEGTpLS+h8WsSGr4m/7tnnetMB8GA1Ud
Qqr2itBQAv0kFekGL9ZWDlbd0SVqAMKVof5y6eZcOvfqZ/1xAPfoAKRcIT1qrs73 IwQYMBaAFMEztottTkpfEMdgJyKaXwKTAIJrMAoGCCqGSM49BAMEA2cAMGQCMDUJ
78ycJcarUgy1kSg9KhVPn6uetDja6J7K4MNqBFKqBJR0b5409rJ+XoJ+b8lX5dns y41eYkjLnj1x9T1xvy4LPLjhQE4ZdpJ2BwNNnn/+lHgfZtxf8thQtoXbx9uHMgIw
IobL3QfoV+z6auxv80+aIGYQ7XWwfIG7qX8WNrFyMHS8coqQcKdH2ivL+NYK/+uB H8cWKviP+rrBLUW4JdnSvv+8voRJYpNswi+EJoee53hShIWsETixdwGM1hRGQtdB
ZP+cif0cukoxOPQ5wRbbo6QeYLE8lMJSqkdIRHwXQnqHrDIOJWNkpOfTx37YyDCf
vz0H1R10j6JYter8R9GPhgaXMkH1GHihe46/W0QpfxPPpwIDAQABo2MwYTAPBgNV
HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUO0dFwXCG+RvI
O08NsA8rtlkv8dUwHwYDVR0jBBgwFoAUeCorT1z8K+qFb3++SNJRuXcNOsIwDQYJ
KoZIhvcNAQENBQADggGBAG+LHFmCflCOWmWN4VOgi5pVoRNyV3r1hHZL0drmonsw
5h8VOdj6fOj23nzh2b7SpX9hLTcukPRMSt0HIQEcC9YTMB4LooNl9FJsoMBTmW1Z
CiiFapxwYEMOhrDP5KNo3TA6eB5GsUc1CfnJ3/2loivQo/2jMHoP2LcCUjSG0tMS
+WAHSzdlGGVDEh7WQMs7be3lAQev1YBrvmSY+HyP3EZmk1i0D0ZZ9MPcW3C/9Qvr
x5r7lwBq7rIkMjRMKg7XK36eCMs/Xb3crOCR0Tg6LzUm2MAj4m8RVDoSN31FCAFe
ZUvxaj8goU4GquCq+RmxXfL+DQT1UapwHmvsnhTPC9w5y1+4YK8Aq28FIquGkPbE
zIG+mpzgJmpt8GHHiGQjpCo1XHE81m8g/DumvuuAezISIDYIBBvW2Kz8O2xVf8l1
Cs3XBbjD3zx3G8KHZdlSgnNIwDme6r1VUZP/u0YHMnIhl6Bv/M4KiRO5rAYIjoex
Ze0HkL+w6EPzNiJ6DUL9VA==
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,6 +1,8 @@
dn = "OU=lighttpd2 test suite CA,CN=test2.ssl" dn = "OU=lighttpd2 test suite CA,CN=test2.ssl"
dns_name = "test2.ssl" dns_name = "test2.ssl.test"
dns_name = "*.openssl.test"
dns_name = "*.gnutls.test"
expiration_days = 3650 expiration_days = 3650

View File

@ -205,7 +205,7 @@ class TestBase(metaclass=_TestBaseMeta):
# but if there is no custom config we should use the parent vhost. # but if there is no custom config we should use the parent vhost.
self.vhost = parent.vhost self.vhost = parent.vhost
if not self.vhost: if not self.vhost:
self.vhost = TestBase._vhostname(self.name) self.vhost = TestBase._vhostname(self.name) + '.test'
if not self.no_docroot: if not self.no_docroot:
if self.inherit_docroot: if self.inherit_docroot:
assert self._parent, "can't inherit vhostdir without parent" assert self._parent, "can't inherit vhostdir without parent"

View File

@ -5,7 +5,7 @@ from pylt.requests import CurlRequest, RawRequest, TEST_TXT
LUA_SHOW_ENV_INFO = """ LUA_SHOW_ENV_INFO = """
function show_env_info(vr) local function show_env_info(vr)
if vr:handle_direct() then if vr:handle_direct() then
vr.resp.status = 200 vr.resp.status = 200
vr.resp.headers["Content-Type"] = "text/plain" vr.resp.headers["Content-Type"] = "text/plain"

View File

@ -13,19 +13,19 @@ class TestDirlist(CurlRequest):
class TestRedirectDir(CurlRequest): class TestRedirectDir(CurlRequest):
URL = "/foo" URL = "/foo"
EXPECT_RESPONSE_CODE = 301 EXPECT_RESPONSE_CODE = 301
EXPECT_RESPONSE_HEADERS = [("Location", "http://dirlist/foo/")] EXPECT_RESPONSE_HEADERS = [("Location", "http://dirlist.test/foo/")]
class TestRedirectDirWithQuery(CurlRequest): class TestRedirectDirWithQuery(CurlRequest):
URL = "/foo?bar=baz" URL = "/foo?bar=baz"
EXPECT_RESPONSE_CODE = 301 EXPECT_RESPONSE_CODE = 301
EXPECT_RESPONSE_HEADERS = [("Location", "http://dirlist/foo/?bar=baz")] EXPECT_RESPONSE_HEADERS = [("Location", "http://dirlist.test/foo/?bar=baz")]
class TestRedirectDirWithQueryAndSpecialChars(CurlRequest): class TestRedirectDirWithQueryAndSpecialChars(CurlRequest):
URL = "/f%3f%20o?bar=baz" URL = "/f%3f%20o?bar=baz"
EXPECT_RESPONSE_CODE = 301 EXPECT_RESPONSE_CODE = 301
EXPECT_RESPONSE_HEADERS = [("Location", "http://dirlist/f%3f%20o/?bar=baz")] EXPECT_RESPONSE_HEADERS = [("Location", "http://dirlist.test/f%3f%20o/?bar=baz")]
class Test(ModuleTest): class Test(ModuleTest):
@ -35,7 +35,7 @@ dirlist;
""" """
def prepare_test(self) -> None: def prepare_test(self) -> None:
self.prepare_dir("www/vhosts/dirlist/foo") self.prepare_dir("www/vhosts/dirlist.test/foo")
self.prepare_file("www/vhosts/dirlist/foo/test.txt", "abc") self.prepare_file("www/vhosts/dirlist.test/foo/test.txt", "abc")
self.prepare_dir("www/vhosts/dirlist/f? o") self.prepare_dir("www/vhosts/dirlist.test/f? o")
self.prepare_file("www/vhosts/dirlist/f? o/test.txt", "abc") self.prepare_file("www/vhosts/dirlist.test/f? o/test.txt", "abc")

View File

@ -10,7 +10,7 @@ class TestSimpleRequest(CurlRequest):
EXPECT_RESPONSE_BODY = TEST_TXT EXPECT_RESPONSE_BODY = TEST_TXT
EXPECT_RESPONSE_CODE = 200 EXPECT_RESPONSE_CODE = 200
EXPECT_RESPONSE_HEADERS = [("Content-Type", "text/plain; charset=utf-8")] EXPECT_RESPONSE_HEADERS = [("Content-Type", "text/plain; charset=utf-8")]
vhost = "test1.ssl" vhost = "test1.ssl.test"
class TestSNI(CurlRequest): class TestSNI(CurlRequest):
@ -20,4 +20,4 @@ class TestSNI(CurlRequest):
EXPECT_RESPONSE_BODY = TEST_TXT EXPECT_RESPONSE_BODY = TEST_TXT
EXPECT_RESPONSE_CODE = 200 EXPECT_RESPONSE_CODE = 200
EXPECT_RESPONSE_HEADERS = [("Content-Type", "text/plain; charset=utf-8")] EXPECT_RESPONSE_HEADERS = [("Content-Type", "text/plain; charset=utf-8")]
vhost = "test2.ssl" vhost = "test2.ssl.test"

80
tests/pylt/tests/t-lua.py Normal file
View File

@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-
from pylt.base import ModuleTest, TestBase
from pylt.requests import CurlRequest
LUA_STATE_ENV_INFO = """
-- globals should be reset after loading
info = "global info"
local function extract_info(vr)
-- simple globals should be "per handler" (and request)
info = (info or "") .. "handler global"
-- special `REQ` allows request-global state across handlers
REQ.info = (REQ.info or "") .. "request global:" .. vr.env["INFO"]
end
local function show_info(vr)
if vr:handle_direct() then
vr.resp.status = 200
vr.resp.headers["Content-Type"] = "text/plain"
vr.out:add((info or "") .. (REQ.info or ""))
end
end
actions = action.list({extract_info, show_info})
"""
class TestLuaStateInfo1(CurlRequest):
URL = "/?a_simple_query"
EXPECT_RESPONSE_BODY = "request global:a_simple_query"
EXPECT_RESPONSE_CODE = 200
config = """
env.set "INFO" => "%{req.query}";
lua_state_env_info;
"""
class TestLuaStateInfo2(CurlRequest):
URL = "/?b_simple_query"
EXPECT_RESPONSE_BODY = "request global:b_simple_query"
EXPECT_RESPONSE_CODE = 200
config = """
env.set "INFO" => "%{req.query}";
lua_state_env_info;
"""
class TestLuaWorkerStateInfo1(CurlRequest):
URL = "/?a_simple_query"
EXPECT_RESPONSE_BODY = "request global:a_simple_query"
EXPECT_RESPONSE_CODE = 200
config = """
env.set "INFO" => "%{req.query}";
worker_lua_state_env_info;
"""
class TestLuaWorkerStateInfo2(CurlRequest):
URL = "/?b_simple_query"
EXPECT_RESPONSE_BODY = "request global:b_simple_query"
EXPECT_RESPONSE_CODE = 200
config = """
env.set "INFO" => "%{req.query}";
worker_lua_state_env_info;
"""
class Test(ModuleTest):
def prepare_test(self) -> None:
show_env_info_lua = self.prepare_file("lua/lua_state_env_info.lua", LUA_STATE_ENV_INFO)
self.plain_config = f"""
lua_state_env_info = {{
include_lua "{show_env_info_lua}";
}};
worker_lua_state_env_info = {{
lua.handler "{show_env_info_lua}";
}};
"""

View File

@ -6,15 +6,20 @@ from pylt.requests import CurlRequest
LUA_TEST_OPTIONS = """ LUA_TEST_OPTIONS = """
setup["server.tag"]("lighttpd 2.0 with lua") local function settag(tag)
setup["server.tag"](tag)
end
function changetag(tag) local function changetag(tag)
return action["server.tag"](tag) return action["server.tag"](tag)
end end
actions = { actions = {
["lua.changetag"] = changetag ["lua.changetag"] = changetag
} }
setups = {
["lua.settag"] = settag
}
""" """
@ -33,7 +38,10 @@ class Test(ModuleTest):
def prepare_test(self) -> None: def prepare_test(self) -> None:
test_options_lua = self.prepare_file("lua/test_options.lua", LUA_TEST_OPTIONS) test_options_lua = self.prepare_file("lua/test_options.lua", LUA_TEST_OPTIONS)
self.plain_config = f""" self.plain_config = f"""
setup {{ lua.plugin "{test_options_lua}"; }} setup {{
lua.plugin "{test_options_lua}";
lua.settag "lighttpd 2.0 with lua";
}}
""" """
self.config = """ self.config = """
if req.query == "change" { if req.query == "change" {

View File

@ -10,4 +10,4 @@ class TestSimpleRequest(CurlRequest):
EXPECT_RESPONSE_BODY = TEST_TXT EXPECT_RESPONSE_BODY = TEST_TXT
EXPECT_RESPONSE_CODE = 200 EXPECT_RESPONSE_CODE = 200
EXPECT_RESPONSE_HEADERS = [("Content-Type", "text/plain; charset=utf-8")] EXPECT_RESPONSE_HEADERS = [("Content-Type", "text/plain; charset=utf-8")]
vhost = "test1.ssl" vhost = "test1.ssl.test"