diff --git a/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLManager.java b/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLManager.java
index a505973..0b28c5b 100644
--- a/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLManager.java
+++ b/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLManager.java
@@ -189,7 +189,7 @@
     return r;
   }
 
-  public static String[] getEnalbedCiphers(String enabledCiphers) {
+  public static String[] getEnabledCiphers(String enabledCiphers) {
     SSLOption option = new SSLOption();
     option.setProtocols("TLSv1.2");
     option.setCiphers(enabledCiphers);
diff --git a/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLManagerTest.java b/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLManagerTest.java
index d1b1476..3121367 100644
--- a/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLManagerTest.java
+++ b/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLManagerTest.java
@@ -199,7 +199,8 @@
     };
 
     SSLEngine aSSLEngine = SSLManager.createSSLEngine(option, custom);
-    Assert.assertEquals(false, aSSLEngine.getUseClientMode());
+    // if client mode may not decided at initialization. Different JDK is different, do not check it.
+    // Assert.assertEquals(false, aSSLEngine.getUseClientMode());
     Assert.assertNotNull(aSSLEngine);
   }
 
@@ -222,7 +223,7 @@
     String peerHost = "host1";
     SSLEngine aSSLEngine = SSLManager.createSSLEngine(option, custom, peerHost, port);
     Assert.assertNotNull(aSSLEngine);
-    Assert.assertEquals("host1", aSSLEngine.getPeerHost().toString());
+    Assert.assertEquals("host1", aSSLEngine.getPeerHost());
   }
 
   @Test
@@ -249,8 +250,8 @@
     };
 
     try {
-      SSLContext context = SSLManager.createSSLContext(option, custom);
-      Assert.assertNotNull(context);
+      SSLManager.createSSLContext(option, custom);
+      Assert.assertNotNull(null);
     } catch (Exception e) {
       Assert.assertEquals("java.lang.IllegalArgumentException", e.getClass().getName());
     }
@@ -280,8 +281,8 @@
     };
 
     try {
-      SSLContext context = SSLManager.createSSLContext(option, custom);
-      Assert.assertNotNull(context);
+      SSLManager.createSSLContext(option, custom);
+      Assert.assertNotNull(null);
     } catch (Exception e) {
       Assert.assertEquals("java.lang.IllegalArgumentException", e.getClass().getName());
     }
@@ -311,9 +312,9 @@
     };
 
     try {
-      SSLServerSocket context = SSLManager.createSSLServerSocket(option, custom);
+      SSLManager.createSSLServerSocket(option, custom);
 
-      Assert.assertNotNull(context);
+      Assert.assertNotNull(null);
     } catch (Exception e) {
       Assert.assertEquals("java.lang.IllegalArgumentException", e.getClass().getName());
     }
@@ -343,8 +344,8 @@
     };
 
     try {
-      SSLServerSocket context = SSLManager.createSSLServerSocket(option, custom);
-      Assert.assertNotNull(context);
+      SSLManager.createSSLServerSocket(option, custom);
+      Assert.assertNotNull(null);
     } catch (Exception e) {
       Assert.assertEquals("java.lang.IllegalArgumentException", e.getClass().getName());
     }
@@ -374,8 +375,8 @@
     };
 
     try {
-      SSLSocket context = SSLManager.createSSLSocket(option, custom);
-      Assert.assertNotNull(context);
+      SSLManager.createSSLSocket(option, custom);
+      Assert.assertNotNull(null);
     } catch (Exception e) {
       Assert.assertEquals("java.lang.IllegalArgumentException", e.getClass().getName());
     }
@@ -405,8 +406,8 @@
     };
 
     try {
-      SSLSocket context = SSLManager.createSSLSocket(option, custom);
-      Assert.assertNotNull(context);
+      SSLManager.createSSLSocket(option, custom);
+      Assert.assertNotNull(null);
     } catch (Exception e) {
       Assert.assertEquals("java.lang.IllegalArgumentException", e.getClass().getName());
     }
@@ -431,8 +432,9 @@
     Assert.assertNotNull(aSSLSocketFactory.getDefaultCipherSuites()[0]);
   }
 
+  @Test
   public void testGetSupportedCiphers() {
-    String[] ciphers = SSLManager.getEnalbedCiphers("TLS_RSA_WITH_AES_128_GCM_SHA256");
+    String[] ciphers = SSLManager.getEnabledCiphers("TLS_RSA_WITH_AES_128_GCM_SHA256");
     Assert.assertEquals(ciphers[0], "TLS_RSA_WITH_AES_128_GCM_SHA256");
   }
 }
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxTLSBuilder.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxTLSBuilder.java
index 790c764..5f8434d 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxTLSBuilder.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxTLSBuilder.java
@@ -141,7 +141,7 @@
     tcpClientOptions
         .setEnabledSecureTransportProtocols(new HashSet<String>(Arrays.asList(sslOption.getProtocols().split(","))));
 
-    for (String cipher : SSLManager.getEnalbedCiphers(sslOption.getCiphers())) {
+    for (String cipher : SSLManager.getEnabledCiphers(sslOption.getCiphers())) {
       tcpClientOptions.addEnabledCipherSuite(cipher);
     }
 
