SSL工具

https://www.myssl.cn/tools/
https://myssl.com/certtools.html


Let’s Encrypt 单域名证书

注意:SAN证书可以把多个域名合并到一个证书里面,只要在申请时使用多个-d指定域名即可。

Let’s Encrypt 证书是免费的,3个月有效,只需要到期前续一下时间就能延长到3个月。

这里一共有3种方法。其中两种是依赖于Python环境的(letsencrypt自动脚本),需要安装很多组件且对pip有版本要求,在大天朝是无法安装的。这里介绍一种简单的方法
打开:https://certbot.eff.org
选择适合你的系统和web的选项

然后按提示运行Install栏的那些命令,其他不要运行。

安装完成后,开始获取证书

certbot certonly --webroot -w /var/html/www -d www.leolan.top,leolan.top

运行该命令后会自动获取证书,并保存到**/etc/letsencrypt/live/**下。如果是一机多站的这种情况可能是会报错的,只有第一个能获取证书,之后的其他都获取不了,这时先停止第一个网站(把ssl的相关配置从配置文件中删掉,等获取后再配置回去),再运行命令,成功之后再启动网站。

然后修改虚拟主机配置文件,在server栏加入以下部分(对应的路径改为你自己的路径):

listen  443 default ssl;

ssl_certificate /etc/letsencrypt/live/www.leolan.top/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.leolan.top/privkey.pem;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!NULL:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!ADH:!DH:!DHE";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;

保存重启Nginx就应该生效了,如果网页中引用了http资源,也是没有小绿标的,可以写一句话测试用的html文件进行测试。
之后续期再次运行获取证书的命令就行了,会自动续期的,可以添加到定时任务中(增加到定时任务要注意一机多站这种情况)。
关于续期,官方提供了命令:先用这个命令测试:certbot renew --dry-run,没有问题的话运行这个命令续期:certbot renew。一切正常的话就可以加入到计划任务里面了。


常用命令:

certbot run                      #(默认)运行在当前的Web服务器中获取并安装证书
certbot certonly                 #获取或续订证书,但不要安装
certbot renew                    #续订续订所有以前获得的近期到期的证书

certbot certificates                            #证书显示有关Certbot的证书信息
certbot revoke --cert-path [cret.pem路径]        #撤销(回收)吊销证书(提供--cert-path)
certbot delete --cert-name [证书名]              #删除证书

参考:
http://www.tuicool.com/articles/iqyERrr
https://www.cnblogs.com/zcx-python/p/7089243.html


Let’s Encrypt 通配符证书

这里使用github上的一个开源项目做自动申请和续期。

注意:通配符证书和普通证书的协议不一样,不兼容;通配符只是针对二级域名,不针对主域名,即www.leolan.top和主域名leolan.top是两个证书,www可以换成其他的字符,都属于二级域名。

注意:SAN通配符证书可以把多个域名合并到一个证书里面,只要在申请时使用多个-d指定域名即可。

# 准备工作
git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au.git /opt/certbot-letencrypt
cd /opt/certbot-letencrypt
wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
chmod +x au.sh

# 登录阿里云域名所在账户,获取AK、SK,保存到脚本中
# https://help.aliyun.com/knowledge_detail/38738.html
vim au.sh

# 测试环境,域名改为自己的域名,这里使用python(详见github描述)
# 提示是否绑定IP,输入Y(应该只是防止滥用,并不会真的绑定IP)
# 过程中可以看到域名多了一个TXT记录,完成后记录被删除;提示成功
./certbot-auto certonly -d *.leolan.top --manual --preferred-challenges dns --dry-run --manual-auth-hook "/opt/certbot-letencrypt/au.sh python aly add" --manual-cleanup-hook "/opt/certbot-letencrypt/au.sh python aly clean"

# 正式申请(去除了--dry-run参数)
./certbot-auto certonly -d *.leolan.top --manual --preferred-challenges dns --manual-auth-hook "/opt/certbot-letencrypt/au.sh python aly add" --manual-cleanup-hook "/opt/certbot-letencrypt/au.sh python aly clean"

# 证书有效期是30天,添加定时任务,自动续期(这里设置每5天运行一次)
0 1 */5 * * /opt/certbot-letencrypt/certbot-auto renew --manual --preferred-challenges dns --manual-auth-hook "/opt/certbot-letencrypt/au.sh python aly add" --manual-cleanup-hook "/opt/certbot-letencrypt/au.sh python aly clean"

