所有的软件都安装到/opt目录下。
事实证明,2024年最新版apache-2.4.59+openssl-1.1.1w+php-8.3.6是可以支持XP系统下的IE6和IE8浏览器正常访问https的,还可以支持到Win2000下的IE5和IE6的https(前提是https证书必须采用sha1RSA签名算法,这样才能成功被IE浏览器识别),请注意文章里面标红的重点部分。
还能启用HTTP2,XP系统下的Firefox52.9esr和Opera36.0.2130.80浏览器都支持HTTP2。
Win2000下的IE5和IE6以及XP下的IE6使用的加密算法是SSL3.0,支持HTTP/1.1。
XP下的IE8和Vista下的IE9使用的加密算法是TLS1.0,支持HTTP/1.1。
XP下的Firefox52.9esr和Opera36.0.2130.80使用的加密算法是TLS1.2,支持HTTP/2。
XP下的Mypal68.14.1b浏览器是Firefox68的分支浏览器,使用的加密算法是TLS1.3,支持HTTP/2。
XP、Vista、Win7、Win8和Win8.1下的Supermium122.0.6261.152浏览器是Chrome122的分支浏览器,使用的加密算法是TLS1.3,支持HTTP/2。
Win7下的IE10和IE11使用的加密算法是TLS1.2,支持HTTP/1.1。
Win7下最新版的Firefox115.10esr,使用的加密算法是TLS1.3,支持HTTP/2。
XP系统的IE8访问不了https网站的原因:
(1)网站通过SSLProtocol语句禁用了TLS1.0。
(2)网站通过SSLCipherSuite语句禁用了3DES算法。
(3)网站使用的是高版本的openssl软件,并且编译openssl软件的时候没有用enable-weak-ssl-ciphers选项开启3DES算法。
XP系统的IE6访问不了https网站的原因:
(1)网站通过SSLProtocol语句禁用了SSL3.0。
(2)网站通过SSLCipherSuite语句禁用了3DES算法。
(3)网站使用的是高版本的openssl软件,并且编译openssl软件的时候没有用enable-ssl3 enable-ssl3-method选项开启SSL3.0,以及enable-weak-ssl-ciphers选项开启3DES算法。
【源码编译安装openssl-1.1.1w】
cd ~
mkdir haha
cd haha
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz
tar xf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/opt/openssl-1.1.1w enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers shared
make
sudo make install
cd ..
将/opt/openssl-1.1.1w/lib加入系统库路径:
建立新文件/etc/ld.so.conf.d/mynewssl.conf,内容为/opt/openssl-1.1.1w/lib。
执行sudo ldconfig即可生效。
测试SSLv3是否正常:
/opt/openssl-1.1.1w/bin/openssl s_client -connect zh.purasbar.com:443 -ssl3
可以看到命令可以正常执行。
enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers这三个选项非常重要。
enable-ssl3 enable-ssl3-method这两个选项是开启SSLv3,供IE6浏览器使用。
CentOS8自带的OpenSSL 1.1.1k在编译的时候就没加SSLv3选项,这导致了IE6默认情况下没法访问CentOS8自带的apache服务器的https。IE6默认情况下只开启了SSLv3,没有开启TLSv1.0。IE6只有在Internet选项里面勾选了TLS1.0才能访问CentOS8自带apache服务器的https网站。
enable-weak-ssl-ciphers这个选项是开启3DES算法,只有开启了这个算法,IE8浏览器才能访问https。
【源码编译安装nghttp2-1.61.0(不需要绑定openssl)】
wget https://github.com/nghttp2/nghttp2/releases/download/v1.61.0/nghttp2-1.61.0.tar.gz
tar xf nghttp2-1.61.0.tar.gz
cd nghttp2-1.61.0
./configure --prefix=/opt/nghttp2-1.61.0 --enable-shared
make
sudo make install
cd ..
【源码编译安装apache-2.4.59】
先关闭系统中自带的apache服务器:
sudo service apache2 stop
wget https://dlcdn.apache.org/httpd/httpd-2.4.59.tar.gz
tar xf httpd-2.4.59.tar.gz
cd httpd-2.4.59/srclib
wget https://dlcdn.apache.org/apr/apr-1.7.4.tar.gz
tar xf apr-1.7.4.tar.gz
mv apr-1.7.4 apr
wget https://dlcdn.apache.org/apr/apr-util-1.6.3.tar.gz
tar xf apr-util-1.6.3.tar.gz
mv apr-util-1.6.3 apr-util
cd ..
sudo apt-get install libpcre3-dev
./configure --prefix=/opt/httpd-2.4.59 --enable-deflate --enable-expires --enable-mpms-shared=all --with-mpm=event --enable-rewrite --enable-so --with-included-apr --enable-ssl --with-ssl=/opt/openssl-1.1.1w --enable-modules=most --enable-mods-shared=all --enable-http2 --with-nghttp2=/opt/nghttp2-1.61.0
sudo apt-get install libexpat1-dev
make
sudo make install
cd ..
启动:sudo /opt/httpd-2.4.59/bin/apachectl start
重启:sudo /opt/httpd-2.4.59/bin/apachectl restart
停止:sudo /opt/httpd-2.4.59/bin/apachectl stop
【apache服务器启用https】
sudo vim /opt/httpd-2.4.59/conf/httpd.conf
取消注释LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
取消注释LoadModule ssl_module modules/mod_ssl.so
取消注释Include conf/extra/httpd-ssl.conf
注意一下httpd.conf里面的User和Group(apache进程使用的用户和组)是否是自己想要的。ubuntu下自带的apache的User和Group是www-data,centos下则是apache。自己源码编译安装的则是daemon。
sudo vim /opt/httpd-2.4.59/conf/extra/httpd-ssl.conf
将
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
修改为
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4
将
SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3
修改为
SSLProtocol all
SSLProxyProtocol all
(-SSLv3前面的减号表示禁止的意思,禁用了SSLv3的话IE6就打不开https网站了)
另外还要正确配置SSLCertificateFile和SSLCertificateKeyFile(https证书文件)。
如:
SSLCertificateFile /home/xxx/certificate/xxx.com.crt
SSLCertificateKeyFile /home/xxx/certificate/xxx.com.key
重启:sudo /opt/httpd-2.4.59/bin/apachectl restart
经检验,IE6、IE8、edge、firefox均能正常访问https。
【apache服务器启用http2】
取消注释LoadModule http2_module modules/mod_http2.so
在文件末尾添加:
Protocols h2 http/1.1
LogLevel http2:info
重启:sudo /opt/httpd-2.4.59/bin/apachectl restart
经检验,XP系统下的firefox52.9esr可以正常通过HTTP/2访问https,且不影响IE6-8的http/1.1访问。
【源码编译安装php-8.3.6】
wget https://www.php.net/distributions/php-8.3.6.tar.gz
tar xf php-8.3.6.tar.gz
cd php-8.3.6
sudo apt-get install libsqlite3-dev
sudo apt-get install sqlite3
sudo apt-get install libonig-dev
sudo apt-get install libbz2-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install libtidy-dev
./configure --prefix=/opt/php-8.3.6 --with-apxs2=/opt/httpd-2.4.59/bin/apxs --enable-bcmath --enable-mbstring --with-bz2 --with-curl --with-gettext --with-mysqli --with-pdo-mysql --enable-gd --with-freetype --with-jpeg --with-openssl --with-tidy --with-zlib OPENSSL_CFLAGS=-I/opt/openssl-1.1.1w/include OPENSSL_LIBS="-L/opt/openssl-1.1.1w/lib -lssl -lcrypto" ONIG_CFLAGS=-I/usr/include ONIG_LIBS=-lonig JPEG_CFLAGS=-I/usr/include JPEG_LIBS=-ljpeg
make
sudo make install
sudo vim /opt/httpd-2.4.59/conf/httpd.conf
找到DirectoryIndex index.html,加上index.php。
在文件末尾添加:
AddType application/x-httpd-php .php
sudo vim /opt/httpd-2.4.59/htdocs/info.php
内容:
<?php
phpinfo();
重启:sudo /opt/httpd-2.4.59/bin/apachectl restart
然后即可访问https://xxxxx/info.php
【复制php.ini配置文件,关闭php警告输出】
sudo cp ~/haha/php-8.3.6/php.ini-production /opt/php-8.3.6/lib/php.ini
sudo /opt/httpd-2.4.59/bin/apachectl restart
查看phpinfo里面Loaded Configuration File一栏,可以看到成功加载了/opt/php-8.3.6/lib/php.ini文件。
【开启rewrite重写模块】
sudo vim /opt/httpd-2.4.59/conf/httpd.conf
取消注释LoadModule rewrite_module modules/mod_rewrite.so
Options Indexes FollowSymLinks改成Options FollowSymLinks
AllowOverride None改成AllowOverride All
重启:sudo /opt/httpd-2.4.59/bin/apachectl restart
【配置event MPM的线程数量,减少apache内存占用】
sudo vim /opt/httpd-2.4.59/conf/extra/httpd-mpm.conf
<IfModule mpm_event_module>
# StartServers 3
# MinSpareThreads 75
# MaxSpareThreads 250
# ThreadsPerChild 25
# MaxRequestWorkers 400
# MaxConnectionsPerChild 0
StartServers 3
MinSpareThreads 2
MaxSpareThreads 25
ServerLimit 256
ThreadsPerChild 25
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
重启:sudo /opt/httpd-2.4.59/bin/apachectl restart
用free -h命令可查看剩余内存。建议开启swap交换分区。
【禁止ubuntu系统自带的apache2开机自启动】
参考资料:https://www.cnblogs.com/tfanalysis/p/4107389.html
sudo update-rc.d -f apache2 remove
(如果是恢复开机自启动就应该是sudo update-rc.d apache2 defaults)
【允许自编译的opt_httpd开机自启动】
cd /opt
sudo ln -s httpd-2.4.59 httpd
sudo vim /etc/init.d/opt_httpd
内容为
#!/bin/sh
/opt/httpd/bin/apachectl start
然后给这个脚本加执行权限:sudo chmod +x /etc/init.d/opt_httpd
设置开机自启动:sudo update-rc.d opt_httpd defaults
【XP系统下载安装支持TLS1.3的Mypal68.14.1b浏览器】
Mypal浏览器下载地址:https://www.mypal-browser.org/release/mypal-68.14.1.en-US.win32.zip
简体中文语言包下载地址:https://github.com/shawnpxtl/Mypal68-chinese-xpi/releases/download/68.13.2b-fix1/zh-CN.xpi
下载后先在浏览器的附加组件里面安装xpi文件,再在设置里面选择中文语言。
FlagFox国旗插件下载地址:Flagfox – 下载 🦊 Firefox 扩展(zh-CN)
FlagFox国旗插件可正常显示HSTS标志和HTTP/2闪电标志。
另外,Mypal68.14.1b浏览器可像Firefox52.9ESR浏览器那样正常使用Flash插件。
现在XP系统可以用IE6正常访问https了,网页做出来兼容IE6后,除了XP系统的IE6,Win2000系统的IE6能不能正常访问https呢?
Windows 2000系统本身自带的是IE5,最高可以装IE6。不过Windows 2000里面的IE5和IE6只支持sha1RSA签名算法的证书。笔者花钱在Sectigo上买的证书用的签名算法是sha256RSA。买的证书装到apache上面,xp的ie6可以识别,但win2000的ie5和ie6都识别不了,直接提示无法显示网页。
我们可以用刚才编译好的openssl1.1.1w制作一份sha1RSA签名算法的自签名证书:
/opt/openssl-1.1.1w/bin/openssl req -x509 -nodes -days 365 -newkey rsa:2048 -sha1 -keyout example_sha1.key -out example_sha1.crt
再制作一份sha256RSA签名算法的自签名证书:
/opt/openssl-1.1.1w/bin/openssl req -x509 -nodes -days 365 -newkey rsa:2048 -sha256 -keyout example_sha256.key -out example_sha256.crt
其中,-nodes表示不加密生成的密钥,-newkey rsa:2048指定密钥的格式和长度。
在Windows下双击生成的crt证书文件,就可以看到证书用的是什么签名算法。两本自签名证书的crt文件大小都是1245字节,key文件的大小都是1704字节。
修改/opt/httpd-2.4.59/conf/extra/httpd-ssl.conf文件,将里面的SSLCertificateFile改成/home/xxxx/certificate/example_sha1.crt,SSLCertificateKeyFile改成/home/xxxx/certificate/example_sha1.key,其他内容都不用动。重启apache服务器后,win2000的ie5和ie6就能访问https了。如果改成example_sha256.crt和example_sha256.key,重启apache后就又不能访问了。
这证明,2024年最新版的apache-2.4.59和openssl-1.1.1w的https也是支持win2000的ie5和ie6的,但只能使用sha1RSA签名算法的证书。
如下图所示,win2000的ie5和ie6都支持SSL3.0协议和3DES算法。
Windows 2000的IE5通过https访问php8.3.6的phpinfo()页面:
请注意,win2000的IE5-6和XP的IE6-8都只能识别apache里面配置的第一本证书,通常为/opt/httpd-2.4.59/conf/extra/httpd-ssl.conf里面配置的证书文件,无法识别写到第一本证书后面的其他证书文件(比如其他VirtualHost虚拟主机里面单独配置的证书文件),也就是说同一个IP地址只能用一本证书。
Vista的IE7~IE9以及现代的浏览器都能识别VirtualHost虚拟主机为每个域名单独配置的证书文件,同一个IP地址不同域名可以用不同的证书文件。
利用这个bug,我们只要在/opt/httpd-2.4.59/conf/extra/httpd-ssl.conf里面配置自签名证书,在VirtualHost虚拟主机里面绑定好域名并配置我们花钱购买的sha256RSA格式的证书,这样的话,我们就能用win2000的IE5和IE6访问我们的https网站了,XP的IE6也能访问,XP的IE7和IE8能访问网站但会提示证书错误(因为用了httpd-ssl.conf里面的自签名证书),Vista的IE7-IE9和所有现代的浏览器都能正常访问并且不会提示证书错误(因为识别到了VirtualHost虚拟主机里面配置的花钱买的证书)。
jquery前端库不支持win2000的IE5,网站如果想要兼容IE5浏览器的话,那就只能写原生js代码了,连jquery库都用不了了。
win95最高只能安装IE5.5,win98到win2000最高都能装到IE6,页面兼容到IE6其实已经够用了。
不幸的是,现在的证书签发机构都不再签发sha1RSA算法的证书了。从2017年起,市场上就再也买不到正规的sha1RSA证书了。我们如果想要支持XP SP2、SP1和win2000 SP4的IE6,只能用自签名证书。
或者自己当证书签发机构,用openssl先自签名一个CA根证书,再用这个根证书签发一个sha1RSA算法的子证书,把这个子证书安装到apache服务器上使用。在用户的电脑上只需把CA根证书导入信任列表,就不会提示证书错误了。
支持sha2RSA算法的证书的最低浏览器:
Internet Explorer 7+ under Vista
Internet Explorer 6+ under Windows XP SP3 (patched)