summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorSepalani <sepalani@hotmail.fr>2015-06-07 00:49:18 +0200
committerSepalani <sepalani@hotmail.fr>2016-07-01 14:23:11 +0400
commitd3be9d155da6d53e5cd6fc7e2eafe2488abecdd0 (patch)
tree069b2a98b771f67664d74e1809807da36d0c0c27 /Source/Core
parent170d0588a7260069c57bfc3bc99d08975cc0558c (diff)
Fixed: Allowed unknown certificates
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_net_ssl.cpp2
-rw-r--r--Source/Core/Core/IPC_HLE/WII_Socket.cpp22
2 files changed, 22 insertions, 2 deletions
diff --git a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_net_ssl.cpp b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_net_ssl.cpp
index 4a4e9823b3..bfd51243d3 100644
--- a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_net_ssl.cpp
+++ b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_net_ssl.cpp
@@ -174,7 +174,7 @@ IPCCommandResult CWII_IPC_HLE_Device_net_ssl::IOCtlV(u32 _CommandAddress)
mbedtls_ssl_set_session(&ssl->ctx, &ssl->session);
- mbedtls_ssl_conf_authmode(&ssl->config, MBEDTLS_SSL_VERIFY_NONE);
+ mbedtls_ssl_conf_authmode(&ssl->config, MBEDTLS_SSL_VERIFY_REQUIRED);
mbedtls_ssl_conf_renegotiation(&ssl->config, MBEDTLS_SSL_RENEGOTIATION_ENABLED);
ssl->hostname = hostname;
diff --git a/Source/Core/Core/IPC_HLE/WII_Socket.cpp b/Source/Core/Core/IPC_HLE/WII_Socket.cpp
index 229073bbfd..e956168116 100644
--- a/Source/Core/Core/IPC_HLE/WII_Socket.cpp
+++ b/Source/Core/Core/IPC_HLE/WII_Socket.cpp
@@ -312,7 +312,8 @@ void WiiSocket::Update(bool read, bool write, bool except)
{
case IOCTLV_NET_SSL_DOHANDSHAKE:
{
- int ret = mbedtls_ssl_handshake(&CWII_IPC_HLE_Device_net_ssl::_SSL[sslID].ctx);
+ mbedtls_ssl_context* ctx = &CWII_IPC_HLE_Device_net_ssl::_SSL[sslID].ctx;
+ int ret = mbedtls_ssl_handshake(ctx);
switch (ret)
{
case 0:
@@ -328,6 +329,25 @@ void WiiSocket::Update(bool read, bool write, bool except)
if (!nonBlock)
ReturnValue = SSL_ERR_WAGAIN;
break;
+ case MBEDTLS_ERR_X509_CERT_VERIFY_FAILED:
+ {
+ int flags = ctx->session_negotiate->verify_result;
+ if (flags & MBEDTLS_X509_BADCERT_CN_MISMATCH)
+ ret = SSL_ERR_VCOMMONNAME;
+ else if (flags & MBEDTLS_X509_BADCERT_NOT_TRUSTED)
+ ret = SSL_ERR_VROOTCA;
+ else if (flags & MBEDTLS_X509_BADCERT_REVOKED)
+ ret = SSL_ERR_VCHAIN;
+ else if (flags & MBEDTLS_X509_BADCERT_EXPIRED ||
+ flags & MBEDTLS_X509_BADCERT_FUTURE)
+ ret = SSL_ERR_VDATE;
+ else
+ ret = SSL_ERR_FAILED;
+ Memory::Write_U32(ret, BufferIn);
+ if (!nonBlock)
+ ReturnValue = ret;
+ break;
+ }
default:
Memory::Write_U32(SSL_ERR_FAILED, BufferIn);
break;