# 然后把证书配置好或保存

**自己构建的Dockerfile:**https://www.leolan.top/index.php/posts/222.html
**Docker运行:**https://jingsam.github.io/2018/10/12/lets-encrypt.html

参考资料:
https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
https://www.jianshu.com/p/c5c9d071e395
https://blog.csdn.net/smiles13/article/details/84523797
https://jingsam.github.io/2018/10/12/lets-encrypt.html


StartSSL证书

StartSSL证书有效期是一年的,但是到期后必须手工续期,且申请流程复杂,不建议。
StartSSL申请全过程:http://www.laozuo.org/2823.html


SSL的相关参数

ssl

语法:ssl [on|off]
默认值:ssl off
使用字段:main, server
开启HTTPS。

ssl_certificate

语法:ssl_certificate file
默认值:ssl_certificate cert.pem
使用字段:main, server
为这个虚拟主机指定PEM格式的证书文件,这个文件可以包含其他的证书和服务器私钥,同样,密钥也必须是PEM格式,0.6.7版本以后,这里的路径为相对于nginx.conf的路径,而不是编译时的prefix路径。

ssl_certificate_key

语法:ssl_certificate_key file
默认值:ssl_certificate_key cert.pem
使用字段:main, server
为这个虚拟主机指定PEM格式的私钥,0.6.7版本以后,这里的路径为相对于nginx.conf的路径,而不是编译时的prefix路径。

ssl_client_certificate

语法:ssl_client_certificate file
默认值:none
使用字段:main, server
指出包含PEM格式的CA(root)证书,它将用于检查客户端证书。

ssl_dhparam

语法:ssl_dhparam file
默认值:none
使用字段:main, server
该指令指定了一个PEM格式的文件,其中包含的Diffie-Hellman密钥协商协议密码参数,它将用于服务器和客户端之间的会话密钥交换。

ssl_ciphers

语法:ssl_ciphers file
默认值:ssl_ciphers ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
使用字段:main, server
指出为建立安全连接,服务器所允许的密码格式列表,密码指定为OpenSSL支持的格式,如:
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
查看当前安装的OpenSSL版本所支持的密码列表,可以使用下列命令:openssl ciphers

ssl_crl

语法:ssl_crl file
默认值:none
使用字段:http, server
指令可用于0.8.7以后版本,用于指定一个证书吊销列表的文件名,使用PEM格式,它将用于检查证书吊销状态。

ssl_prefer_server_ciphers

语法:ssl_prefer_server_ciphers [on|off]
默认值:ssl_prefer_server_ciphers off
使用字段:main, server
依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码。

ssl_protocols

语法:ssl_protocols [SSLv2] [SSLv3] [TLSv1]
默认值:ssl_protocols SSLv2 SSLv3 TLSv1
使用字段:main, server
指定要开启的SSL协议。

ssl_verify_client

语法:ssl_verify_client on|off|optional
默认值:ssl_verify_client off
使用字段:main, server
启用客户端身份验证,参数“optional”将使用客户端提供的证书检查它的权限(0.8.7与0.7.63版本之前为”ask”)。

ssl_verify_depth

语法:ssl_verify_depth number
默认值:ssl_verify_depth 1
使用字段:main, server
设置服务器按顺序检查客户端提供的证书链的长度。

ssl_session_cache

语法:ssl_session_cache off|none|builtin:size and/or shared:name:size
默认值:ssl_session_cache off
使用字段: main, server
设置储存SSL会话的缓存类型和大小。

缓存类型为:
off - 强制关闭:nginx告诉客户端这个会话已经不能被再次使用。
none - 非强制关闭:nginx告诉客户端这个会话可以被再次使用,但是nginx实际上并不使用它们,这是为某些使用ssl_session_cache的邮件客户端提供的一种变通方案,可以使用在邮件代理和HTTP服务器中。

