- 功勋
- 689 点
- 积分
- 5865
- 阅读权限
- 200
- 精华
- 13
- UID
- 5
- 帖子
- 6562
- 威望
- 4312 点
- 黄金
- 10544 金币
- 在线时间
- 4573 小时
- 注册时间
- 2005-5-13
- 最后登录
- 2025-12-15
   
- UID
- 5
- 帖子
- 6562
- 威望
- 4312 点
- 黄金
- 10544 金币
- 在线时间
- 4573 小时
- 注册时间
- 2005-5-13
- 最后登录
- 2025-12-15
|
CentOS容易的多,一句yum install mod_ssl,该有的就都有了,但ubuntu却会有些坑。
本贴介绍了ubuntu+apache的组合下开启ws和tls以及实现proxy_pass。
首先:一条命令利用OpenSSL即可创建一条自签名密钥与证书:- sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/selfsigned.key -out /etc/ssl/selfsigned.crt
复制代码 注1:
req和-x509: 自签名证书,而非生成普通的证书签名请求。
-nodes: 跳过密码保护证书
-days 3650: 此选项选定证书的有效时限。我们将其设定为10年。
-newkey rsa:2048: 生成一份新证书与新密钥,其中rsa:2048部分指定生成RSA密钥,长度为2048位。
-keyout: 生成的密钥文件保存位置。
-out: 创建的证书保存位置。
注2:
Organization Name是使用人
Organizational Unit Name是使用部门
Common Name是颁发者
配置文件样例:- <VirtualHost *:443>
- ServerName domain.mine
- SSLCertificateFile /etc/ssl/selfsigned.crt
- SSLCertificateKeyFile /etc/ssl/selfsigned.key
- ...
- </VirtualHost>
复制代码 报错:Invalid command 'SSLCertificateFile'报错:Invalid command 'ProxyPass'
从mods-available复制 proxy* ../mods-enabled
从mods-available复制 xml* ../mods-enabled
报错:Invalid command "Header"报错:no RSA or DSA server certificate found
apache配置文件中缺少"SSLEngine on"
service apache2 restart卡住,日志报错:
Failed to lookup provider 'shm' for 'slotmem'
从mods-available复制 slot* ../mods-enabled
tls实现了加密,因为ws数据可以被apache2转发,所以有这么个组合。
这个组合使得在不影响网站使用的同时顺手把其它应用的ws数据转发进来。
最后一个大坑在这:怎么让apache把数据转交给本机的其它ws应用。正确的配置其实应该是酱婶的:
首先开启rewrite,记得apache2.conf中AllowOverride None改成All然后在apache的443部分配置文件中- RewriteEngine On
- RewriteCond %{HTTP:Upgrade} =websocket [NC]
- RewriteRule /(.*) ws://127.0.0.1:10000/$1 [P,L]
复制代码 第二种套路是反代:- SSLProxyEngine On
- Proxypass /目录路径 http://127.0.0.1:10000
- ProxyPassReverse /目录路径 http://127.0.0.1:10000
复制代码 注于2019年11月20日:发现如果Apache版本低于2.4,可能无法rewrite强转ws。
|
|