# Google SSO AttributeError: module 'OpenSSL.crypto' has no attribute 'sign'

**URL:** <https://forum.pritunl.com/t/google-sso-attributeerror-module-openssl-crypto-has-no-attribute-sign/3057>\
**Category:** Pritunl VPN\
**Tags:** pritunl-endpoint, pritunl\
**Created:** [February 21, 2025, 5:38pm UTC](https://forum.pritunl.com/t/google-sso-attributeerror-module-openssl-crypto-has-no-attribute-sign/3057 "2025-02-21T17:38:19Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![thanisms](https://forum.pritunl.com/user_avatar/forum.pritunl.com/thanisms/32/1205_2.png) [@thanisms](https://forum.pritunl.com/u/thanisms)\
**Post date:** [February 21, 2025, 5:38pm UTC](https://forum.pritunl.com/t/google-sso-attributeerror-module-openssl-crypto-has-no-attribute-sign/3057/1 "2025-02-21T17:38:19Z")

</div>

I have Ubuntu 24.04.2 LTS, installed pritunl server with enterprise license

After i updated my os , i am getting the following error

Can you please help ?

tail -f /var/log/pritunl.log

[autumn-meadow-6140][2025-02-21 16:57:54,090][ERROR] Exception on /sso/callback [GET]  
Traceback (most recent call last):  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py”, line 2190, in wsgi\_app  
response = self.full\_dispatch\_request()  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py”, line 1486, in full\_dispatch\_request  
rv = self.handle\_user\_exception(e)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py”, line 1484, in full\_dispatch\_request  
rv = self.dispatch\_request()  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py”, line 1469, in dispatch\_request  
return self.ensure\_sync(self.view\_functions[rule.endpoint])(\*\*view\_args)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/auth/app.py”, line 26, in \_wrapped  
return call(\*args, \*\*kwargs)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/handlers/sso.py”, line 664, in sso\_callback\_get  
valid, google\_groups = sso.verify\_google(username)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/sso/google.py”, line 42, in verify\_google  
data = service.users().get(userKey=user\_email).execute()  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/googleapiclient/\_helpers.py”, line 130, in positional\_wrapper  
return wrapped(\*args, \*\*kwargs)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/googleapiclient/http.py”, line 923, in execute  
resp, content = \_retry\_request(  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/googleapiclient/http.py”, line 191, in \_retry\_request  
resp, content = http.request(uri, method, \*args, \*\*kwargs)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/transport.py”, line 159, in new\_request  
credentials.\_refresh(orig\_request\_method)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/client.py”, line 749, in \_refresh  
self.\_do\_refresh\_request(http)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/client.py”, line 774, in \_do\_refresh\_request  
body = self.\_generate\_refresh\_request\_body()  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/client.py”, line 1484, in \_generate\_refresh\_request\_body  
assertion = self.\_generate\_assertion()  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/service\_account.py”, line 384, in \_generate\_assertion  
return crypt.make\_signed\_jwt(self.\_signer, payload,  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/crypt.py”, line 97, in make\_signed\_jwt  
signature = signer.sign(signing\_input)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/\_openssl\_crypt.py”, line 97, in sign  
return crypto.sign(self.\_key, message, ‘sha256’)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/cryptography/utils.py”, line 68, in **getattr**  
obj = getattr(self.\_module, attr)  
AttributeError: module ‘OpenSSL.crypto’ has no attribute ‘sign’  
[autumn-meadow-6140][2025-02-21 16:57:54,090][ERROR] Exception on /sso/callback [GET]  
Traceback (most recent call last):  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py”, line 2190, in wsgi\_app  
response = self.full\_dispatch\_request()  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py”, line 1486, in full\_dispatch\_request  
rv = self.handle\_user\_exception(e)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py”, line 1484, in full\_dispatch\_request  
rv = self.dispatch\_request()  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py”, line 1469, in dispatch\_request  
return self.ensure\_sync(self.view\_functions[rule.endpoint])(\*\*view\_args)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/auth/app.py”, line 26, in \_wrapped  
return call(\*args, \*\*kwargs)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/handlers/sso.py”, line 664, in sso\_callback\_get  
valid, google\_groups = sso.verify\_google(username)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/sso/google.py”, line 42, in verify\_google  
data = service.users().get(userKey=user\_email).execute()  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/googleapiclient/\_helpers.py”, line 130, in positional\_wrapper  
return wrapped(\*args, \*\*kwargs)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/googleapiclient/http.py”, line 923, in execute  
resp, content = \_retry\_request(  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/googleapiclient/http.py”, line 191, in \_retry\_request  
resp, content = http.request(uri, method, \*args, \*\*kwargs)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/transport.py”, line 159, in new\_request  
credentials.\_refresh(orig\_request\_method)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/client.py”, line 749, in \_refresh  
self.\_do\_refresh\_request(http)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/client.py”, line 774, in \_do\_refresh\_request  
body = self.\_generate\_refresh\_request\_body()  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/client.py”, line 1484, in \_generate\_refresh\_request\_body  
assertion = self.\_generate\_assertion()  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/service\_account.py”, line 384, in \_generate\_assertion  
return crypt.make\_signed\_jwt(self.\_signer, payload,  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/crypt.py”, line 97, in make\_signed\_jwt  
signature = signer.sign(signing\_input)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/oauth2client/\_openssl\_crypt.py”, line 97, in sign  
return crypto.sign(self.\_key, message, ‘sha256’)  
File “/usr/lib/pritunl/usr/lib/python3.9/site-packages/cryptography/utils.py”, line 68, in **getattr**  
obj = getattr(self.\_module, attr)  
AttributeError: module ‘OpenSSL.crypto’ has no attribute ‘sign’

---

<div class="post-metadata">

**Author:** ![zach](https://forum.pritunl.com/user_avatar/forum.pritunl.com/zach/32/1105_2.png) [@zach](https://forum.pritunl.com/u/zach)\
**Post date:** [February 22, 2025, 6:36am UTC](https://forum.pritunl.com/t/google-sso-attributeerror-module-openssl-crypto-has-no-attribute-sign/3057/2 "2025-02-22T06:36:39Z")

</div>

The recent updated pyOpenSSL is incompatible with oauth2client. This will be fixed in an update in a few hours. It can be fixed on the server by editing `sudo nano /usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/sso/google.py` holding ctrl+k to clear the file then replacing it with the code below. Once done run `sudo systemctl restart pritunl`.

```auto
from pritunl import settings
from pritunl import utils

import json
import io
from google.oauth2 import service_account
from googleapiclient import discovery

def verify_google(user_email):
    user_domain = user_email.split('@')[-1]

    if not isinstance(settings.app.sso_match, list):
        raise TypeError('Invalid sso match')

    if not user_domain in settings.app.sso_match:
        return False, []

    google_key = settings.app.sso_google_key
    google_email = settings.app.sso_google_email

    if not google_key or not google_email:
        return True, []

    data = json.loads(google_key)

    credentials = service_account.Credentials.from_service_account_info(
        data,
        scopes=[
            'https://www.googleapis.com/auth/admin.directory.user.readonly',
            'https://www.googleapis.com/auth/admin.directory.group.readonly',
        ],
    )

    delegated_credentials = credentials.with_subject(google_email)

    service = discovery.build(
        'admin', 'directory_v1', credentials=delegated_credentials)

    data = service.users().get(userKey=user_email).execute()
    if data.get('suspended'):
        return False, []

    results = service.groups().list(userKey=user_email,
        maxResults=settings.app.sso_google_groups_max).execute()

    groups = []
    for group in results.get('groups') or []:
        groups.append(utils.filter_unicode(group['name']))

    return True, groups

```

---

<div class="post-metadata">

**Author:** ![jim](https://forum.pritunl.com/letter_avatar_proxy/v4/letter/j/ac91a4/32.png) [@jim](https://forum.pritunl.com/u/jim)\
**Post date:** [February 22, 2025, 2:08pm UTC](https://forum.pritunl.com/t/google-sso-attributeerror-module-openssl-crypto-has-no-attribute-sign/3057/3 "2025-02-22T14:08:28Z")

</div>

Thanks for posting this quick fix. Saved my bacon this morning!

---

<div class="post-metadata">

**Author:** ![zach](https://forum.pritunl.com/user_avatar/forum.pritunl.com/zach/32/1105_2.png) [@zach](https://forum.pritunl.com/u/zach)\
**Post date:** [February 22, 2025, 2:17pm UTC](https://forum.pritunl.com/t/google-sso-attributeerror-module-openssl-crypto-has-no-attribute-sign/3057/4 "2025-02-22T14:17:44Z")

</div>

The update is currently on the [**unstable repository**](https://docs.pritunl.com/docs/repo#unstable-repositories) and should be in the stable repository in about 30 minutes.
