|
|
#!/usr/bin/env python3
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
"""
|
|
|
使用OpenSSL命令行工具创建简单的自签名证书
|
|
|
不依赖Python的cryptography库
|
|
|
"""
|
|
|
|
|
|
import os
|
|
|
import subprocess
|
|
|
import sys
|
|
|
|
|
|
def create_ssl_dir():
|
|
|
"""创建ssl目录"""
|
|
|
if not os.path.exists("ssl"):
|
|
|
os.makedirs("ssl")
|
|
|
print("✅ 创建ssl目录")
|
|
|
|
|
|
def create_certificate_with_openssl():
|
|
|
"""使用OpenSSL命令创建证书"""
|
|
|
print("🔑 使用OpenSSL创建自签名证书...")
|
|
|
|
|
|
# 检查OpenSSL是否可用
|
|
|
try:
|
|
|
subprocess.run(["openssl", "version"], check=True, capture_output=True)
|
|
|
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
|
print("❌ OpenSSL未安装或不在PATH中")
|
|
|
print("📝 请安装OpenSSL或使用其他方法")
|
|
|
return False
|
|
|
|
|
|
# 创建私钥
|
|
|
key_cmd = [
|
|
|
"openssl", "genrsa",
|
|
|
"-out", "ssl/key.pem",
|
|
|
"2048"
|
|
|
]
|
|
|
|
|
|
# 创建证书
|
|
|
cert_cmd = [
|
|
|
"openssl", "req", "-new", "-x509",
|
|
|
"-key", "ssl/key.pem",
|
|
|
"-out", "ssl/cert.pem",
|
|
|
"-days", "365",
|
|
|
"-subj", "/C=CN/ST=Beijing/L=Beijing/O=Distance System/CN=localhost"
|
|
|
]
|
|
|
|
|
|
try:
|
|
|
print(" 生成私钥...")
|
|
|
subprocess.run(key_cmd, check=True, capture_output=True)
|
|
|
|
|
|
print(" 生成证书...")
|
|
|
subprocess.run(cert_cmd, check=True, capture_output=True)
|
|
|
|
|
|
print("✅ SSL证书创建成功!")
|
|
|
print(" 🔑 私钥: ssl/key.pem")
|
|
|
print(" 📜 证书: ssl/cert.pem")
|
|
|
return True
|
|
|
|
|
|
except subprocess.CalledProcessError as e:
|
|
|
print(f"❌ OpenSSL命令执行失败: {e}")
|
|
|
return False
|
|
|
|
|
|
def create_certificate_manual():
|
|
|
"""提供手动创建证书的说明"""
|
|
|
print("📝 手动创建SSL证书说明:")
|
|
|
print()
|
|
|
print("方法1 - 使用在线工具:")
|
|
|
print(" 访问: https://www.selfsignedcertificate.com/")
|
|
|
print(" 下载证书文件并重命名为 cert.pem 和 key.pem")
|
|
|
print()
|
|
|
print("方法2 - 使用Git Bash (Windows):")
|
|
|
print(" 打开Git Bash,进入项目目录,执行:")
|
|
|
print(" openssl genrsa -out ssl/key.pem 2048")
|
|
|
print(" openssl req -new -x509 -key ssl/key.pem -out ssl/cert.pem -days 365")
|
|
|
print()
|
|
|
print("方法3 - 暂时使用HTTP:")
|
|
|
print(" 运行: python main_web.py")
|
|
|
print(" 注意: HTTP模式下手机摄像头可能无法使用")
|
|
|
|
|
|
def main():
|
|
|
"""主函数"""
|
|
|
create_ssl_dir()
|
|
|
|
|
|
# 检查证书是否已存在
|
|
|
if os.path.exists("ssl/cert.pem") and os.path.exists("ssl/key.pem"):
|
|
|
print("✅ SSL证书已存在")
|
|
|
return
|
|
|
|
|
|
print("🔍 尝试创建SSL证书...")
|
|
|
|
|
|
# 尝试使用OpenSSL
|
|
|
if create_certificate_with_openssl():
|
|
|
return
|
|
|
|
|
|
# 提供手动创建说明
|
|
|
create_certificate_manual()
|
|
|
|
|
|
|