nginx卸载教程(nginx卸载ssl)
nginx卸载ssl
以Nginx对OpenSSL的使用为入口,来分析OpenSSL的API的模型。OpenSSL是两个库,如果以握手为目的只会使用libssl.so这个库,但是如果有加密的需求,会使用libcrypto.so这个库。Nginx中对于OpenSSL的使用大部分是直接使用的libssl.so的接口API的,但是仍然会有少部分使用libcrypto.so。除了Nginx,本章还会分析一个s_server程序,通过这个程序的设计,能够对OpenSSL的内部架构有一个初探。
Nginx的Stream中SSL的实现
Nginx的Stream Proxy中有对于SSL的Terminator的支持。这个终端的意思是可以在Nginx层面把SSL解掉,然后把明文传输给后端。也就是说支持SSL的Nginx的Stream模块实际上是一个TLS的握手代理,将TLS信道在本地解了再发送到后端,所以整个过程是一个纯粹的握手过程,至于ALPN这种功能就需要后端与TLS的配合才可以,所以这种行为在stream 的SSL中是不能支持的。
这是一个Nginx的Stream SSL模块相关的函数列表,主要的Stream模块特有的功能也都就在这个列表里了。可以看到除去配置和模块的整体初始化函数,只剩下一个连接初始化,ssl的入口handler和握手的handler。显然握手的handler是入口handler的深入部分。鉴于Nginx的异步模型,可以很容易的想到是Nginx在收到一个连接的时候首先使用ssl_handler作为通用入口,在确定是SSL连接之后就会切换到handshaker_handler作为后续的握手handler函数。
但是Nginx在支持SSL的时候并不是这样的轻松,因为大量的SSL相关函数在ngx_event_openssl.c文件里,这个文件里的函数被HTTP模块和Stream模块或者其他需要SSL支持的模块共同使用。包括Session Cache等Nginx重新实现的OpenSSL功能。通过这个例子可以看到如果要自己实现一个SSL支持,我们需要两个东西,一个是SSL的用户端的接口封装库(ngx_event_openssl.c),一个是如何把封装库的逻辑嵌入到我们的代码流程的逻辑。Nginx作为一个强大的负载均衡设备,这一部分的接口嵌入应该是要追求的最小化实现的。也就是说Stream模块相关的代码越少越好(ngx_stream_ssl_module.c)。所以我们可以看到几乎就几个钩子函数的定义。
无论是Stream还是HTTP模式,整个TLS握手的核心函数都是ngx_ssl_handshake函数。我们看这个函数就能看到一个企业级的握手接口的使用案例。以下是一个简化版的函数流程:
以上是一个同步版本的大体逻辑,异步版本的就没有显示。可以看到主要的SSL握手的入口函数是SSL_do_handshake。如果握手正常,函数返回1之后,使用SSL_get_current_cipher或得到服务器根据客户端发来的密码学参数的列表选择得到的密码学套件。这里会返回服务器选择的那个,如果返回为空,那么就代表了服务器没有找到匹配的套件,连接就不能继续。SSL_CIPHER_description函数输入活的指针,返回一个字符串格式的套件的描述信息,Nginx这里使用了这个信息,最后一步就是查找当前的Session Cache中是否有可以复用的逻辑。这里只是一个查询,并不是就是复用的决定。因为是否复用是在连接建立之前由配置决定的,如果Nginx配置了不使用OpenSSL的Session Cache,这个查询就会一直返回0,表示没有被复用。而且这里查询的OpenSSL中是否有复用,并不代表Nginx内部是否有复用,Nginx内部还有一套自己的Session Cache实现,但是使用SSL_开头的API函数都是OpenSSL的接口。
这个简单的接口可以看出对OpenSSL的API的使用的一些端倪。OpenSSL提供的API非常多,我们写一个简单的示例程序仅仅会用到几个最简单的接口,例如SSL_new等。但是一个正式的项目,会用到很多细节的API接口。由于OpenSSL只会暴露他认为应该暴露的API函数出来给调用者使用,其他的函数调用者是用不到的,并且OpenSSL内部的结构体外部也是不能使用的,所以使用者所有的行为都是要基于API进行设计。
OpenSSL分为libcrypto.so和libssl.so两个库。在使用TLS握手的时候,主要的调用API都位于ssl.h文件中定义,都是SSL_开头的API。但是这并不意味着只能调用libssl.so的接口,高级的用户并不是想要使用OpenSSL的TLS握手功能,完全可以直接调用libcrypto.so里面的各种各样的密码学库。总的来说libssl.so是一个TLS握手库,而libcrypto.so是一个通用的密码学的库。只是libssl.so的握手使用的密码学是完全依赖libcryto.so中提供的。也就是因此,在使用TLS握手的时候,是基本上不会直接用到libcrypto.so中的API的。
s_server
openssl s_server是一个简单的SSL服务器,虽然说是简单,但是其中包含了大部分用户SSL编程需要考虑的东西。证书,密码,过期校验,密码学参数定制,随机数定制等等。这是一个功能性的程序,用于验证openssl内部的各项SSL握手服务器的功能是否能够正常使用,并不能用于直接服务于线上业务。
s_server程序启动的第一步是解析各种参数,在正常运作的时候,第一步是加载key。
我们看到OpenSSL内部调用的函数和在使用OpenSSL库接口的时候是不一样的,OpenSSL的子程序会调用一些内部的接口。比如这里使用了ENGINE_init,直接初始化了底层的引擎系统。ENGINE系统是OpenSSL为了适配下层不同的数据引擎设计的封装层。有对应的一系列API,所有的ENGINE子系统的API都是ENGINE_开头的。一个引擎代表了一种数据计算方式,比如内核的密码学套件可以有一个专门的OpenSSL引擎调用到内核的密码学代码,QAT硬件加速卡也会有一个专门的引擎,OpenSSL自己的例如RSA等加密算法的实现本身也是一个引擎。这里在加载key的时候直接初始化一个引擎,这个引擎在init之前还要先调用一个setup_engine函数,这个函数能够设置这个将要被初始化的引擎的样子。s_server之所以要自己用引擎的API接口是因为它支持从命令行输入引擎的参数,指定使用的引擎。
可以看到,如果指定了auto,就会加载所有默认的引擎。如果指定了特定ID的引擎,就只会加载特定的引擎。一个引擎下面是所有相关的密码学的实现,加载key就是一个密码学层面的操作,所以也要使用ENGINE提供的接口。事实上,最后都是分别调用了对应的ENGINE的具体实现,这中间都是通过方法表的指针的方式完成的。ENGINE定义的通用的接口还有很多,这里只是用到了加载密钥。
表内都是对不同的EVP_CIPHER和EVP_MD的接口的定义。
我们回到加载key的函数,继续阅读发现一个 key = bio_open_default(file, 'r', format); 这个key是一个BIO类型的指针,这个BIO类型的指针就是另外一个OpenSSL的子系统,所有的IO操作都会被封装到这个子系统之下。例如这里使用的文件IO,用于从文件中读取key的结果。BIO被设计为一个管道式的系统,类似于Shell脚本中见到的管道的效果。有两种类型的BIO,一种是source/sink类型的,就是我们最常见的读取文件或者Socket的方式。另外一种是管道BIO,就是两个BIO可以通过一个管道BIO连接起来,形成一个数据流。所以BIO的方式是一个很重量级的IO系统的实现,只是目前只是被OpenSSL内部使用的比较多。
继续向下阅读加载密钥的函数,会发现PEM_read_bio_PrivateKey函数,这一步就是实际的从一个文件中读取密钥了。我们现在已经有了代表文件读写的BIO,代表密码学在程序中的封装EVP,中间缺的桥梁就是文件中密钥存储的格式。这里的以PEM_开头的函数就代表了PEM格式的API。PEM是密码学的存储格式,PEM_开头的API就是解析或者生成这种格式的API,当然它需要从文件中读取,所以参数中也会有BIO的结构体,PEM模块使用BIO模块提供的文件服务按照定义的格式将密钥加载到内存。
OpenSSL的所有apps都会共享一些函数,这些函数的实现都在一个apps.c文件中,以上的加载密钥的函数也是其中的一个。s_server程序在调用完load_key之后会继续调用load_cert来加载证书。load_cert使用的子系统与load_key非常类似,类似的还有后面的load_crl函数,CRL(Certificate revocation lists)是CA吊销的证书列表,这项技术已经基本被OCSP淘汰。OpenSSL还提供一个随机数文件的功能,可以从文件中加载随机数。
s_server在加载完相关的密码学相关参数后,就会开始创建上下文,SSL_CTX_new函数的调用就代表了上下文的创建。这个上下文是后面所有SSL连接的母板,对SSL的配置设置都会体现在这个上下文的设置中。随后,s_server会开始设置OpenSSL服务器支持的TLS握手版本范围,分别调用SSL_CTX_set_min_proto_version和SSL_CTX_set_max_proto_version两个函数完成所有操作。
OpenSSL在共享TLS握手的Session时,需要生成一个Session ID,默认的情况,OpenSSL会在内部决定Session ID怎么生成。但是也提供了用户设置这个生成算法的API。s_server程序调用SSL_CTX_set_generate_session_id函数设置一个自己的回调函数,在这个回调函数中就可以完成Session ID的设置,从而取代掉OpenSSL自带的内部Session ID的生成器。OpenSSL在证书协商的时候还会允许外部的库使用者动态的修改采用的证书,这个机制是通过SSL_CTX_set_cert_cb来设置证书回调函数实现的。s_server也有这个函数的设置。程序走到这里,基本能看到OpenSSL的一个很大的特性,就是大部分的内部流程都会提供一个回调函数给使用者来注册,使用者可以按照自己的需求取代掉或者修改OpenSSL内部的功能。显然这个s_server程序是一个功能展示的程序,会用上大量的函数回调点。比如紧接着调用的SSL_CTX_set_info_callback函数就是在生成SSL的时候调用的,可以用于使用者获得状态。不但OpenSSL外部的机制可以在用户端设置,用户甚至可以设置加密算法的参数。例如s_server就会接下来根据用户是否提供DH参数来设置内部的参数。如果调用了SSL_CTX_set_dh_auto就意味着参数是使用内部的机制生成,这也是默认的行为。但是仍然可以提前提供,主要是为了性能的考虑,比如提前提供DH的大素数,DH算法在运算的过程中需要一个取模操作,这个取模是对一个大素数进行取模的,而这个大素数默认是在运行的时候动态生成的,但是我们可以提供这个素数,从而以牺牲一定的安全性为代价换来性能的提高。
s_server在设置完整个上下文之后,就会进入Socket监听和处理的模式。由于BIO框架包含了Socket的能力,所以这一步本质上就是调用BIO的接口。
这是一个典型的OpenSSL的Socket逻辑。BIO_sock_init这个函数在Linux下就是空函数,没有意义。BIO_lookup是一个通用的获取地址的方法,对于Socket就是IP:PORT的字符串,对于文件是文件的目录。BIO_socket意思就相当于在使用Socket变成的socket函数。BIO_listen也就自然对应listen函数,BIO_accept_ex和BIO_closesocket也是类似的意思。整个流程其实就与一个普通的Socket流程没有太大区别,只是BIO多了一层封装。因为OpenSSL是个跨平台的库,这层封装更多的意义在于用在跨平台的应用上的。
通过一个简单的s_server程序的分析可以看到整个OpenSSL的主要设计思路。它对外封装了不同的模块,例如ENGINE,EVP,BIO之类的封装。在大部分的流程上都提供了回调函数API,使用者可以用回调函数来修改OpenSSL原来的逻辑或者获得其他的信息。在使用OpenSSL的时候一般需要遵循类似的流程,就是创建上下文,然后配置上下文,然后运行服务。
nginx卸载ssl配置
https配置步骤:
1、申请SSL证书;
2、在Nginx服务器上面安装SSL证书:
(1)将证书文件(.crt文件)放到指定目录下,例如:/usr/local/nginx/conf/cert
(2)将私钥文件(.key文件)放到指定目录,例如/usr/local/nginx/conf/ssl
(3)若为CA机构签发证书,需要将中间证书文件放到指定目录下,例如/usr/local/nginx/conf/certs
3、修改Nginx配置文件:
(1)打开/etc/nginx/nginx.conf文件
(2)在http部分增加如下配置
ssl on;
ssl_certificate /usr/local/nginx/conf/cert/xxx.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/xxx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
(3)如果是CA证书,还需要增加配置
ssl_client_certificate /usr/local/nginx/conf/certs/xxx.crt;
4、重新加载Nginx配置文件:nginx -s reload
5、测试配置是否正确:
(1)curl -k https://www.xxx.com (测试https是否正常)
(2)openssl s_client -connect www.xxx.com:443 (检查ssl证书是否安装正确)
nginx卸载重装
我的回答:zabbix5.0装完显示zabbix的首页。
显示nginx的默认页是因为Nginx的index.html是欢迎页面,可以把Nginx的index.html删除。
nginx卸载命令
404NotFound问题是由于请求的网页不存在,是服务器端的问题,如果你不是管理员,无法修复此问题(当然也可能是你的网址输入有误,检查网址是否正确)如果你是网站的管理员,则查看相关的文件是否被删除,或服务器配置问题.
nginx卸载linux
卸载教程如下:
1、通过ps -ef|grep nginx命令查到nginx的pid
(我的已经被我杀掉了,假设还有,pid为123456)
2、使用kill -9 123456杀掉进程(如果有多个pid可以直接用空格隔开写在后面就行)
3、使用find / -name nginx命令查找有关nginx的文件夹
4、使用rm -rf #路径#删除(比如rm -rf /www/server/panel/vhost/nginx),我这边太多了。。。我就直接开sftp删了
路径#删除(比如rm -rf /www/server/panel/vhost/nginx`),我这边太多了。。。我就直接开sftp删了
nginx ssl 卸载
SSL证书使用的是SSL协议,而SSL握手是SSL协议当中最重要的一部分。SSL握手涉及算法协议,证书交换以及使用共享算法的密钥交换。因此,SSL握手是安全设计的过程的名称,该过程有助于通过加密密钥对客户端-服务器通信进行加密。使用服务器和客户端双方共同同意的两种共享算法中的一种在服务器和客户端之间交换这些密钥。因此,如果在此过程中发生任何故障,则会显示SSL握手失败错误。SSL握手失败解决方法有哪些?
1、检查系统的时间和日期
如果系统的时间和日期设置有误,则会引起SSL握手失败。此时的解决方法是设置正确的系统时间和日期。Windows用户可以通过以下方式重置日期和时间:
1)点击“ Windows”按钮。
2)输入“日期和时间设置”,然后选择相关选项。
3)如果您希望自动设置时间,请切换“自动设置时间”按钮。
4)如果您使用VPN或出于其他任何原因希望手动设置时间,请单击“手动设置日期和时间”选项。
2、需要更新Web浏览器
在任何时候,您都必须使操作系统和应用程序保持最新。仅此一项就可以防止许多错误,包括“ SSL握手失败”错误。Chrome用户可以通过打开Chrome浏览器并单击右上角的三个垂直点来进行检查。接下来,点击“更多工具”,如果您的Chrome浏览器需要更新,则可以在此处找到一个。否则,仅表示您的Chrome浏览器是最新的。
3、停用最近安装的插件或扩展
大多数浏览器插件和扩展都来自未知的开发人员,并且很有可能包含恶意代码。因此,如果您最近安装了其中之一并且遇到SSL握手错误,请尝试将其卸载并清除缓存和cookie。完成此操作后,请尝试重新连接到同一网站,并检查是否现在可以建立安全连接。
4、协议不匹配
由于服务器和客户端之间的协议不匹配,许多人面临SSL握手问题。基本上,有多个版本的SSL / TLS协议可用,并且要成功进行握手,Web服务器和浏览器必须支持同一版本,这一点至关重要。
通常,当服务器运行的协议版本远高于客户端计算机的协议版本时,就会出现SSL握手错误。例如,如果服务器使用TLS 1.3版本,而浏览器使用TLS 1.1,则SSL握手很可能失败,因为服务器不支持以前的版本。您可以通过将浏览器重置为默认设置并使用不带任何扩展名的浏览器来解决此问题。
以上就是常见的SSL握手失败的原因及解决方法,还有一种就是与服务器相关的原因,如果SSL证书没有正确安装,也会导致SSL握手失败,这种情况下可以联系SSL证书服务商以寻求有效的解决方案。
nginx卸载并删除配置
404NotFound问题是由于请求的网页不存在,是服务器端的问题,如果你不是管理员,无法修复此问题(当然也可能是你的网址输入有误,检查网址是否正确)如果你是网站的管理员,则查看相关的文件是否被删除,或服务器配置问题
nginx卸载重装配置没变
宝塔服务器 CPU 占用率高的问题,通常有以下几种可能的原因和解决方案:
1. 程序代码问题:可能是网站程序逻辑处理有问题,导致 CPU 占用率高,此时需要对程序代码进行排查和修复。
2. 服务器负载过高:可能是服务器压力过大,导致资源不足, CPU 占用率高,此时需要对服务器进行优化,提高硬件配置或考虑升级服务器。
3. 其他因素:可能是病毒或木马等网络安全问题,也有可能是进程阻塞或系统错误等问题,需要对系统进行检查和调试,找出具体问题所在,并进行相应处理。
具体解决方法建议您参考以下步骤:
1. 查看运行中的进程和服务:使用 top、htop 等命令查看服务器运行中的进程和当前 CPU 占用率,找出占用 CPU 资源高的进程并进行关闭。
2. 分析日志文件:查看服务器日志文件,如 Nginx、Apache、PHP-fpm 等日志文件,找出问题所在,并进行修复。
3. 进行性能优化:对服务器进行性能优化,如缓存设置、gzip 压缩、图片优化、CDN 加速等,减轻服务器压力。
4. 安全检查:进行服务器安全检查,防止病毒、木马等网站安全问题影响服务器性能。
注:以上方法仅供参考,也需要注意对服务器进行备份并谨慎操作,防止造成数据丢失等问题。如问题依旧无法解决,建议您寻求专业技术支持。
nginx卸载证书
控制面板 -> 程序 -> 启动或关闭 Windows 功能 -> 取消 'Internet Information Services' 选项 -> 确定 进入卸载流程,重启后生效
本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.