备份-基础ssl通信
This commit is contained in:
200
Server/Server.vcxproj
Normal file
200
Server/Server.vcxproj
Normal file
@@ -0,0 +1,200 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>17.0</VCProjectVersion>
|
||||
<ProjectGuid>{8A3F7B5E-9D2C-4E1A-B3F6-7C8D9E0F1A2B}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>Server</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>..\..\$(Configuration)\x86\</OutDir>
|
||||
<IntDir>$(OutDir)obj\$(SolutionName)\$(ProjectName)\</IntDir>
|
||||
<TargetName>$(SolutionName)-$(ProjectName)</TargetName>
|
||||
<IncludePath>..\..\..\Dependent\openssl\14x\x86\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>..\..\..\Lib\HPSocket\x86\static;..\..\..\Dependent\openssl\14x\x86\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>..\..\$(Configuration)\x86\</OutDir>
|
||||
<IntDir>$(OutDir)obj\$(SolutionName)\$(ProjectName)\</IntDir>
|
||||
<TargetName>$(SolutionName)-$(ProjectName)</TargetName>
|
||||
<IncludePath>..\..\..\Dependent\openssl\14x\x86\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>..\..\..\Lib\HPSocket\x86\static;..\..\..\Dependent\openssl\14x\x86\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>..\..\$(Configuration)\x64\</OutDir>
|
||||
<IntDir>$(OutDir)obj\$(SolutionName)\$(ProjectName)\</IntDir>
|
||||
<TargetName>$(SolutionName)-$(ProjectName)</TargetName>
|
||||
<IncludePath>..\..\..\Dependent\openssl\14x\x64\include;..\_lib\protobuf\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>..\..\..\Lib\HPSocket\x64\static;..\..\..\Dependent\openssl\14x\x64\lib;..\_lib\protobuf\lib\X64;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>..\..\$(Configuration)\x64\</OutDir>
|
||||
<IntDir>$(OutDir)obj\$(SolutionName)\$(ProjectName)\</IntDir>
|
||||
<TargetName>$(SolutionName)-$(ProjectName)</TargetName>
|
||||
<IncludePath>..\..\..\Dependent\openssl\14x\x64\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>..\..\..\Lib\HPSocket\x64\static;..\..\..\Dependent\openssl\14x\x64\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_SSL_SUPPORT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>HPSocket_U_Debug_x86.lib;crypt32.lib;libssl.lib;libcrypto.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_SSL_SUPPORT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>HPSocket_U_Release_x86.lib;crypt32.lib;libssl.lib;libcrypto.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_SSL_SUPPORT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>HPSocket_U_Debug_x64.lib;crypt32.lib;libssl.lib;libcrypto.lib;ws2_32.lib;libprotobuf.lib
|
||||
;libprotoc.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_SSL_SUPPORT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<AdditionalDependencies>HPSocket_U_Release_x64.lib;crypt32.lib;libssl.lib;libcrypto.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="pch.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\Include\HPSocket\HPTypeDef.h" />
|
||||
<ClInclude Include="..\..\..\Include\HPSocket\SocketInterface.h" />
|
||||
<ClInclude Include="..\..\..\Src\SSLHelper.h" />
|
||||
<ClInclude Include="..\..\..\Src\SSLServer.h" />
|
||||
<ClInclude Include="..\..\..\Src\TcpServer.h" />
|
||||
<ClInclude Include="pch.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
4
Server/Server.vcxproj.user
Normal file
4
Server/Server.vcxproj.user
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup />
|
||||
</Project>
|
||||
255
Server/main.cpp
Normal file
255
Server/main.cpp
Normal file
@@ -0,0 +1,255 @@
|
||||
// TestEcho-SSL-Console Server
|
||||
// 基于HP-Socket的SSL服务器控制台程序
|
||||
|
||||
#include "pch.h"
|
||||
|
||||
// SSL证书配置(来自helper.cpp)
|
||||
|
||||
// 服务端证书
|
||||
static const char* g_s_lpszPemCert = R"(-----BEGIN CERTIFICATE-----
|
||||
MIIEJjCCAw6gAwIBAgIBAzANBgkqhkiG9w0BAQsFADB7MQswCQYDVQQGEwJDTjEL
|
||||
MAkGA1UECAwCR0QxCzAJBgNVBAcMAkdaMQwwCgYDVQQKDANTU1QxDzANBgNVBAsM
|
||||
Bkplc3NtYTETMBEGA1UEAwwKamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJARYPbGRj
|
||||
c2FhQDIxY24uY29tMCAXDTI0MDYyNjA1MTY1NFoYDzIyNDMwNzA5MDUxNjU0WjBu
|
||||
MQswCQYDVQQGEwJDTjELMAkGA1UECAwCR0QxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
|
||||
CwwGSmVzc21hMRMwEQYDVQQDDApqZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9s
|
||||
ZGNzYWFAMjFjbi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7
|
||||
x3ilLjZtH2ZKuofj4FpVl/IF2yDI5503YQbwllxp7kNEaqTyjJUgmLlZBbwHQzTD
|
||||
xfPk/nZ/m3xUHsVjwXMZqNNufgtSLaBoK4CvBAOTkELphIOZdJYPpuaU66W0phjG
|
||||
VM2R4EFm/rTXddZ7N6sq3fYEL0bxqUJ6fW/+0QhdNSwfdevdAHgOmGkrTj5rILJ8
|
||||
A7FwbkcuV5vBWZ+9ZhNG4csqAjH5LLLCn5hJdhE9WqUp+slfIuXE5vZGDpCQrcc5
|
||||
I1qWt8VNfdwzaBDL/hXl7pAiVpZRvQxyJgbUMLr2QrYFwrPkgpncU7R7AyT/C0tO
|
||||
vgPVZb+IGqbf+NrbHEk3AgMBAAGjgb8wgbwwHwYDVR0jBBgwFoAU3j3PjwPLCagP
|
||||
hw1NCALqefZAmhQwCQYDVR0TBAIwADALBgNVHQ8EBAMCBPAwYgYDVR0RBFswWYIJ
|
||||
bG9jYWxob3N0ggpqZXNzbWEub3JnggwqLmplc3NtYS5vcmeCCmplc3NtYS5jb22C
|
||||
DCouamVzc21hLmNvbYIKamVzc21hLm5ldIIMKi5qZXNzbWEubmV0MB0GA1UdDgQW
|
||||
BBRZ97VSkfue5s8/OkYvUe+lXUgsHzANBgkqhkiG9w0BAQsFAAOCAQEAvM1QrhTL
|
||||
/I1ws4fozKQlfmd3S0AdfFJX4BMTbp88proWpjrNZt6ZJ3EETHKcXu0z4gn3jWy6
|
||||
1d8bDCytYQXjpG3Na7Ym5jc/E7wc+XUCUxlW41G/HnaLaIVccmRbyxMOWkr3yUX1
|
||||
tc8rxUSKWzZBmYtJ49QzIvNzDuoLklE44g8XuqsZZlOZ2wRWJxc/hDG0MkKhRnc1
|
||||
mqeaoY/79QZNE1RvX/aRRJoSl7NQ00/rMP8MU6OMzPvbIsMVK2uT+BVZG0RZJXaG
|
||||
ikQJvxYZrDVZdRZL6tWPtS2wI49KkzGHNH4S1Fni/dDq3P2rxzisMY1gtKQLeVYY
|
||||
eTQDDybjTWWiTg==
|
||||
-----END CERTIFICATE-----
|
||||
)";
|
||||
// 服务端私钥
|
||||
static const char* g_s_lpszPemKey = R"(-----BEGIN ENCRYPTED PRIVATE KEY-----
|
||||
MIIFHTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIgAqUxS2ufB0CAggA
|
||||
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBD8E9f397mpmzmM9zYTWt2DBIIE
|
||||
wIo2i0YH7cT/WCLmSnVvpsbayeo0mbVUFS4xp2VerQUS+UXHlrrOFeKU8NYfG6SS
|
||||
m+3PXksvUlDV9iGT0p/w2Fm1GVKhE7UAeTJkff7KWi2pc926DUbYxhFOUNyCnrQS
|
||||
pWCdV6M/243A0kHg6kIlSblsXjzKMC6eSlh2FGa7M7my9A+nu0WGOqvazkOm/8jk
|
||||
h20xmB3t/Qa8NQp59E9oLXs5+CokIKL17+PmtBKeKpQBxAUtFjcqRAugIiNpPjOS
|
||||
K99cY/Tt1C8ugMIsFH1/4HzFDYiSDRZ630dKOzBruprHVkIvQXI1CW6edPlfFZKG
|
||||
yHeH95kigPVWUxWwluwALVmlPwD4h/GWHGOS7HH6x4ubStogjmC2B9f4VQCd6YRu
|
||||
lee3cdDvdqLoRCoU48SoM/+RMR3NpF508ulWhKrDZ4eGcqdUYrx3rWVyOrmfMJDe
|
||||
kfckGKnhCA1hL3wb/HQuAs2st2lDKBwsYIsOc8UXhueRFHKk+W0O/5kureMPF14O
|
||||
DAxqAW3meHq7CLY8WuqatptIrJVDT8Wkbx47tXhLapTwlI0Cbf2AGfJIWSGmM+VF
|
||||
I5l13pW2tycQnAXzSdd0y9wE0df/EoyXfIJeEfBNkzVhkIIC3KmOiI8BCnei6UR9
|
||||
jun4+6aeFyfGybJ04ybixXyFsCsVUa5QcnhPwJvC8QsVFpuzOttQ5cf4Xn57DyxT
|
||||
4CzWieJ6iQpfAJahRcj/4O6KRmWuMPpkK8XsCgzOYM1MxETq4HbqXEp68KiT6Q9r
|
||||
jEAmbfZ8NdPvAPZ/iXKtA/eaMDDy6EbzDscUBg/TSxsF286F+wH2kXvkbwL2E/zh
|
||||
LsTcjsGUdNKxlDJaivi7dDbSzxzvcDYRh+8Bd/vOw2gJF2ohwXXp3GKTVu71LS+b
|
||||
YruQ55Lauh761ziI/z7qZw9ko8erb5vcsqLh9duqtxTBnQEd05ufFhNnXk4Vq8Cp
|
||||
hr30Qy5sJ7TUuAVs2RSuGHd0Q5l8NGLjQwtkDx5ofizZKQOMWTq8S3IA98QyFka0
|
||||
e+XaGGQ/KZJciIoCkuzAX4mn/aIffMldQIEg5ybslBc326SdTe52ex5YlmUuyvbO
|
||||
zDotjC/eeQEFvq6Xb14N+u7mp8xL5Dlro79aL3VNNGa3lgKP6lWtMjgcyZrWMdc4
|
||||
xaV0sVbfRO8Pj4y3cZGXol529zSNSIc7wT2/kyvF6RgJEcluAIPAJ8ea6CXKqDfe
|
||||
sYZDL1emVoKMoFy3YsnEI+py2xxSsU4pjGPanZZaVfrDfw3qnQWPovfOx5fVc6Om
|
||||
U55o3nbR5wtjPlQmcdVlT/fo7m/OUu3UgdjyLFcljeezJGeskJ3PMYbSsi7Mf+yF
|
||||
/BEW6IfqicjG9TTMGzNACHH0iqAzW6lrC60UXMRIXrs/segt3+r5JqfRH58TMBR+
|
||||
O5xk6sjOL4uqTsJRmbMapHf4tPxli8PdvNYN+YTQ4tlwazrckwgC5TJ3GA5JM3Ox
|
||||
ZQIIKf1joemxq/VT2IpsqwMY67KC4OUOiRy471guGdljFarACe8rzZh8BHONveJd
|
||||
XDgM0oPBkR9z4BGlfbBgAG0bIRNSXp8yGaZMiuIHbI8I4TnR84KgyUUscsIlH03A
|
||||
8PQL73vd5pU4jC6WdOaXwkI=
|
||||
-----END ENCRYPTED PRIVATE KEY-----
|
||||
)";
|
||||
// CA证书
|
||||
static const char* g_s_lpszCAPemCert = R"(-----BEGIN CERTIFICATE-----
|
||||
MIID2TCCAsGgAwIBAgIUM8TTtPU+ejzffYXCcs/zZsU7OuIwDQYJKoZIhvcNAQEL
|
||||
BQAwezELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJHWjEMMAoG
|
||||
A1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzbWExEzARBgNVBAMMCmplc3NtYS5vcmcx
|
||||
HjAcBgkqhkiG9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTAgFw0yNDA2MjYwNTA0NDNa
|
||||
GA8yMjcwMTEyNDA1MDQ0M1owezELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQsw
|
||||
CQYDVQQHDAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzbWExEzARBgNV
|
||||
BAMMCmplc3NtYS5vcmcxHjAcBgkqhkiG9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCC
|
||||
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAML+v79+aLQt0Za0dTIZHI5B
|
||||
NDs0g5G8bhdOTlW/kNWflaziZ3GY6d6nJSkQ5e29kyFKxlOD6Gls6bOJ86U71u4R
|
||||
bCmoFvRTDH4q2cJ/+PbiioLpNveDG6lnRCs9JNRQoJrkpRo6urnVnAdsIf6UFjLI
|
||||
dlByNMPGYJ0V8/oKJG5Vu5gcbZV0jVA5+tswkH/zquexEXoKvp18mcwl+pNc/LwW
|
||||
0WnGj0uoJjxHg4GsS78PASjhxMR/2d/1OpgPauldFaNHjVPtaLqJnuejwA6M6Sz8
|
||||
iFPybAQAMpHL9W8kf08jtbnFvnm4ibUkQL5h+OJoIEQa9AVZOSoFG2/g5Zcn8X8C
|
||||
AwEAAaNTMFEwHQYDVR0OBBYEFN49z48DywmoD4cNTQgC6nn2QJoUMB8GA1UdIwQY
|
||||
MBaAFN49z48DywmoD4cNTQgC6nn2QJoUMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
|
||||
hvcNAQELBQADggEBALJnYrYBSZLyYX14FQ04zxG3AX0CtQzNOOa7LDrr+H8Ly+nK
|
||||
qS87gg2njMVZH1zM2demtMwydR/F2Ui8ggaduMvc9h5YgQKEwYl8KarJEY03oZoe
|
||||
zbQGBxCXpDOtMs1vujzcl/iZbSzwEDF3g4la5U8q4MlmfGFKz9CJbvoxecqYA206
|
||||
nNbW2XZsW/xMiQv6iAw5iP/LOR9HAyxcvXIsL790nfcgnTYLmyP254Dj4outc6R+
|
||||
PA+f/c1FvkbUBTR5vJt2tsvHcNU218rY2hyOIhDmZeUWprqBO19sUk3scLbVPr3+
|
||||
WEWEl2XaCekKuPtAnMgVQuFsocXGyiuIhkOe5Z4=
|
||||
-----END CERTIFICATE-----
|
||||
)";
|
||||
|
||||
static const int g_s_iVerifyMode = SSL_VM_PEER | SSL_VM_FAIL_IF_NO_PEER_CERT;
|
||||
static const char* g_s_lpszKeyPassword = "123456";
|
||||
static const LPCTSTR ADDRESS = _T("0.0.0.0");
|
||||
static const USHORT PORT = 5555;
|
||||
|
||||
// 读取文件内容到字节向量
|
||||
inline std::vector<unsigned char> readFile(const std::string& path) {
|
||||
std::ifstream f(path, std::ios::binary);
|
||||
return std::vector<unsigned char>(std::istreambuf_iterator<char>(f), {});
|
||||
}
|
||||
// 服务器监听器类
|
||||
class CServerListener : public CTcpServerListener
|
||||
{
|
||||
public:
|
||||
virtual EnHandleResult OnPrepareListen(ITcpServer* pSender, SOCKET soListen) override
|
||||
{
|
||||
TCHAR szAddress[100];
|
||||
int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
|
||||
USHORT usPort;
|
||||
pSender->GetListenAddress(szAddress, iAddressLen, usPort);
|
||||
|
||||
std::wcout << L"[服务器] 准备监听: " << szAddress << L":" << usPort << std::endl;
|
||||
return HR_OK;
|
||||
}
|
||||
|
||||
virtual EnHandleResult OnAccept(ITcpServer* pSender, CONNID dwConnID, UINT_PTR soClient) override
|
||||
{
|
||||
TCHAR szAddress[100];
|
||||
int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
|
||||
USHORT usPort;
|
||||
pSender->GetRemoteAddress(dwConnID, szAddress, iAddressLen, usPort);
|
||||
|
||||
std::wcout << L"[服务器] 客户端连接: ID=" << dwConnID
|
||||
<< L", 地址=" << szAddress << L":" << usPort << std::endl;
|
||||
|
||||
return HR_OK;
|
||||
}
|
||||
|
||||
virtual EnHandleResult OnHandShake(ITcpServer* pSender, CONNID dwConnID) override
|
||||
{
|
||||
std::wcout << L"[服务器] SSL握手完成: ID=" << dwConnID << std::endl;
|
||||
return HR_OK;
|
||||
}
|
||||
|
||||
virtual EnHandleResult OnReceive(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength) override
|
||||
{
|
||||
std::string strData((char*)pData, iLength);
|
||||
std::cout << "[服务器] 接收到消息: ID=" << dwConnID << ", 内容=\"" << strData << " from client\"" << std::endl;
|
||||
|
||||
// 回显数据给客户端
|
||||
std::string response = "hello!";
|
||||
std::vector<unsigned char> fileData = readFile("Client.exe");
|
||||
//if (pSender->Send(dwConnID, fileData.data(), (int)fileData.size()))
|
||||
if (pSender->Send(dwConnID, (const BYTE*)response.c_str(), (int)response.size()))
|
||||
{
|
||||
std::cout << "[服务器] 发送数据,长度:" << response.size() << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "[服务器] 发送响应失败" << std::endl;
|
||||
}
|
||||
|
||||
return HR_OK;
|
||||
}
|
||||
|
||||
virtual EnHandleResult OnSend(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength) override
|
||||
{
|
||||
return HR_OK;
|
||||
}
|
||||
|
||||
virtual EnHandleResult OnClose(ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode) override
|
||||
{
|
||||
if (iErrorCode == SE_OK)
|
||||
{
|
||||
std::wcout << L"[服务器] 客户端断开: ID=" << dwConnID << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::wcout << L"[服务器] 客户端连接错误: ID=" << dwConnID
|
||||
<< L", 错误码=" << iErrorCode << std::endl;
|
||||
}
|
||||
|
||||
return HR_OK;
|
||||
}
|
||||
|
||||
virtual EnHandleResult OnShutdown(ITcpServer* pSender) override
|
||||
{
|
||||
std::wcout << L"[服务器] 服务器关闭" << std::endl;
|
||||
return HR_OK;
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
// 设置控制台UTF-8编码和locale
|
||||
SetConsoleOutputCP(CP_UTF8);
|
||||
std::locale::global(std::locale(""));
|
||||
std::wcout.imbue(std::locale(""));
|
||||
|
||||
std::wcout << L"========================================" << std::endl;
|
||||
std::wcout << L" HP-Socket SSL Server 控制台演示程序" << std::endl;
|
||||
std::wcout << L"========================================" << std::endl;
|
||||
std::wcout << std::endl;
|
||||
|
||||
// 创建监听器和服务器
|
||||
CServerListener listener;
|
||||
CSSLServerPtr server(&listener);
|
||||
|
||||
// 初始化SSL上下文
|
||||
std::wcout << L"[服务器] 正在初始化SSL环境..." << std::endl;
|
||||
if (!server->SetupSSLContextByMemory(g_s_iVerifyMode, g_s_lpszPemCert, g_s_lpszPemKey,
|
||||
g_s_lpszKeyPassword, g_s_lpszCAPemCert))
|
||||
{
|
||||
std::wcout << L"[服务器] SSL初始化失败!错误码: " << server->GetLastError() << std::endl;
|
||||
std::wcout << L"按任意键退出..." << std::endl;
|
||||
_getch();
|
||||
return 1;
|
||||
}
|
||||
std::wcout << L"[服务器] SSL环境初始化成功" << std::endl;
|
||||
|
||||
// 启动服务器
|
||||
std::wcout << L"[服务器] 正在启动服务器..." << std::endl;
|
||||
if (!server->Start(ADDRESS, PORT))
|
||||
{
|
||||
std::wcout << L"[服务器] 启动失败!错误码: " << server->GetLastError() << std::endl;
|
||||
std::wcout << L"按任意键退出..." << std::endl;
|
||||
_getch();
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::wcout << L"[服务器] 服务器启动成功,监听端口: " << PORT << std::endl;
|
||||
std::wcout << L"[服务器] 按 'Q' 键停止服务器..." << std::endl;
|
||||
std::wcout << std::endl;
|
||||
|
||||
// 等待用户输入
|
||||
while (true)
|
||||
{
|
||||
if (_kbhit())
|
||||
{
|
||||
char ch = _getch();
|
||||
if (ch == 'q' || ch == 'Q')
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
Sleep(100);
|
||||
}
|
||||
|
||||
// 停止服务器
|
||||
std::wcout << L"[服务器] 正在停止服务器..." << std::endl;
|
||||
if (server->Stop())
|
||||
{
|
||||
std::wcout << L"[服务器] 服务器已停止" << std::endl;
|
||||
}
|
||||
|
||||
// 清理SSL上下文
|
||||
server->CleanupSSLContext();
|
||||
|
||||
std::wcout << L"按任意键退出..." << std::endl;
|
||||
_getch();
|
||||
|
||||
return 0;
|
||||
}
|
||||
5
Server/pch.cpp
Normal file
5
Server/pch.cpp
Normal file
@@ -0,0 +1,5 @@
|
||||
// pch.cpp: 与预编译标头对应的源文件
|
||||
|
||||
#include "pch.h"
|
||||
|
||||
// 当使用预编译的头时,需要使用此源文件,编译才能成功。
|
||||
33
Server/pch.h
Normal file
33
Server/pch.h
Normal file
@@ -0,0 +1,33 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
// 静态库定义(必须在包含HPSocket之前)
|
||||
#define HPSOCKET_STATIC_LIB
|
||||
|
||||
// SSL 支持定义(必须在包含HPSocket之前)
|
||||
#define _NEED_SSL
|
||||
#define _SSL_SUPPORT
|
||||
|
||||
// 防止winsock.h被包含,使用winsock2.h
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
|
||||
// 标准库
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <locale>
|
||||
#include <conio.h>
|
||||
#include <tchar.h>
|
||||
#include <vector>
|
||||
#include <filesystem>
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
|
||||
// Windows 头文件
|
||||
#include <windows.h>
|
||||
#include <winsock2.h>
|
||||
|
||||
// HP-Socket 头文件
|
||||
#include "../../../Include/HPSocket/HPSocket.h"
|
||||
#include "../../../Include/HPSocket/HPSocket-SSL.h"
|
||||
Reference in New Issue
Block a user