[IOT-2854][IOT-2858] anon ciphersuite disable 25/23025/5
authorNathan Heldt-Sheller <nathan.heldt-sheller@intel.com>
Fri, 27 Oct 2017 04:21:26 +0000 (21:21 -0700)
committerNathan Heldt-Sheller <nathan.heldt-sheller@intel.com>
Sat, 28 Oct 2017 00:55:42 +0000 (00:55 +0000)
Right now the /doxm handler code to disable the anon cipher suite is
not correct, so it's removed in this patch.  Instead, the /cred code disables
the anon suite after calculating PSK.

If there is a request is over secure channel, but requester ID
is Nil UUID, then (in current IoTivity at least) it means that this request
arrived over DTLS established via anon cipher suite.  A successful
connection has taken place, and that's an opportunity to disable the anon cipher
suite so no other anon connections can be made during OTM.

For now, we're just removing the incorrect /doxm code to disable,
and leaving the more aggressive disable timing for another release.

See [IOT-2858] for more info.

Change-Id: I99c2a48abbfc6f3e5aa52385ee5b778c4c80ccfc
Signed-off-by: Nathan Heldt-Sheller <nathan.heldt-sheller@intel.com>
resource/csdk/security/src/doxmresource.c
resource/csdk/security/src/secureresourcemanager.c

index 9779bf2..60cff92 100644 (file)
@@ -1354,17 +1354,9 @@ OCEntityHandlerResult StartOTMJustWorks(OCEntityHandlerRequest *ehRequest)
 #endif // __WITH_DTLS__ or __WITH_TLS__
         goto exit;
     }
-    // else if /doxm.devowneruuid != Nil UUID, disable Anon CipherSuite
     else
     {
 #if defined(__WITH_DTLS__) || defined(__WITH_TLS__)
-        // Disable anonymous ECDH cipher since OTM is underway
-        RegisterOTMSslHandshakeCallback(NULL);
-        CAResult_t caRes = CA_STATUS_OK;
-        caRes = CAEnableAnonECDHCipherSuite(false);
-        VERIFY_SUCCESS(TAG, caRes == CA_STATUS_OK, ERROR);
-        OIC_LOG_V(INFO, TAG, "%s: ECDH_ANON CipherSuite is DISABLED", __func__);
-
         //In case of Mutual Verified Just-Works, verify mutualVerifNum
         if (OIC_MV_JUST_WORKS == gDoxm->oxmSel && false == gDoxm->owned)
         {
@@ -1621,11 +1613,11 @@ static OCEntityHandlerResult HandleDoxmPostRequest(OCEntityHandlerRequest *ehReq
         goto exit;
     }
 
-    // If oxmsel was in Update payload, and the device is not owned,
-    // do the OTM-specific aspect of owner-transfer
-    if (oxmselParsed && (false == gDoxm->owned))
+    // If oxmsel was in Update payload, and the device is in RFOTM,
+    // start the OTM-specific aspect of owner-transfer.
+    if (oxmselParsed && (DOS_RFOTM == dos.state))
     {
-        OIC_LOG_V(INFO, TAG, "%s: Device not owned and oxmsel Updated... starting OTM!", __func__);
+        OIC_LOG_V(INFO, TAG, "%s: Device in RFOTM, and oxmsel Updated... starting OTM!", __func__);
         ehRet = StartOwnershipTransfer(newDoxm, ehRequest);
         VERIFY_SUCCESS(TAG, OC_EH_OK == ehRet, ERROR);
     }
index 545181a..59184ce 100644 (file)
@@ -312,6 +312,25 @@ void SRMRequestHandler(const CAEndpoint_t *endPoint, const CARequestInfo_t *requ
     // Set secure channel boolean.
     ctx->secureChannel = isRequestOverSecureChannel(ctx);
 
+#if defined( __WITH_TLS__) || defined(__WITH_DTLS__)
+
+    // [IOT-2858]
+    // If request is over Secure Channel but requester ID is Nil UUID
+    // it means that this request arrived over DTLS established via anon
+    // cipher suite.  This may be an opportunity to disable anon cipher
+    // suite, but for now, just log the event.
+#ifndef NDEBUG
+    if (SUBJECT_ID_TYPE_UUID == ctx->subjectIdType)
+    {
+        if (ctx->secureChannel &&
+            IsNilUuid(&(ctx->subjectUuid)))
+        {
+            OIC_LOG_V(INFO, TAG, "%s: request received over Secure Channel from Nil UUID client.", __func__);
+        }
+    }
+#endif // NDEBUG
+#endif // DTLS
+
     // Set resource URI and type.
     SetResourceUriAndType(ctx);