mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2025-07-10 01:34:58 +03:00
OpenVPN client certificate authentication (Individual Certificate Authentication) (#327)
* Implement OpenVPN certificate authentication, fixes #55 * fixup! Implement OpenVPN certificate authentication, fixes #55
This commit is contained in:
committed by
Moataz Elmasry
parent
863f87fac1
commit
83295bb736
@ -442,7 +442,8 @@ void OvsProcessRecvControlPacket(OPENVPN_SERVER *s, OPENVPN_SESSION *se, OPENVPN
|
||||
// Create an SSL pipe
|
||||
Lock(s->Cedar->lock);
|
||||
{
|
||||
c->SslPipe = NewSslPipe(true, s->Cedar->ServerX, s->Cedar->ServerK, s->Dh);
|
||||
bool cert_verify = true;
|
||||
c->SslPipe = NewSslPipeEx(true, s->Cedar->ServerX, s->Cedar->ServerK, s->Dh, cert_verify, &c->ClientCert);
|
||||
}
|
||||
Unlock(s->Cedar->lock);
|
||||
|
||||
@ -712,6 +713,11 @@ void OvsBeginIPCAsyncConnectionIfEmpty(OPENVPN_SERVER *s, OPENVPN_SESSION *se, O
|
||||
p.BridgeMode = true;
|
||||
}
|
||||
|
||||
if (c->ClientCert.X != NULL)
|
||||
{
|
||||
p.ClientCertificate = c->ClientCert.X;
|
||||
}
|
||||
|
||||
p.IsOpenVPN = true;
|
||||
|
||||
// Calculate the MSS
|
||||
@ -780,6 +786,26 @@ void OvsSetupSessionParameters(OPENVPN_SERVER *s, OPENVPN_SESSION *se, OPENVPN_C
|
||||
|
||||
OvsLog(s, se, c, "LO_OPTION_STR_RECV", data->OptionString);
|
||||
|
||||
if (c->ClientCert.X != NULL)
|
||||
{
|
||||
if (c->ClientCert.X->subject_name != NULL)
|
||||
{
|
||||
OvsLog(s, se, c, "LO_CLIENT_CERT", c->ClientCert.X->subject_name->CommonName);
|
||||
}
|
||||
else
|
||||
{
|
||||
OvsLog(s, se, c, "LO_CLIENT_CERT", "(unknown CN)");
|
||||
}
|
||||
}
|
||||
else if (!c->ClientCert.PreverifyErr)
|
||||
{
|
||||
OvsLog(s, se, c, "LO_CLIENT_NO_CERT");
|
||||
}
|
||||
else
|
||||
{
|
||||
OvsLog(s, se, c, "LO_CLIENT_UNVERIFIED_CERT", c->ClientCert.PreverifyErrMessage);
|
||||
}
|
||||
|
||||
Zero(opt_str, sizeof(opt_str));
|
||||
StrCpy(opt_str, sizeof(opt_str), data->OptionString);
|
||||
if (s->Cedar != NULL && (IsEmptyStr(opt_str) || StartWith(opt_str, "V0 UNDEF") || InStr(opt_str, ",") == false))
|
||||
@ -1359,6 +1385,11 @@ void OvsFreeChannel(OPENVPN_CHANNEL *c)
|
||||
FreeMd(c->MdRecv);
|
||||
FreeMd(c->MdSend);
|
||||
|
||||
if (c->ClientCert.X != NULL)
|
||||
{
|
||||
FreeX(c->ClientCert.X);
|
||||
}
|
||||
|
||||
Free(c);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user