builtin - 内建OpenSSL缓存,仅能用在一个工作进程中,缓存大小在会话总数中指定,注意:如果要使用这个类型可能会引起内存碎片问题,具体请查看下文中参考文档。

shared - 缓存在所有的工作进程中共享,缓存大小指定单位为字节,1MB缓存大概保存4000个会话,每个共享的缓存必须有自己的名称,相同名称的缓存可以使用在不同的虚拟主机中。
可以同时使用两个缓存类型,内建和共享,如:

ssl_session_cache  builtin:1000  shared:SSL:10m;

但是,使用共享缓存而不使用内建缓存将更为有效。
0.8.34版本之前如果ssl_verify_client设置为'on'或者'optional'时这里不能设置为none或off。
注意,为了让缓存恢复工作,你需要在服务器为SSL socket配置默认服务器,例如:

listen [::]:443 ssl default_server;

这是因为缓存的重用发生在任何TLS扩展启用之前,即服务器名称认证(Server Name Identification (SNI)),来自一个指定IP地址(服务器)的ClientHello信息请求一个会话ID,为了使其工作,默认(default)服务器必须被设置。
最好的方法是将ssl_session_cache放到http字段,这样下面配置的server/虚拟主机字段都将得到相同的SSL缓存配置。

ssl_session_timeout

语法:ssl_session_timeout time
默认值:ssl_session_timeout 5m
使用字段: main, server
设置客户端能够反复使用储存在缓存中的会话参数时间。

ssl_engine

语法:ssl_engine
指定使用的OpenSSL引擎,如Padlock,例如PadLock,下列命令可以查看你的OpenSSL支持的引擎:openssl engine

Debian系统在版本0.9.8o的OpenSSL运行后返回:

openssl engine

(padlock) VIA PadLock (no-RNG, no-ACE)
(dynamic) Dynamic engine loading support

内置变量

ngx_http_ssl_module模块支持下列内建变量:
$ssl_cipher - 返回建立的SSL连接中那些使用的密码字段。
$ssl_client_serial - 返回建立的SSL连接中客户端证书的序列号。
$ssl_client_s_dn - 返回建立的SSL连接中客户端证书的DN主题字段。
$ssl_client_i_dn - 返回建立的SSL连接中客户端证书的DN发行者字段。
$ssl_protocol - 返回建立的SSL连接中使用的协议。
$ssl_session_id - 需要0.8.20以上版本。
$ssl_client_cert
$ssl_client_raw_cert
$ssl_client_verify - 如果客户端证书审核通过,这个变量为“SUCCESS”。

非标准错误代码

这个模块支持一些非标准的HTTP错误代码,可以借助error_page指令用于调试:
495 - 检查客户端证书时发生错误。
496 - 客户端无法提供必须的证书。
497 - 传送到HTTPS的普通请求。
在请求完整的废除后调试完成,并取得一些内置变量,如:$request_uri, $uri, $arg等。


参考:
安装SSL证书:http://zh.wikihow.com/%E5%AE%89%E8%A3%85SSL%E8%AF%81%E4%B9%A6
在Docker里的web开启SSL:https://en.abnerchou.me/Blog/75027340


IIS 部署证书

证书申请

购买证书时需要生成的CSR代码
参考:https://www.namecheap.com/support/knowledgebase/article.aspx/467/67/how-do-i-generate-a-csr-code


SSL证书导入

中间证书导入(有中间证书就导入,没有就不用导入)(在 Microsoft IIS 8 中安装中级证书的步骤):https://sg.godaddy.com/zh/help/microsoft-iis-8-ssl-4951

安装证书:(在 Microsoft IIS 8 中安装 SSL 证书的步骤):
https://sg.godaddy.com/zh/help/microsoft-iis-8-ssl-4951
https://support.comodo.com/index.php?/Knowledgebase/Article/View/1159/0/certificate-installation-microsoft-iis-8x

域名证书导入:IIS中选择“证书管理”-->import然后按提示完成。


IIS+Nginx

一般IIS都是经过nginx反代的。

nginx反向代理IIS一键部署https(本人未测试,搬运)

