> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ClientCertificate

<span id="atoti.ClientCertificate" />

> atoti.ClientCertificate(<br />
>     *certificate*: [Path](https://docs.python.org/3/library/pathlib.html#pathlib.Path),<br />
>     \*,<br />
>     *keyfile*: [Path](https://docs.python.org/3/library/pathlib.html#pathlib.Path) | [None](https://docs.python.org/3/library/constants.html#None) = `None`,<br />
>     *password*: [str](https://docs.python.org/3/library/stdtypes.html#str) | [None](https://docs.python.org/3/library/constants.html#None) = `None`,<br />
> )

A client certificate to [`connect()`](./atoti.Session.connect#atoti.Session.connect) to a session configured with [`ClientCertificateConfig`](./atoti.config.security.ClientCertificateConfig#atoti.ClientCertificateConfig).

```pycon theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
>>> certificate_authority = certificates_directory / "root-CA.crt"
>>> session_config = tt.SessionConfig(
...     security=tt.SecurityConfig(
...         client_certificate=tt.ClientCertificateConfig(
...             trust_store=certificates_directory / "truststore.jks",
...             trust_store_password="changeit",
...         ),
...         https=tt.HttpsConfig(
...             certificate=certificates_directory / "localhost.p12",
...             certificate_authority=certificate_authority,
...             password="changeit",
...         ),
...     )
... )
>>> session = tt.Session.start(session_config)
>>> session.security.individual_roles["patachoux"] = {"ROLE_BOT", "ROLE_USER"}
>>> # The session requires authentication:
>>> tt.Session.connect(
...     session.url, certificate_authority=certificate_authority
... )  
Traceback (most recent call last):
    ...
httpx2.HTTPStatusError: Client error '401 '...
>>> connected_session = tt.Session.connect(
...     session.url,
...     authentication=tt.ClientCertificate(
...         certificates_directory / "client.pem",
...         keyfile=certificates_directory / "client.key",
...     ),
...     certificate_authority=certificate_authority,
... )
>>> user = connected_session.user
>>> user.name
'patachoux'
>>> sorted(user.roles)
['ROLE_BOT', 'ROLE_USER']
```

### Attributes

<h4 id="atoti.ClientCertificate.certificate">
  *certificate*
</h4>

Path to the `.pem` file containing the client certificate.

<h4 id="atoti.ClientCertificate.keyfile">
  *keyfile*
</h4>

Path to the certificate `.key` file.

<h4 id="atoti.ClientCertificate.password">
  *password*
</h4>

The certificate password.
