安全传输平台项目——简介-需求-方案-演示-部署

在学习安全传输平台项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

10-安全传输平台项目-第01天(简介-需求-方案-演示-部署)

目录:
一、安全传输平台项目
1、项目综述
2、对称加密和非对称加密
3、项目需求分析
4、项目开发流程注意事项
5、项目模块分工
6、数据库配置、防火墙关闭
7、数据库启动
8、数据库TNS服务
9、数据库客户端安装使用
10、数据库项目建表脚本
11、创建用户管理项目理念
12、创建用户管理项目
13、log日志说明
14、配置管理终端配置简述

 

一、安全传输平台项目

1、项目综述

数据安全传输基础设置平台项目(简称,数据传输平台),是一款基础设施类项目,为集团、企业信息系统的提供统一、标准的信息安全服务;解决企业和企业之间,集团内部信息数据的传输安全、消息安全、身份鉴别和认证;成功解决了传统的安全产品部署分散、效率低下、系统脆弱等关键问题。是当前新政策“逻辑大集中”、“业务大集中”下的新需求。

数据传输平台解决方案不仅可面向具有高安全性和高性能需求的电子商务、电子政务领域应用,提高整体系统的稳健性、高效性和成熟性;而且可应用于各种"云"中心、"云"节点,解决数据的本地存储、网络传输、身份认证、数据完整性等安全问题。

》典型应用场景

》项目架构图:

 

2、对称加密和非对称加密

1)加密、解密:
加密三要素:明文、密文、算法、密钥。   明文 ---> 密钥 (通过算法加密) --> 密文。
Y = ax + b

2)加密分类:对称加密(加密的密钥和解密的密钥一样)和非对称加密(加密的密钥和解密的不一样)

 

》简易图:

 

 

3)对称加密:
加密的密钥、解密的密钥 一致。
>优点:
加密速度快,加密效率高。
>缺点:
加密强度低、安全性差。 ----- 密钥的分发困难
>应用场景:
文件加密、数据加密。

4)非对称加密:
加密的密钥、解密的密钥 不一致。 ( 公钥 -- 私钥 )
>优点:
加密速度慢,加密效率低。-----密钥的分发容易
>缺点:
加密强度高、安全性好。
>应用场景:
进行身份鉴别、密钥保护。

5)钱是老百姓的命根子,密钥是金融系统的命根子

6)数字证书和网银KEY
 数字证书是用户的网络身份证,里面含有用户信息、用户的公钥;
 网银EKY是用户的密钥载体介质,里面存储用户的私钥

7)签名和验证签名。
 签名:非对称加密体系中,用私钥签名;相当于盖章!具有法律效力。电子签名法。
 验证签名: 用对端的数字证书中的公钥解密。对解密数据进行比对。

8)Hash算法:对一批数据,进行指纹运算。

9)经典案例:
案例1:客户端A和服务器B双向身份认证
(1)客户端A和客户端B都有自己的密钥对;
(2) 服务器B识别客户端A的身份流程为:A发送明文信息、对明文的签名信息、自己的公钥,将信息打包后,发送给B;B接受信息后,用A的公钥解密签名信息,得到明文2,校验明文是否一致。就可以验证A的身份
(3)同理:客户端A也可以验证服务器的身份。

案例2:思考非对称加密时,为什么用对方的公钥加密数据。

 

3、项目需求分析

专业术语:应用,应用结点;网点;接入;

》一般性需求
    >网点相关
        完成点与点之间数据加密、消息加密解密
        点与点之间的理论模型1:N 或 N:N,级联
        每一个节点都需要进行管理 (网点生命周期的管理)
        总行要验证分行的身份 身份鉴别
    >密钥相关
        适时更换密钥,支持手动更新(密钥的生命周期管理)
        密钥更换异常处理
        密钥管理实时分发、下载、校验、服务  
    >易用性(第三方信息系统和安全传输平台解耦合)
        保证修改的最少(第三方信息系统应该和我们的平台有效的解耦合)

》不同行业的特殊性需求
    加密强度(加密实时性)
    对加密层进行抽象 软件方式加密 硬件方式加密 集群方式加密
    部署简单,部署灵活,能够满足各种各样的社会需求

