gitscope
← marzneshin / Diff · 447cae8 → 447cae8
Changes 447cae8..447cae8
Patch commit
diff --git a/app/utils/crypto.py b/app/utils/crypto.py
index 6f61f7c..596b122 100644
--- a/app/utils/crypto.py
+++ b/app/utils/crypto.py
@@ -1,8 +1,11 @@
import ssl
+from datetime import datetime, timedelta
from cryptography import x509
from cryptography.hazmat.backends import default_backend
-from OpenSSL import crypto
+from cryptography.hazmat.primitives import hashes, serialization
+from cryptography.hazmat.primitives.asymmetric import ec
+from cryptography.x509.oid import ExtendedKeyUsageOID
def get_cert_SANs(cert: bytes):
@@ -17,21 +20,60 @@ def get_cert_SANs(cert: bytes):
def generate_certificate():
- k = crypto.PKey()
- k.generate_key(crypto.TYPE_RSA, 4096)
- cert = crypto.X509()
- cert.get_subject().CN = "Gozargah"
- cert.gmtime_adj_notBefore(0)
- cert.gmtime_adj_notAfter(100 * 365 * 24 * 60 * 60)
- cert.set_issuer(cert.get_subject())
- cert.set_pubkey(k)
- cert.sign(k, "sha512")
- cert_pem = crypto.dump_certificate(crypto.FILETYPE_PEM, cert).decode(
- "utf-8"
+ key = ec.generate_private_key(ec.SECP256R1())
+
+ subject = issuer = x509.Name([])
+
+ subject_key_id = x509.SubjectKeyIdentifier.from_public_key(
+ key.public_key()
+ )
+
+ cert = (
+ x509.CertificateBuilder()
+ .subject_name(subject)
+ .issuer_name(issuer)
+ .public_key(key.public_key())
+ .serial_number(x509.random_serial_number())
+ .not_valid_before(datetime.utcnow())
+ .not_valid_after(datetime.utcnow() + timedelta(days=3650))
+ .add_extension(
+ x509.BasicConstraints(ca=False, path_length=None), critical=True
+ )
+ .add_extension(
+ x509.KeyUsage(
+ digital_signature=True,
+ content_commitment=False,
+ key_encipherment=True,
+ data_encipherment=False,
+ key_agreement=False,
+ key_cert_sign=False,
+ crl_sign=False,
+ encipher_only=False,
+ decipher_only=False,
+ ),
+ critical=False,
+ )
+ .add_extension(subject_key_id, critical=False)
+ .add_extension(
+ x509.ExtendedKeyUsage(
+ [
+ ExtendedKeyUsageOID.SERVER_AUTH,
+ ExtendedKeyUsageOID.CLIENT_AUTH,
+ ]
+ ),
+ critical=False,
+ )
+ .sign(private_key=key, algorithm=hashes.SHA256())
)
- key_pem = crypto.dump_privatekey(crypto.FILETYPE_PEM, k).decode("utf-8")
- return {"cert": cert_pem, "key": key_pem}
+ return {
+ "cert": cert.public_bytes(serialization.Encoding.PEM).decode(),
+ "key": key.private_bytes(
+ encoding=serialization.Encoding.PEM,
+ format=serialization.PrivateFormat.TraditionalOpenSSL,
+ encryption_algorithm=serialization.NoEncryption(),
+ ).decode(),
+ }
def create_secure_context(
diff --git a/requirements.txt b/requirements.txt
index 7fc77b9..2fcd714 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -10,7 +10,6 @@ passlib==1.7.4
protobuf==4.25.2
pydantic==2.10
PyMySQL==1.1.1
-pyOpenSSL==24.2.1
python-decouple==3.8
python-dotenv==1.0.0
requests==2.32.2