{
  "id": "java/ssl-exception-unrecognized-ssl-message",
  "signature": "javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?",
  "signature_zh": "javax.net.ssl.SSLException：无法识别的 SSL 消息，明文连接？",
  "regex": "javax\\.net\\.ssl\\.SSLException: Unrecognized SSL message, plaintext connection\\?",
  "domain": "java",
  "category": "network_error",
  "subcategory": null,
  "root_cause": "The JVM is trying to establish an SSL/TLS connection but the server is speaking a non-SSL protocol (typically plain HTTP) on the expected SSL port, often due to misconfigured ports or incorrect URL scheme.",
  "root_cause_type": "generic",
  "root_cause_zh": "JVM 尝试建立 SSL/TLS 连接，但服务器在预期的 SSL 端口上使用非 SSL 协议（通常是纯 HTTP），通常由端口配置错误或 URL 方案不正确引起。",
  "versions": [
    {
      "version": "Java 8",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "Java 11",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "Java 17",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "Java 21",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    }
  ],
  "os_specific": {},
  "dead_ends": [
    {
      "action": "",
      "why_fails": "Disabling SSL verification does not fix the protocol mismatch; the server is not speaking SSL at all.",
      "fail_rate": 0.95,
      "condition": "",
      "sources": []
    },
    {
      "action": "",
      "why_fails": "Changing the SSL protocol version (e.g., TLSv1.2 to TLSv1.3) does not help because the server is not using SSL.",
      "fail_rate": 0.9,
      "condition": "",
      "sources": []
    },
    {
      "action": "",
      "why_fails": "Increasing connection timeout does not change the protocol; the server still responds with plain HTTP.",
      "fail_rate": 0.95,
      "condition": "",
      "sources": []
    }
  ],
  "workarounds": [
    {
      "action": "Verify the correct URL scheme: use https:// for SSL connections and http:// for plain connections. Check the server's actual port configuration.",
      "success_rate": 0.9,
      "how": "Verify the correct URL scheme: use https:// for SSL connections and http:// for plain connections. Check the server's actual port configuration.",
      "condition": "",
      "sources": []
    },
    {
      "action": "If the server supports both HTTP and HTTPS on different ports, ensure the client connects to the correct port. Use tools like curl to test: curl -v https://host:port.",
      "success_rate": 0.85,
      "how": "If the server supports both HTTP and HTTPS on different ports, ensure the client connects to the correct port. Use tools like curl to test: curl -v https://host:port.",
      "condition": "",
      "sources": []
    },
    {
      "action": "For development or testing, if the server is misconfigured and you must use SSL, configure a reverse proxy (e.g., nginx) to terminate SSL and forward to the backend HTTP server.",
      "success_rate": 0.7,
      "how": "For development or testing, if the server is misconfigured and you must use SSL, configure a reverse proxy (e.g., nginx) to terminate SSL and forward to the backend HTTP server.",
      "condition": "",
      "sources": []
    }
  ],
  "workarounds_zh": [
    "Verify the correct URL scheme: use https:// for SSL connections and http:// for plain connections. Check the server's actual port configuration.",
    "If the server supports both HTTP and HTTPS on different ports, ensure the client connects to the correct port. Use tools like curl to test: curl -v https://host:port.",
    "For development or testing, if the server is misconfigured and you must use SSL, configure a reverse proxy (e.g., nginx) to terminate SSL and forward to the backend HTTP server."
  ],
  "transition_graph": {
    "leads_to": [],
    "preceded_by": [],
    "frequently_confused_with": []
  },
  "official_doc_url": "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/javax/net/ssl/SSLException.html",
  "official_doc_section": null,
  "error_code": null,
  "verification_tier": "ai_generated",
  "confidence": 0.85,
  "fix_success_rate": 0.9,
  "resolvable": "true",
  "first_seen": "2023-12-05",
  "last_confirmed": "2024-06-01",
  "last_updated": "2024-06-01",
  "evidence_count": 1,
  "tags": [],
  "locale": "en",
  "aliases": []
}