》其他需求
    审计管理系统,统计加密过程
    报表管理

 

》项目整体架构图:

1)第三方应用app,通过外联接口加密、解密数据。
2)外联接口通过共享内存查找网点密钥。
3)密钥协商服务器密钥协商客户端协商密钥,写共享内存。密钥协商客户端可以是linux平台应用程序、也可以是win平台应用程序。
4)密钥协商服务器配置终端(SecMngAdmin)管理接入的网点应用,完成网点生命周期管理;密钥协商服务器配置终端(SecMngAdmin)可以进行历史密钥管理、审计管理等等。
5)每一个网点都进行编号。

》方案部署效果图:

》方案模块关系:

 

4、项目开发流程注意事项

》学生注意事项:

1)部分学生,太关注自己不会的、看不懂的源码;
正确的做法:学员重视业务流、软件开发思维的训练;有些代码是你看不懂的。
2)部分学生,为实现某一个功能,把相关的知识体系,全复习、学习一遍;效率低下。
正确的做法:用到什么,学什么;不随意扩充。
3)部分学生,总想一下子把功能做的十分完美
正确的做法:迭代开发,先出来一个模型,再说!
4)培养职业的工作习惯
完成领导分配的任务是第一要务;衡量初级、中级程序员的标准就是能不能干活,能不能给公司创造价值;而不是你读了多少书!
——能快速的做出东西的程序员,是企业中的高手!(快速适用环境、快速的学习(向老员工请教工作经验、自己突破技术盲点))
5)有问题,先问“度娘”!
很多公司不愿意要培训出来的学员,他们认为培训出来的学员缺乏动手能力和独立完成任务的能力(钻研、技术攻坚能力)!

》项目开发管理流程:
参考《公司常用项目管理实施流程.pdf》。
参考常见项目开发文档。
1)    项目启动之前,可行性研究已搞定
2)    项目启动会议,项目经理 需求和方案
3)    项目讨论会,概要设计(子系统、模块,数据库脚本、重要的流程图)和详细设计(伪代码、详细的流程图)====》压力最大
4)    编码阶段, 程序员累
5)    测试(单元测试、对接)

 

5、项目模块分工

》完成项目中要问自己的几个问题:

1)项目划分哪些 子系统(模块)
2)各个模块之间如何进行业务通信
3)你负责哪几个模块
4)你所负责的模块中包含哪些技术点。
5)开发过程中碰到过什么问题。以及解决的思路。
6)该问题对你项目开发构成哪些影响。 对后续开发的影响。

 

》项目分组:

1)通用组件      1人
2)后台框架和业务流 1人
3)后台配置管理(MFC)1人
4)前台框架和业务流(MFC)1人
5)外联接口  1人
4人+1人;项目经理协调!

编号

子系统

软件平台

主要技术点

备注

01

统一数据库访问组件libicdbapi

 

Linux

1封装proc访问oracle数据库

2基于数据库连接池

3 linux下线程互斥和同步

接口的封装和设计

02

统一通讯SocketApi组件

Linux、Win

1封装Linux和Win下基本SocketApi

2基于socket 连接池

3 win下和linux下的线程互斥和同步

4 win下和linux下异构通讯

接口的封装和设计

03

统一报文编解码组件

Libmessagereal

Linux、win

1接口的封装和设计

2 win和linux源码的移植

3win和linux平台下动态库的设计与实现 xml json html DER

接口的封装和设计

04

统一共享内存读写组件

 

Linux、win

1接口的封装和设计

2 win和linux进程间通信机制IPC(共享内存、消息队列)

接口的封装和设计

05

密钥协商服务程序SecMngServer

Linux

1 linux服务器框架编写

2各种动态库的集成

3 linux业务流的编写和调试

Linux服务程序系统开发

06

密钥协商客户端程序SecMngClient

Linux、win

1 linux客户端编写

2 Win客户端编写

3各种动态库的集成

4 linux和win业务流的编写和调试

Linux信息系统开发

Win信息系统开发

07

密钥协商服务配置管理终端SecMngServerAdmin

Win

1MFC框架、视图切分和切换

2各种win动态库的集成

3 win和linux的对接和调试

