2

我有一个使用 Docker 容器部署在 Bluemix 中的微服务项目。所有微服务都是用 Java 编写的,并且使用 JKS 文件进行通信。

我还使用 Express.js 在 Node.js 中开发了一个微服务。为了使用其他微服务,我使用了带有feature 和 a的 Request 模块,如下所示:option.agentOptionspfx file

var options = {
        uri: config.get("https://www.example.com/ms/service"),
        method: 'POST',
        body: data,
        json: true,
        headers: {
            'Content-Type': 'application/json; charset=UTF-8'
        },
        agentOptions: {
            pfx: fs.readFileSync(config.get("/path/to/file.pfx")),
            passphrase: config.get("passphraseText"),
            servername: config.get("serverName")
        }
    };

request(options, function (error, response, data) {
     //handing response
});

我尝试将 Solicit crate与HTTPS 的默认示例一起使用,但它失败了:

4 | use solicit::http::client::tls::TlsConnector;
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Could not find `tls` in `client`

我找不到另一个 crate、库或框架来制作它,我该如何提出这个请求?


编辑

显然,由于缺乏维护,Solicit 不能替代它,因此它不再是该问题的替代解决方案,这就是原因

4

1 回答 1

5

目前,您应该更喜欢hyper客户端而不是solicit. 后者自 2015 年以来没有更新,并且hyper正在得到更好的维护。将hyper = "0.10.10", 和添加hyper-native-tls = "0.2.2"到您的依赖项中。为了指定要使用的客户端证书,我们可以利用native_tls. 特别是,TlsConnectorBuilder并且Pkcs12是您正在寻找的东西。

use std::fs::File;
use std::io::Read;
use hyper::client::Client;
use hyper::net::HttpsConnector;
use hyper_native_tls::NativeTlsClient;
use hyper_native_tls::native_tls::{TlsConnector, Pkcs12};

// fetch the PKCS12 client certificate
let cert = {
    let cert_file = File::open("/path/to/cert.pfx")?;
    let mut cert_raw = Vec::new();
    cert_file.read_to_end(&mut cert_raw)?;
    Pkcs12::from_der(&cert_raw, "mypassword")?
};

// specify the TLS connection with the builder pattern 
let tls_conn = TlsConnector::builder()
    .identity(cert)?
    .build()?;
let ssl = NativeTlsClient::from(tls_conn)?;
let https_conn = HttpsConnector::new(ssl);

// proceed as usual
let client = Client::with_connector(https_conn);
let endpoint = "https://www.example.com/ms/service");
let resp = client.get(endpoint).send()?;

solicit中,文档声明tls子模块仅在为此依赖项启用“tls”功能时才可用。然而,这会导致进一步的依赖冲突(请参阅为什么即使我的 Cargo.toml 中有 openssl 0.7.14,solicit 0.4.4 仍会尝试使用 openssl 0.9.12?)。坚持hyper而不是solicit是一个更安全的选择。

于 2017-05-18T23:49:58.570 回答