:: $Name:         win-ssl.bat
:: $Version:      v1.0
:: $Function:     nginx反向代理IIS一键部署https
:: $Author:       Ropon
:: $organization: west.cn
:: $Create Date:  2017-3-10
:: $Description:  1、nginx反向代理IIS一键部署https
::                2、支持预装环境及纯净版使用iis web环境
::                3、部署后nginx配置文件推荐放到d:/nginx/conf/vhost/目录下
::                4、证书路径d:/nginx/ssl 以域名命名www.test.com.crt www.test.com.key
::                5、部署后nginx站点配置文件名为www.test.com.conf
::
@echo off&setlocal enabledelayedexpansion
set base=http://download.myhostadmin.net/php/ioncube
if not exist %cd%\wget.exe (
	echo.
	echo 缺少wget.exe程序
	explorer.exe http://download.myhostadmin.net/wget.exe
	echo 正在下载wget.exe必要程序,请保存到当前目录下
	echo 下载完成后按任意键继续
	pause
)
if not exist %cd%\wget.exe (
	echo.
	echo 自动头下载失败请访问 http://download.myhostadmin.net/wget.exe 手动下载
	echo 并保存到当前目录
	echo.
	pause
	exit
)
echo.
if not exist %cd%\sed.rar (
	call:download http://download.myhostadmin.net/memcache/sed.rar %cd%\sed.rar
	"C:\Program Files\WinRAR\rar.exe" x -inul -o+  %cd%\sed.rar   %cd%  -y
	cls
)

goto menu

:menu
echo.
echo Nginx反向代理IIS,部署多个https站点
echo.
set path=D:\nginx\
set sslpath=D:\ssl
C:\Windows\system32\cacls D:\ssl /e /g nginx:f /T
if not exist %sslpath% (
	md %sslpath%
)	
call:existfloder %path%

echo 请输入域名: 
echo.比如:www.test.com

set /p domain=

set "URL=http://ip.chinaz.com/getip.aspx"  
for /f "tokens=2 delims='" %%a in ('wget -q "%URL%" -O -') do (  
    set "PublicIP=%%a"  
) 

set b=listen "%PublicIP%":443;

echo 是否我司申请证书,若是需要先合并: 
echo.
echo.
echo   1  是
echo   2 不是
echo.

set /p crtchoice=
if %crtchoice% ==1 goto crt11
if %crtchoice% ==2 goto crt22

:crt11

echo 请输入crt1证书路径: 
echo.比如:d:\www.test.com.cer

:crta
set /p crt1=
call:existssl %crt1% crta
C:\Windows\system32\more "%crt1%" > "%cd%\%domain%.crt"
set crttemp=%crt1:~0,-4%
set crt2temp=%crttemp%_ca.crt
set keytemp=%crttemp%.key
if exist %crt2temp% ( C:\Windows\system32\more "%crt2temp%" >> "%cd%\%domain%.crt" ) else ( echo 请输入crt2证书路径: 
	echo.比如:d:\www.test.com_ca.crt
	echo.
	:crtb
	set /p crt2=
	call:existssl %crt2% crtb
	C:\Windows\system32\more "%crt2%" >> "%cd%\%domain%.crt"
)
copy "%cd%\%domain%.crt" "%sslpath%\%domain%.crt" >nul 2>nul
set crt="d:\\ssl\\%domain%.crt"

goto key11

:crt22

echo 请输入crt证书路径: 
echo.比如:d:\www.test.com.crt
:crtc
set /p crt3=
call:existssl %crt3% crtc

copy "%crt3%" "%sslpath%\%domain%.crt" >nul 2>nul
set crt="d:\\ssl\\%domain%.crt"

goto key11

:key11
if exist %keytemp% ( copy "%keytemp%" "%sslpath%\%domain%.key" >nul 2>nul ) else ( echo 请输入key证书路径: 
echo.比如:d:\www.test.com.key
:keya
	set /p key1=
	call:existssl %key1% keya
	copy "%key1%" "%sslpath%\%domain%.key" >nul 2>nul
)

set key="d:\\ssl\\%domain%.key"