4 win下odbc驱动连接数据库

Win信息系统开发

08

外联接口AppInterface

Linux、win

1接口的封装和设计

接口设计与实现

09

对称密钥加解密接口

Linux、win

1安全基础知识

使用第三方接口

10

安全传输平台数据库脚本

Oracle

1 sql脚本

2 oracle数据库的安装、启动、关闭基本管理

3安全传输平台sql脚本的实施

信息系统数据库解决方案

 

6、数据库配置、防火墙关闭

》Linux 操作系统配置静态IP地址:192.168.1.16  (以此为例)   192.168.111.81

》Linux 操作系统关闭防火墙:
    su - root   密码: 123456 
    命令法:root 用户下 service iptables stop   看到三个绿色的 [确定] 说明关闭成功。  临时生效一次,重启时效。
    图形法:root 用户下 “系统”-->"管理"-->打开“防火墙配置”页面,点击“禁用”,再点击“应用”。

注意:虚拟机右上角点击“叉子”,然后点击“挂起”,不要关机,要不配置可能会失效,又需要重新配置。

 

7、数据库启动

》切换成oracle用户:su - oracle  【不允许使用root用户,启动oracle数据库】  
[oracle@localhost ~]$ sqlplus /nolog   ----- 借助sqlplus工具连接oracle数据库

》使用管理员登录数据库connect /as sysdba        提示:Connected to an idle instance. 说明连接成功。

        show user 可看到 USER is "SYS"  字样。

》启动Oracle数据库:startup            成功提示:

                            ORACLE instance started.
                            
                            Total System Global Area  780824576 bytes
                            Fixed Size            2217424 bytes
                            Variable Size          587205168 bytes
                            Database Buffers      188743680 bytes
                            Redo Buffers            2658304 bytes
                            Database mounted.
                            Database opened.
                                                        
select * from scott.emp; 可查看scott用户下的表。验证是否登录成功

也可以:
        conn scott
        select * from tab;        查看scott用户下有哪些表。

SQL> quit   退出 sqlplus 连接的 Oracle登录。

=========================================
》如果需要关闭数据库,执行如下命令:
关闭Oracle数据库:shutdown immediate
 
   提示:       Database closed.
               Database dismounted.
              ORACLE instance shut down.
=========================================

8、数据库TNS服务

------ 启动 TNS 服务!!必须启动!!!

上图显示已经启动,可以lsnrctl restart重新启动,或lsnrctl stop关闭再lsnrctl start启动。

显示如上图,代表启动成功!

[oracle@localhost ~]$ lsnrctl start 如果出现错误:
方法:
        su - root 切换成root用户,执行 hostname oracle。
        再exit root用户,回到oracle下,重新执行 lsnrctl start命令启动

注意:如果Linux系统关机了,开机需要执行:

》启动数据库:
1. su - oracle
2. sqlplus /nolog        show user;
3. connect /as sysdba        show user;
4. startup            select * from scott.dept;
5. quit;
》启动TNS服务:
lsnrctl start

 

9、数据库客户端安装使用

》Win客户端管理Linux数据库—win10安装SQL Developer

----SQL Developer 安装  创建用户、表。

点击/win32_11gR2_client/目录下的 client/目录,找到setup.exe进行安装。
    1. 自动检测,弹出黑窗。不理他。(等待时间略长)
    2. [INS-13001]环境不满足最低要求 是否要继续? 选择【是】
    3. 在“您需要何种安装类型”页面,选择“管理员(1.02GB)(A)”点击“下一步”
    4. 确认语言为“简体中文”“英文”,点击“下一步”
    5. 确认安装目录位置,无误,点击“下一步”
    6. 它在检查安装环境,很快通过。
    7. 点击【完成】。正式开始安装客户端。安装时间较长。 (安装期间弹出 “.NET Framework ”相关提示,跳过即可。)

