---
id: 'config-https'
title: 'Configuring HugeGraphServer to Use HTTPS Protocol'
sidebar_label: 'Config HTTPS'
sidebar_position: 4
---


### Overview

By default, HugeGraphServer uses the HTTP protocol. However, if you have security requirements for your requests, you can configure it to use HTTPS.

### Server Configuration

Modify the `conf/rest-server.properties` configuration file and change the schema part of `restserver.url` to `https`.

```ini
# Set the protocol to HTTPS
restserver.url=https://127.0.0.1:8080
# Server keystore file path. This default value is automatically effective when using HTTPS, and you can modify it as needed.
ssl.keystore_file=conf/hugegraph-server.keystore
# Server keystore file password. This default value is automatically effective when using HTTPS, and you can modify it as needed.
ssl.keystore_password=******
```

The server's `conf` directory already includes a keystore file named `hugegraph-server.keystore`, and the password for this file is `hugegraph`. These are the default values when enabling the HTTPS protocol. Users can generate their own keystore file and password, and then modify the values of `ssl.keystore_file` and `ssl.keystore_password`.

### Client Configuration

#### Using HTTPS in HugeGraph-Client

When constructing a HugeClient, pass the HTTPS-related configurations. Here's an example in Java:

```java
String url = "https://localhost:8080";
String graphName = "hugegraph";
HugeClientBuilder builder = HugeClient.builder(url, graphName);
// Client keystore file path
String trustStoreFilePath = "hugegraph.truststore";
// Client keystore password
String trustStorePassword = "******";
builder.configSSL(trustStoreFilePath, trustStorePassword);
HugeClient hugeClient = builder.build();
```

> Note: Before version 1.9.0, HugeGraph-Client was created directly using the `new` keyword and did not support the HTTPS protocol. Starting from version 1.9.0, it changed to use the builder pattern and supports configuring the HTTPS protocol.

#### Using HTTPS in HugeGraph-Loader

When starting an import task, add the following options in the command line:

```bash
# HTTPS
--protocol https
# Client certificate file path. When specifying --protocol as https, the default value conf/hugegraph.truststore is automatically used, and you can modify it as needed.
--trust-store-file {file}
# Client certificate file password. When specifying --protocol as https, the default value hugegraph is automatically used, and you can modify it as needed.
--trust-store-password {password}
```

Under the `conf` directory of hugegraph-loader, there is already a default client certificate file named `hugegraph.truststore`, and its password is `hugegraph`.

#### Using HTTPS in HugeGraph-Tools

When executing commands, add the following options in the command line:

```bash
# Client certificate file path. When using the HTTPS protocol in the URL, the default value conf/hugegraph.truststore is automatically used, and you can modify it as needed.
--trust-store-file {file}
# Client certificate file password. When using the HTTPS protocol in the URL, the default value hugegraph is automatically used, and you can modify it as needed.
--trust-store-password {password}
# When executing migration commands and using the --target-url with the HTTPS protocol, the default value conf/hugegraph.truststore is automatically used, and you can modify it as needed.
--target-trust-store-file {target-file}
# When executing migration commands and using the --target-url with the HTTPS protocol, the default value hugegraph is automatically used, and you can modify it as needed.
--target-trust-store-password {target-password}
```

Under the `conf` directory of hugegraph-tools, there is already a default client certificate file named `hugegraph.truststore`, and its password is `hugegraph`.

### How to Generate Certificate Files

This section provides an example of generating certificates. If the default certificate is sufficient or if you already know how to generate certificates, you can skip this section.

#### Server

1. Generate the server's private key and import it into the server's keystore file. The `server.keystore` is for the server's use and contains its private key.

```bash
keytool -genkey -alias serverkey -keyalg RSA -keystore server.keystore
```

During the process, fill in the description information according to your requirements. The description information for the default certificate is as follows:

```
First and Last Name: hugegraph
Organizational Unit Name: hugegraph
Organization Name: hugegraph
City or Locality Name: BJ
State or Province Name: BJ
Country Code: CN
```

2. Export the server certificate based on the server's private key.

```bash
keytool -export -alias serverkey -keystore server.keystore -file server.crt
```

`server.crt` is the server's certificate.

#### Client

```bash
keytool -import -alias serverkey -file server.crt -keystore client.truststore
```

`client.truststore` is for the client's use and contains the trusted certificate.
