寻找一个Linux侦听应用程序,它将传入的请求按原样转发到远程HTTPS服务器,并将(decrypred)响应中继回来。
基本上,我们有一个黑盒https VM,它的访问丢失了,它的证书已经过期了。虽然devs正在努力实现一个替代(年底),我们需要我们的许多其他应用程序继续与它交谈。重新编码这些应用程序需要花费大量时间,以允许忽略过期的证书,但重新配置这些应用程序以与另一个(HTTP) url对话是很容易的,后者将在幕后完成通话到过期的HTTPS。
示例:
证书过期
$ curl https://blackbox:3333/v1/configserver/6c15dd4a -H 'X-Vault-Token: ****'
curl: (60) Peer's Certificate has expired.
...忽略证书适用于卷发
$ curl -k https://blackbox:3333/v1/configserver/6c15dd4a -H 'X-Vault-Token: ****'
{"request_id":"b6e832", "backdoor.token.encryption.password":"****", "oauth.keys":"****|****",
...需要HTTP-监听本地主机:80并在幕后与HTTPS://blackbox:3333交谈
$ curl http://localhost:80/v1/configserver/6c15dd4a -H 'X-Vault-Token: ****'
{"request_id":"b6e832", "backdoor.token.encryption.password":"****", "oauth.keys":"****|****",
...有人告诉我,nginx应该能够做到这一点,但我没有找到任何例子来轻松地设置它,同时忽略过期的证书(而且觉得nginx在配置它之前需要大量的背景知识,甚至是开始之前)。
更新:
我的问题是HTTP ->过期-证书-HTTPS继电器
@GeraldSchneider,
https://stackoverflow.com/questions/8017508/solutions-to-convert-http-traffic-to-https-proxy-relay
如果其中任何一个提到如何将apacheHttpd/nginx/etc配置为忽略过期/无效/自签名的证书--这将是我正在寻找的答案。
发布于 2023-02-01 09:09:18
同时,我使用java spring-启动编写了一个示例HTTP->HTTPS中继,但它缺乏完整性(没有处理“循环”重定向,只使用GET方法,大量手工操作headers/retCodes/queryStrings/closables/streams/buffers,,可能在代码中有一些错误,等等)。它可能适合我们的短期需求,但我更喜欢一个标准/健壮/更简单的HTTP->HTTPS中继工具(如果有的话)。
@RestController
class Controller {
@GetMapping("/**")
void relay(HttpServletRequest servletReq, HttpServletResponse servletResp) {
HttpClient httpClient = null;
HttpResponse httpResp = null;
try {
httpClient = HttpClients.custom()
.setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, TrustAllStrategy.INSTANCE).build())
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build();
String host = "blackbox:3333";
HttpUriRequest httpReq = new HttpGet("https://" + host + servletReq.getRequestURI() + "?" + servletReq.getQueryString());
Enumeration he = servletReq.getHeaderNames();
if (null != he)
while (he.hasMoreElements()) {
String n = he.nextElement(), v = ("host".equals(n)) ? host : servletReq.getHeader(n);
httpReq.setHeader(new BasicHeader(n, v));
}
httpResp = httpClient.execute(httpReq);
for (Header h : httpResp.getAllHeaders()) {
servletResp.addHeader(h.getName(), h.getValue());
}
servletResp.setStatus(httpResp.getStatusLine().getStatusCode());
IOUtils.copy(httpResp.getEntity().getContent(), servletResp.getOutputStream());
servletResp.flushBuffer();
servletResp.getOutputStream().close();
} catch (Throwable t) {
t.printStackTrace();
} finally {
if (null != httpResp && httpResp instanceof CloseableHttpResponse) {
try {
((CloseableHttpResponse) httpResp).close();
} catch (Throwable t) {
t.printStackTrace();
}
}
if (null != httpClient && httpClient instanceof CloseableHttpClient) {
try {
((CloseableHttpClient) httpClient).close();
} catch (Throwable t) {
t.printStackTrace();
}
}
}
}https://serverfault.com/questions/1121663
复制相似问题