----安装结束,启动

    1. 打开SQL Developer 工具。
    2. 弹出窗口 Oracle SQL Developer 小窗口,提示:Enter the full pathname for java.exe 此时它要求你安装jdk
    3. 双击 SQL Developer安装及Linux配置/ 目录下提供的 jdk-6u29-windows-i586.exe安装jdk。
    4. 安装完成后,找到jdk安装目录位置。 (躲避安装目录含有空格、中文)
    注意:安装过程中提示安装jre时不能跳过。
    5. 将java.exe的目录位置放置到上面2步骤中Oracle SQL Developer 弹出的小窗口中。如: C:\Java\jdk1.6.0_29\bin
    6. 点击Browse选中java.exe文件。点击ok进入
    7. 在“连接”字样上 右键“新建连接”
    8. “连接名”自定义,方便自己识别(如:192.168.82.251-oracle)。“用户名”指定数据库用户,“口令”即密码。 管理员用户名、密码均为:sys
    9. 角色default或者SYSDBA,视上面用户名而定。管理员为SYSDBA
    10. “主机名”Oracle服务器所在主机IP地址(ping 通,如:192.168.82.251)。“端口”1521。“SID”orcl。回车即可。

 

10、数据库项目建表脚本

----启动成功,应用脚本创建新用户,及用户表。
    1. 在一个连接名上右键“打开SQL工作表”。
    2. 在弹窗内写SQL语句,点击窗口左上角绿色三角执行。
    3. 写入的若是脚本,应点击绿三角旁边的“运行脚本”。 或者按F5
    4. 执行“安全传输平台oracle项目脚本.sql”,创建用户 SECMNG 和 SECMNGADMIN (创建成功可在左侧“其他用户”下查看)
    5. 创建用户、删除用户后都要刷新才能在客户端访问。
    6. 删除用户:选择连接名下面的“其他用户”,右键,勾选“级联”删除即可。
    7. 【注意】:使用客户端删除用户时,另外一端,不能用其他方式(如:sqlplus工具。)使用该用户访问数据库

》安全传输平台oracle项目脚本如下:

-- 01 创建表空间
-- 注意表空间的路径 根据实际安装环境进行调整

CREATE TABLESPACE ts_seckey_admin 
    LOGGING  
    DATAFILE '/home/oracle_11/app/oradata/orcl/ts_seckeymng_admin.dbf' SIZE 50M 
    EXTENT MANAGEMENT LOCAL;
    

CREATE TABLESPACE ts_seckey_op
    LOGGING 
    DATAFILE '/home/oracle_11/app/oradata/orcl/ts_seckeymng_op.dbf' SIZE 200M
    EXTENT MANAGEMENT LOCAL;
    
ALTER DATABASE DATAFILE '/home/oracle_11/app/oradata/orcl/ts_seckeymng_admin.dbf' AUTOEXTEND ON NEXT   50M MAXSIZE UNLIMITED;
ALTER DATABASE DATAFILE '/home/oracle_11/app/oradata/orcl/ts_seckeymng_op.dbf' AUTOEXTEND ON NEXT  200M MAXSIZE UNLIMITED; 

commit;


-- 02 创建方案 (创建用户)
CREATE USER SECMNG  PROFILE DEFAULT 
    IDENTIFIED BY SECMNG DEFAULT TABLESPACE USERS
    ACCOUNT UNLOCK;

-- 资源和登录权限
GRANT resource TO SECMNG;
GRANT create session TO SECMNG;


-- 创建 网点信息表 --编号 名称 描述 授权码 状态(0可用  1不可用)
CREATE TABLE SECMNG.SECNODE(
    id                     char(4) PRIMARY KEY, 
    name                 VARCHAR2(128) NOT NULL,
     nodedesc              VARCHAR2(512), 
     createtime            date,
     authcode            NUMBER(12),
     state                 NUMBER(4)
)TABLESPACE ts_seckey_admin;

INSERT INTO SECMNG.secnode VALUES('0001', '网银中心', '北京金融街23号', '15-7月-15', 1, 0);
INSERT INTO SECMNG.secnode VALUES('1111', '广东分中心1111', '广州天河金融', '15-7月-15', 1111, 0);
commit;

