anchor.diff:  Security
   ^^^^^^^^
   
  -Gremlin Server provides for several features that aid in the security of the graphs that it exposes.  It exposes built in SSL support and a pluggable authentication framework using link:https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer[SASL] (Simple Authentication and Security Layer).  SSL options are described in the configuration settings table above, so this section will focus on authentication.
  -
  -By default, Gremlin Server is configured to allow all requests to be processed (i.e. no authentication).  To turn this capability on, Gremlin Server must be configured with an `Authenticator` implementation in its YAML file.  Gremlin Server comes packaged with an implementation called `SimpleAuthenticator`.  The `SimpleAuthenticator` implements the `PLAIN` SASL mechanism (i.e. plain text) to authenticate a request.  It validates username/password pairs against a graph database, which must be provided to it as part of the configuration.
  +Gremlin Server provides for several features that aid in the security of the graphs that it exposes.  It has built in SSL support and a pluggable authentication framework using link:https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer[SASL] (Simple Authentication and Security Layer).  SSL options are described in the configuration settings table above, so this section will focus on authentication.
  +
  +By default, Gremlin Server is configured to allow all requests to be processed (i.e. no authentication).  To enable authentication, Gremlin Server must be configured with an `Authenticator` implementation in its YAML file.  Gremlin Server comes packaged with an implementation called `SimpleAuthenticator`.  The `SimpleAuthenticator` implements the `PLAIN` SASL mechanism (i.e. plain text) to authenticate a request.  It validates username/password pairs against a graph database, which must be provided to it as part of the configuration.
   
   [source,yaml]
   authentication: {
  
positive.code: 
  IMPORTANT: Be sure to define an index on the `username` property, as this will be used for lookups.  If supported by the `Graph`, consider specifying a unique constraint as well.
  
  A quick way to get started with the `SimpleAuthenticator` is to use TinkerGraph for the "credentials graph".  Recall that TinkerGraph is an in-memory graph and therefore always starts as "empty" when opened by `GraphFactory`.  To allow TinkerGraph to be used in this "getting started" capacity, Gremlin Server allows for a TinkerGraph-only configuration option called `credentialsDbLocation`.
  
  [source,yaml]
  authentication: {
  
negative.code:     credentialsDb: conf/tinkergraph-empty.properties,
      credentialsDbLocation: data/credentials.kryo}}
  
  This added configuration tells Gremlin Server to look for a gryo file at that location containing the data for the graph which it loads via standard `io` methods.  The limitation is that this read is only performed at the initialization of the server so therefore credentials remain static for the life of the server.  In this case, `data/credentials.kryo` contains a single user named "stephen" with the imaginative password of "password".
  
  [source,text]
  ----
  $ bin/gremlin-server.sh conf/gremlin-server-secure.yaml
  [INFO] GremlinServer -
           \,,,/
           (o o)
  -----oOOo-(3)-oOOo-----
  
  [INFO] GremlinServer - Configuring Gremlin Server from conf/gremlin-server-secure.yaml
  ...
  [WARN] AbstractChannelizer - Enabling SSL with self-signed certificate (NOT SUITABLE FOR PRODUCTION)
  [INFO] AbstractChannelizer - SSL enabled
  [INFO] SimpleAuthenticator - Initializing authentication with the org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator
  [INFO] SimpleAuthenticator - CredentialGraph initialized at CredentialGraph{graph=tinkergraph[vertices:1 edges:0]}
  [INFO] GremlinServer$1 - Gremlin Server configured with worker thread pool of 1, gremlin pool of 8 and boss thread pool of 1.
  [INFO] GremlinServer$1 - Channel started at port 8182.
  ----
  
  To connect to Gremlin Server with `gremlin-driver`, set the `credentials` and `enableSsl` when constructing the `Cluster`.
  
  [source,java]
  Cluster cluster = Cluster.build().credentials("stephen", "password")
                                   .enableSsl(true).create();
  
  If connecting with Gremlin Console, which utilizes `gremlin-driver` for remote script execution, use the provided `config/remote-secure.yaml` file when defining the remote.  That file contains configuration for the username and password as well as enablement of SSL from the client side.
  
  Serialization
  ^^^^^^^^^^^^^
  