| 
							
								 | 
							
							#!/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()
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							  |