-- 创建 网点密钥表, 客户端网点 服务器端网点 密钥号 密钥产生时间 密钥状态 
CREATE TABLE SECMNG.SECKYEINFO(
    clientid              char(4) constraint secmng_seckeynode_clientid_fk references SECMNG.SECNODE(id),
    serverid              char(4) constraint secmng_seckeynode_serverid_fk references SECMNG.SECNODE(id),
    keyid                NUMBER(9) PRIMARY KEY, 
    createtime            date,
    state                NUMBER(4),
    seckey                VARCHAR2(512)
)TABLESPACE ts_seckey_admin;

--创建索引 在新的表空间上
CREATE  INDEX SECMNG.IX_SECKYEINFO_clientid ON SECMNG.SECKYEINFO(clientid) TABLESPACE ts_seckey_admin;

commit;


-- keysn序列号
CREATE TABLE SECMNG.KEYSN(
ikeysn         number(12)  PRIMARY KEY
) TABLESPACE ts_seckey_admin;

INSERT INTO SECMNG.KEYSN(ikeysn) VALUES (1);
commit;


CREATE TABLE SECMNG.SRVCFG(
    key                VARCHAR2(64),
    valude            VARCHAR2(128)
)TABLESPACE ts_seckey_admin;
    
-- 创建 交易信息表 交易者 交易时间 交易事件 交易描述 (什么人 在什么时间 干了什么事)
CREATE TABLE SECMNG.TRAN(
    iID                    Number(12) PRIMARY KEY,
     tran_operator         NUMBER,
     trantime            date,
     tranid              NUMBER(4),
     trandesc              VARCHAR2(512)    
)TABLESPACE ts_seckey_op;


-- 创建索引
CREATE INDEX SECMNG.IX_TRAN_tran_operator ON SECMNG.TRAN(tran_operator) TABLESPACE ts_seckey_op;

-- 创建触发器 自增字段
CREATE SEQUENCE SECMNG.SEQiID INCREMENT BY 1 START WITH 1 
    MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE 
    CACHE 20 NOORDER;
    
CREATE OR REPLACE TRIGGER SECMNG.SEQiID
  BEFORE INSERT ON SECMNG.TRAN
    for each row
begin
    select SECMNG.SEQiID.nextval into :new.iID from dual;
end;
/


INSERT INTO SECMNG.TRAN(tran_operator, trantime, tranid, trandesc) VALUES(1, '15-7月-15', 1, '创建网银总节点-测试数据');

commit;

------停止-----
-- 04创建新用户方案     通过 SECMNGUSER1 来访问数据库, 让管理终端系统用   
CREATE USER "SECMNGADMIN"  PROFILE "DEFAULT" IDENTIFIED BY "123456" DEFAULT TABLESPACE "USERS" ACCOUNT UNLOCK;
GRANT "CONNECT" TO "SECMNGADMIN";
GRANT SELECT ANY TABLE TO "SECMNGADMIN";

GRANT resource TO SECMNGADMIN;
GRANT create session TO SECMNGADMIN;


GRANT DELETE ON SECMNG.SRVCFG TO "SECMNGADMIN";
GRANT INSERT ON SECMNG.SRVCFG TO "SECMNGADMIN";
GRANT UPDATE ON SECMNG.SRVCFG TO "SECMNGADMIN";


GRANT DELETE ON SECMNG.SECNODE TO "SECMNGADMIN";
GRANT INSERT ON SECMNG.SECNODE TO "SECMNGADMIN";
GRANT UPDATE ON SECMNG.SECNODE TO "SECMNGADMIN";

GRANT DELETE ON SECMNG.SECKYEINFO TO "SECMNGADMIN";
GRANT INSERT ON SECMNG.SECKYEINFO TO "SECMNGADMIN";
GRANT UPDATE ON SECMNG.SECKYEINFO TO "SECMNGADMIN";

GRANT DELETE ON SECMNG.TRAN TO "SECMNGADMIN";
GRANT INSERT ON SECMNG.TRAN TO "SECMNGADMIN";
GRANT UPDATE ON SECMNG.TRAN TO "SECMNGADMIN";

commit;

    
 
-- Insert Into SECMNG.SECKYEINFO(clientid, serverid, keyid, createtime, state, seckey)
-- values ('1111', '0001', 1, to_date('2015-07-14 21:09:09', 'yyyy-mm-dd hh24:mi:ss'), 0, 'zzz')  ;
安全传输平台oracle项目脚本.sql

