---
title:  Security&#58; Authentication and Encryption
---

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

Most security configuration takes place on the <%=vars.product_name%> server. The server's security
framework authenticates clients as they connect to a cache server and authorizes client cache
operations using developer-provided implementations for authentication and authorization.

For an explanation of the server-side implementation of security features, 
see [Security](<%=vars.serverman%>/managing/security/chapter_overview.html) in the *<%=vars.product_name%> User Guide*.

A Native Client application must address two security concerns when connecting to a <%=vars.product_name%> server: 

-   **[Authentication](authentication.html)**

    The Client must submit its authentication credentials to the server using the developer-provided authentication implementation expected by the server.

-   **[TLS/SSL Client/Server Communication Encryption](sslclientserver.html)**

    Communication between client and server should be encrypted so authentication credentials and other transmissions cannot be viewed by third-parties.

