【django】django项目使用https访问+ssl证书

目录

[一、安装 django-sslserver](#一、安装 django-sslserver)

二、配置settings

三、启动项目测试

四、使用ssl证书

[4.1 安装cryptography](#4.1 安装cryptography)

[4.2 生成证书代码](#4.2 生成证书代码)

[4.3 将生成的证书放到django项目根目录下](#4.3 将生成的证书放到django项目根目录下)

五、使用证书启动项目

[5.1 本地测试启动](#5.1 本地测试启动)

[5.2 生产启动](#5.2 生产启动)

六、生成docker镜像的dockerfile

七、构建服务

八、启动服务

九、修改settings


前言:django接口采取https访问,以及安全证书ssl

一、安装 django-sslserver

复制代码
pip install django-sslserver

二、配置settings

复制代码
SECURE_SSL_REDIRECT = False
INSTALLED_APPS = [
    
    'sslserver'
]

三、启动项目测试

复制代码
python manage.py runsslserver

四、使用ssl证书

4.1 安装cryptography

复制代码
pip install cryptography

4.2 生成证书代码

复制代码
# -*- coding: utf-8 -*-
# @Time    : 2024/9/29 13:31
# @Author  : super
# @File    : httpsSsl.py
# @Software: PyCharm
# @Describe:生成ssl证书
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.x509.oid import NameOID
from datetime import datetime, timedelta


def generate_rsa_private_key(bits=2048):
    """生成RSA私钥"""
    return rsa.generate_private_key(
        public_exponent=65537,
        key_size=bits,
        backend=default_backend()
    )


def generate_self_signed_cert(private_key, subject, validity_days=365):
    """生成自签名证书"""
    # 有效期
    now = datetime.utcnow()
    cert_not_valid_before = now
    cert_not_valid_after = now + timedelta(days=validity_days)

    # 创建证书签名请求(CSR)
    subject_alternative_name = x509.SubjectAlternativeName([
        # 你可以根据需要添加其他名称,比如IP地址
        x509.DNSName(subject)
    ])

    # 创建证书
    cert = (
        x509.CertificateBuilder()
        .subject_name(x509.Name([
            # 你可以根据需要添加更多的字段
            x509.NameAttribute(NameOID.COMMON_NAME, subject),
        ]))
        .issuer_name(x509.Name([
            x509.NameAttribute(NameOID.COMMON_NAME, subject),
        ]))
        .public_key(private_key.public_key())
        .serial_number(x509.random_serial_number())
        .not_valid_before(cert_not_valid_before)
        .not_valid_after(cert_not_valid_after)
        .add_extension(
            x509.SubjectAlternativeName(subject_alternative_name),
            critical=False,
        )
        .sign(private_key, hashes.SHA256(), default_backend())
    )

    # 返回PEM格式的证书和私钥
    return (
        cert.public_bytes(serialization.Encoding.PEM),
        private_key.private_bytes(
            encoding=serialization.Encoding.PEM,
            format=serialization.PrivateFormat.TraditionalOpenSSL,
            encryption_algorithm=serialization.NoEncryption()
        )
    )



if __name__ == '__main__':

    # 使用函数
    private_key = generate_rsa_private_key()
    cert_pem, private_key_pem = generate_self_signed_cert(private_key, "localhost")

    # 打印证书和私钥(通常你会将它们保存到文件中)
    print("Certificate:")
    print(cert_pem.decode())
    print("Private Key:")
    print(private_key_pem.decode())
    # 导出证书和私钥到文件
    with open('./certificate.pem', 'wb') as f:
        f.write(cert_pem)

    with open('./private_key.pem', 'wb') as f:
        f.write(private_key_pem)

    print("证书和私钥已保存到当前目录。")

4.3 将生成的证书放到django项目根目录下

五、使用证书启动项目

下面的路径自己调整一下

5.1 本地测试启动

复制代码
python manage.py runsslserver --certificate certificate.pem --key private_key.pem

5.2 生产启动

复制代码
python manage.py runsslserver --certificate /path/to/your/certificate.pem --key /path/to/your/private_key.pem 0.0.0.0:8000

六、生成docker镜像的dockerfile

复制代码
FROM python:3.8.10
WORKDIR /app
COPY . /app
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone \
&& python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple \
&& pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 暴露端口
EXPOSE 8000
CMD ["python", "manage.py", "runsslserver", "0.0.0.0:8000", "--certificate", "certificate.pem", "--key", "private_key.pem"]

七、构建服务

到对应文件目录下

复制代码
docker build -t my-django-app .

八、启动服务

复制代码
docker run -d --name myappname  --restart=always -p 8000:8000 my-django-app


# 指定宿主机(我使用的是这个)
docker run -d --name dora --restart=always -p 8000:8000  -v /opt/myapp/dora/djangoMarketBacken:/app my-django-app

九、修改settings

复制代码
DEBUG = False

ALLOWED_HOSTS = ['*']
相关推荐
橘猫云计算机设计2 小时前
基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·小程序·django·毕业设计
金丝猴也是猿4 小时前
如何在Flutter上实现高性能的动态模板渲染
websocket·网络协议·tcp/ip·http·网络安全·https·udp
swift开发pk OC开发4 小时前
Flutter性能优化细节
websocket·网络协议·tcp/ip·http·网络安全·https·udp
网络抓包与爬虫4 小时前
Flutter 环境搭建、常用指令、开发细节
websocket·网络协议·tcp/ip·http·网络安全·https·udp
IT成长日记4 小时前
Elasticsearch安全加固指南:启用登录认证与SSL加密
安全·elasticsearch·ssl
靠近彗星5 小时前
基于 Vue + Django + MySQL 实现个人博客/CMS系统
前端·vue.js·python·mysql·django
橘猫云计算机设计6 小时前
基于ssm的食物营养成分数据分析平台设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
后端·python·信息可视化·数据挖掘·数据分析·django·毕业设计
xujiangyan_7 小时前
nginx的自动跳转https
服务器·nginx·https
色的归属感7 小时前
Flutter完整开发实战详解(三、 打包与填坑篇)
websocket·网络协议·tcp/ip·http·网络安全·https·udp
神奇侠20247 小时前
快速入手-基于DRF的过滤、分页、查询配置(十五)
django·django-filter