增加了两个用户:

》创建的两个用户和5张表之间的关系图:

 

11、创建用户管理项目理念

》创建新用户,测试Linux客户端连接服务器,存储数据库

1. su - root 切换成root用户。
2. useradd test01 ——创建test01用户
3. passwd test01 ——修改test01用户密码  (提示你密码过于简单之类的,可不理)
4. 此时,如切换成test01用户, 连接数据库,执行 sqlplus /nolog 命令,会发现“bash: sqlplus: command not found”错。
   【注意】: 一定使用 "su - test01" 切换。 不能使用 "su test01"

5. 切换成root用户, 执行命令:chmod 777 /home/oracle_11/app/ -R
    如:[root@oracle ~]# chmod 777 /home/oracle_11/app/ -R

6. 将keymng_linux_bin.tar.gz包拷贝至/home/test01目录下。切换到test01用户,解压缩(tar zxvf keymng_linux_bin.tar.gz)得到 bin/ lib/ log/ etc/ 四个目录。

7. 将压缩包中 etc/bash_profile 文件 放置在 /home/test01 目录下,替换掉 .bash_profile文件(
[test01@localhost etc]$ cp bash_profile /home/test01/.bash_profile)。  ---- 配置符合项目需求的环境变量。

8. source .bash_profile 或者 exit test01用户,再重新登陆,使.bash_profile生效。【重要!】
   通过 修改环境变量的方法给动态连接器,指定加载动态库的目录位置。
   如果,指定成功。 ldd ./keymngserver   或   ldd ./keymngcliet   显示出所有该可执行文件运行所需要的 动态库目录位置。
   否则,会看到 “====> not found” 字样。

9. sqlplus scott/11@orcl 可在test01用户下 连接数据库。【注意】:此时如忘记添加“@orcl”会看到 ORA-12547: TNS:lost contact 错误。

10. 也可以测试 SECMNGADMIN用户: sqlplus SECMNGADMIN/123456@orcl  或者 SECMNG用户: sqlplus SECMNG/SECMNG@orcl

11. 执行bin/keymngserver文件,会检测共享内存,如不存在则自动创建,并初始化共享内存,创建连接池等一系列初始化操作。

12. keymngserver 是一个守护进程,可使用ps -u test01查看。  mystop 结束守护进程。

13. 开新窗口,执行 bin/keymngclient文件,显示字符交互界面。此时 log/ 中会对应产生/更新日志。

14. 守护进程可以借助kill命令用pid来杀死,也可以使用 bin/mystop脚本文件结束运行。

15. ipcs命令可以查看共享内存。ipcrm shm 262151(该号为shmid) 可以释放共享内存。也可以使用 bin/cleanipc 脚本清理。

 

12、创建用户管理项目

按上边的前10个步骤完成。

(1)oracle用户和test01用户的作用和区别是什么?

oracle用户:
    redhat linux 在安装 oracle 数据库期间,自动创建的用户。
test01用户:
    新创建  的一个专门针对该项目使用的用户。 --- 配置环境变量,让该用户可以连接oracle数据库。

(2)第7步.bash_profile文件替换前后的区别是什么?

原始配置(.bash_profile):

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

项目提供的配置(etc/bash_profile):

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

umask 022 
ORACLE_BASE=/home/oracle_11/app
ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/db_1
ORACLE_SID=orcl
PATH=$PATH:./:$HOME/bin:$ORACLE_HOME/bin
LD_LIBRARY_PATH=./lib:$HOME/lib:/usr/lib:$ORACLE_HOME/lib 
#LANG=C 
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH 

NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; export NLS_LANG

(3)第6步解压的4个目录(bin/ lib/ log/ etc/)分别存放的是什么?

bin/(可执行文件) lib/(库文件)log/(日志文件) etc/(配置文件)

 

13、log日志说明

log/ 中会对应产生/更新日志。

例如:log下socketlib.log文件如下(分析可知,func bind()此种错误是端口复用产生的。)

 

14、配置管理终端配置简述

 

 

在学习安全传输平台项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

posted on 2020-07-22 21:37  Alliswell_WP  阅读(1359)  评论(0编辑  收藏  举报

导航