copy "%path%conf\temp.conf" "%path%conf\vhost\%domain%.conf" >nul 2>nul

%cd%\sed\sed.exe -i "/ssl/a\	%b%" %path%conf\vhost\%domain%.conf
%cd%\sed\sed.exe -i "/listen/a\	server_name %domain%;" %path%conf\vhost\%domain%.conf
%cd%\sed\sed.exe -i "/server_name/a\	ssl_certificate %crt%;" %path%conf\vhost\%domain%.conf
%cd%\sed\sed.exe -i "/ssl_certificate/a\	ssl_certificate_key %key%;" %path%conf\vhost\%domain%.conf
%cd%\sed\sed.exe -i "/listen 80;/a\	server_name %domain%;" %path%conf\vhost\%domain%.conf

echo.
echo 正在重载nginx服务……
echo.
C:\Windows\system32\net stop nginxd
C:\Windows\system32\net start nginxd
echo 安装完成,请关闭窗口
echo.
echo.
echo   1 继续部署其他域名
echo   2 清理下载文件并提出
echo   0 退出
echo.
set /p choice=
if %choice% ==1 goto menu
if %choice% ==2 goto del
if %choice% ==0 goto exit

:download
echo.
echo 正在下载所需组件
echo.
%cd%\wget.exe %~1 -O %~2
goto:eof

:existssl
echo.
if not exist %~1 (
	echo.
	echo 输入证书路径不对,请重新输入
	echo.
	goto %~2
)

:existfloder
echo.
if not exist %~1 (
	call:download http://download.myhostadmin.net/nginx.rar d:\nginx.rar
	"C:\Program Files\WinRAR\rar.exe" x -inul -o+  d:\nginx.rar  d:\  -y
	echo.
	echo 核实当前服务器没有安装Nginx反向代理环境
	echo.
	echo 请手动运行d:\nginx\install.bat 初始化环境
	echo.
	pause
	exit
)
goto:eof

:del
echo.
echo 正在清理之前下载文件及文件夹……
echo.
for /f "delims=" %%i in ('dir /b /a-d /s "sed*"') do del %%i  
rd /s/q %cd%\sed
pause
exit

:exit
exit

原文:https://www.idiyrom.com/28.html


SSL 安全级别

检测网址:
https://myssl.com
https://www.ssllabs.com/ssltest/index.html

Windows系统

IIS快速修改加密方法:https://www.mf8.biz/windows-server-2016-iis-https-h2/

关闭加密级别比较低的协议,缓解贵宾犬(POODLE)等漏洞的影响。以下内容保存为reg文件,合并注册表即可。关闭了SSL3.0、TLS1.0、RC4;其他是操作系统默认的;一定要重启系统才能生效。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
"DisabledByDefault"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"DisabledByDefault"=dword:00000001
  
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 128/128]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 40/128]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 56/128]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie-Hellman]
"Enabled"=dword:00000000

参考:
https://samrueby.com/2015/06/08/how-to-disable-sslv3-and-rc4-ciphers-in-iis/
https://www.digicert.com/ssl-support/iis-disabling-ssl-v3.htm
https://support.microsoft.com/zh-cn/help/3206898/enabling-iis-manager-and-web-deploy-after-disabling-ssl3-and-tls-1-0
https://blog.csdn.net/kirawoo/article/details/78737242
一键脚本:https://www.cnblogs.com/JangoJing/p/6769759.html


Linux

修改为以下内容可以获取A+的安全级别。
Nginx修改SSL配置,ssl_ciphers修改为以下内容。

# 证书文件
ssl_certificate /xxxxxxxxxxx/fullchain.pem;
ssl_certificate_key /xxxxxxxxxxx/privkey.pem;

# 生成dhparam.pem文件:openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

# Nginx SSL算法
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!NULL:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!ADH:!DH:!DHE";

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

# 重用加密的会话
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4  valid=300s;
resolver_timeout 10s;

# 增加HSTS文件头
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

参考:https://www.cnblogs.com/kamil/p/6268141.html
https://blog.myssl.com/https-security-best-practices


文章作者: Leo
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeoLan的小站
Web服务器 ssl HTTPS
喜欢就支持一下吧