私はLuaSec 0.4のデフォルトのoneshotの例(下記参照)を使用して双方向認証を実装しています。認証は成功しているので、認証局(CA)は、ピアが自分の誰であると認めるかは明らかです。Lua:LuaSecでクライアント認証が成功した後にクライアントの詳細を取得する方法
しかし、ピアが誰であると主張しているのか、私はどのように見ることができますか?例えば。ピアの証明書の組織名を調べるにはどうしたらいいですか?クライアントは現在、CAによってサーバーが認識されていると信頼できるが、クライアントはサーバーが本当に適切なピアであるかどうかを知りません。
もう1つの方法:サーバーは、接続クライアントがCAによって認識されていることを認識しています。しかし、多くのクライアントはCAによって認識されているため、どのクライアントがどのクライアントに接続されているかをサーバーがどのように知ることができますか?
-------- For the sake of completeness
------- server code:
require("socket")
require("ssl")
local params = {
mode = "server",
protocol = "sslv3",
key = "../certs/serverAkey.pem",
certificate = "../certs/serverA.pem",
cafile = "../certs/rootA.pem",
verify = {"peer", "fail_if_no_peer_cert"},
options = {"all", "no_sslv2"},
}
-- SSL context
local ctx = assert(ssl.newcontext(params))
local server = socket.tcp()
server:setoption('reuseaddr', true)
assert(server:bind("127.0.0.1", 8888))
server:listen()
local peer = server:accept()
-- SSL wrapper
peer = assert(ssl.wrap(peer, ctx))
assert(peer:dohandshake())
local fd = peer:getfd()
peer:send("oneshot test\n")
peer:close()
------- client code:
require("socket")
require("ssl")
local params = {
mode = "client",
protocol = "sslv3",
key = "../certs/clientAkey.pem",
certificate = "../certs/clientA.pem",
cafile = "../certs/rootA.pem",
verify = {"peer", "fail_if_no_peer_cert"},
options = {"all", "no_sslv2"},
}
local peer = socket.tcp()
peer:connect("127.0.0.1", 8888)
-- SSL wrapper
peer = assert(ssl.wrap(peer, params))
assert(peer:dohandshake())
print(peer:receive("*l"))
peer:close()