使用Scala Dispatch发送证书文件

use*_*739 5 scala scala-dispatch

我需要能够发送证书文件(.pem,我认为),使用scala和dispatch发送get请求.

你是怎样做的?

sbr*_*ges 0

我假设您想使用客户端证书进行 https 操作。我认为这需要在 jvm 级别进行设置,这里有一个很好的解释如何做到这一点。

似乎有一种方法可以直接使用 ning 来执行此操作,如此处所述代码复制如下,

// read in PEM file and parse with commons-ssl PKCS8Key
// (ca.juliusdavies:not-yet-commons-ssl:0.3.11)
RandomAccessFile in = null;
byte[] b = new byte[(int) certFile.length()];
in = new RandomAccessFile( certFile, "r" );
in.readFully( b );
char[] password = hints.get( "password" ).toString().toCharArray();
PKCS8Key key = new PKCS8Key( b, password );

// create empty key store
store = KeyStore.getInstance( KeyStore.getDefaultType() );
store.load( null, password );

// cert chain is not important if you override the default KeyManager and/or
// TrustManager implementation, IIRC
store.setKeyEntry( alias, key.getPrivateKey(), password, new DefaultCertificate[0] );

// initialize key and trust managers -> default behavior
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance( "SunX509" );

// password for key and store have to be the same IIRC
keyManagerFactory.init( store, password );
KeyManager[] keyManagers = keyManagerFactory.getKeyManagers();

TrustManagerFactory tmf = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm() );
tmf.init( store );
TrustManager[] trustManagers = tmf.getTrustManagers();

// override key and trust managers with desired behavior - for example
// * 'trust everything the server gives us' -> TrustManager#checkServerTrusted
// * 'always return a preset alias to use for auth' -> X509ExtendedKeyManager#chooseClientAlias, X509ExtendedKeyManager#chooseEngineClientAlias
for ( int i = 0; i < keyManagers.length; i++ )
{
    if ( keyManagers[i] instanceof X509ExtendedKeyManager )
    {
    AHCKeyManager ahcKeyManager = new AHCKeyManager( (X509ExtendedKeyManager) keyManagers[i] );
    keyManagers[i] = ahcKeyManager;
    }
}

for ( int i = 0; i < trustManagers.length; i++ )
{
    if ( tm instanceof X509TrustManager )
    {
    AHCTrustManager ahcTrustManager = new AHCTrustManager( manager, (X509TrustManager) trustManagers[i] );
    trustManagers[i] = ahcTrustManager;
    }
}

// construct SSLContext and feed to AHC config
SSLContext context = SSLContext.getInstance( "TLS" );
context.init( keyManagers, trustManagers, null );

ahcCfgBuilder.setSSLContext(context);
Run Code Online (Sandbox Code Playgroud)