diff --git a/docs/en/sql-reference/aggregate-functions/reference/groupconcat.md b/docs/en/sql-reference/aggregate-functions/reference/groupconcat.md
new file mode 100644
index 00000000000..072252de8c9
--- /dev/null
+++ b/docs/en/sql-reference/aggregate-functions/reference/groupconcat.md
@@ -0,0 +1,90 @@
+---
+slug: /en/sql-reference/aggregate-functions/reference/groupconcat
+sidebar_position: 363
+sidebar_label: groupConcat
+title: groupConcat
+---
+
+Calculates a concatenated string from a group of strings, optionally separated by a delimiter, and optionally limited by a maximum number of elements.
+
+**Syntax**
+
+``` sql
+groupConcat(expression [, delimiter] [, limit]);
+```
+
+**Arguments**
+
+- `expression` — The expression or column name that outputs strings to be concatenated..
+- `delimiter` — A [string](../../../sql-reference/data-types/string.md) that will be used to separate concatenated values. This parameter is optional and defaults to an empty string if not specified.
+- `limit` — A positive [integer](../../../sql-reference/data-types/int-uint.md) specifying the maximum number of elements to concatenate. If more elements are present, excess elements are ignored. This parameter is optional.
+
+:::note
+If delimiter is specified without limit, it must be the first parameter following the expression. If both delimiter and limit are specified, delimiter must precede limit.
+:::
+
+**Returned value**
+
+- Returns a [string](../../../sql-reference/data-types/string.md) consisting of the concatenated values of the column or expression. If the group has no elements or only null elements, and the function does not specify a handling for only null values, the result is a nullable string with a null value.
+
+**Examples**
+
+Input table:
+
+``` text
+┌─id─┬─name─┐
+│ 1 │ John│
+│ 2 │ Jane│
+│ 3 │ Bob│
+└────┴──────┘
+```
+
+1. Basic usage without a delimiter:
+
+Query:
+
+``` sql
+SELECT groupConcat(Name) FROM Employees;
+```
+
+Result:
+
+``` text
+JohnJaneBob
+```
+
+This concatenates all names into one continuous string without any separator.
+
+
+2. Using comma as a delimiter:
+
+Query:
+
+``` sql
+SELECT groupConcat(Name, ', ', 2) FROM Employees;
+```
+
+Result:
+
+``` text
+John, Jane, Bob
+```
+
+This output shows the names separated by a comma followed by a space.
+
+
+3. Limiting the number of concatenated elements
+
+Query:
+
+``` sql
+SELECT groupConcat(Name, ', ', 2) FROM Employees;
+```
+
+Result:
+
+``` text
+John, Jane
+```
+
+This query limits the output to the first two names, even though there are more names in the table.
diff --git a/tests/fuzz/dictionaries/functions.dict b/tests/fuzz/dictionaries/functions.dict
index ec7f8017fb2..6f2a88c22fa 100644
--- a/tests/fuzz/dictionaries/functions.dict
+++ b/tests/fuzz/dictionaries/functions.dict
@@ -1588,6 +1588,7 @@
"groupBitmapXorResample"
"groupBitmapXorSimpleState"
"groupBitmapXorState"
+"groupConcat"
"groupUniqArray"
"groupUniqArrayArgMax"
"groupUniqArrayArgMin"
diff --git a/tests/integration/test_accept_invalid_certificate/configs/ssl_config_strict.xml b/tests/integration/test_accept_invalid_certificate/configs/ssl_config_strict.xml
new file mode 100644
index 00000000000..a4383a77ac4
--- /dev/null
+++ b/tests/integration/test_accept_invalid_certificate/configs/ssl_config_strict.xml
@@ -0,0 +1,17 @@
+
+
+ 9440
+
+
+
+
+ /etc/clickhouse-server/config.d/self-cert.pem
+ /etc/clickhouse-server/config.d/self-key.pem
+ /etc/clickhouse-server/config.d/ca-cert.pem
+ strict
+
+
+
diff --git a/tests/integration/test_accept_invalid_certificate/test.py b/tests/integration/test_accept_invalid_certificate/test.py
index 87229d75f90..f43e9e6140a 100644
--- a/tests/integration/test_accept_invalid_certificate/test.py
+++ b/tests/integration/test_accept_invalid_certificate/test.py
@@ -17,6 +17,19 @@ instance = cluster.add_instance(
"certs/self-cert.pem",
"certs/ca-cert.pem",
],
+ with_zookeeper=False,
+)
+
+
+node1 = cluster.add_instance(
+ "node1",
+ main_configs=[
+ "configs/ssl_config_strict.xml",
+ "certs/self-key.pem",
+ "certs/self-cert.pem",
+ "certs/ca-cert.pem",
+ ],
+ with_zookeeper=False,
)
@@ -90,3 +103,25 @@ def test_connection_accept():
)
== "1\n"
)
+
+
+def test_strict_reject():
+ with pytest.raises(Exception) as err:
+ execute_query_native(node1, "SELECT 1", "")
+ assert "certificate verify failed" in str(err.value)
+
+
+def test_strict_reject_with_config():
+ with pytest.raises(Exception) as err:
+ execute_query_native(node1, "SELECT 1", config_accept)
+ assert "alert certificate required" in str(err.value)
+
+
+def test_strict_connection_reject():
+ with pytest.raises(Exception) as err:
+ execute_query_native(
+ node1,
+ "SELECT 1",
+ config_connection_accept.format(ip_address=f"{instance.ip_address}"),
+ )
+ assert "certificate verify failed" in str(err.value)
diff --git a/utils/check-style/aspell-ignore/en/aspell-dict.txt b/utils/check-style/aspell-ignore/en/aspell-dict.txt
index b21ae0764c6..d82b70cfdb4 100644
--- a/utils/check-style/aspell-ignore/en/aspell-dict.txt
+++ b/utils/check-style/aspell-ignore/en/aspell-dict.txt
@@ -1733,6 +1733,7 @@ groupBitmap
groupBitmapAnd
groupBitmapOr
groupBitmapXor
+groupConcat
groupUniqArray
grouparray
grouparrayinsertat
@@ -1749,6 +1750,7 @@ groupbitmapor
groupbitmapxor
groupbitor
groupbitxor
+groupconcat
groupuniqarray
grpc
grpcio