📄 msecurityutil.java
字号:
package net.jumperz.security;
import java.io.*;
import java.security.*;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.spec.*;
import java.util.Collection;
import java.util.Iterator;
import javax.net.*;
import javax.net.ssl.*;
import java.net.*;
import net.jumperz.util.MStreamUtil;
public class MSecurityUtil
implements MCryptInfo
{
private static final String SSL_ALGORITHM = "TLS";
public static final String KEYSTORE_TYPE = "JKS";
public static final String KEYSTORE_ALIAS = "alias";
public static final String KEY_PASS = "keyPass";
//---------------------------------------------------------------------------------------
public static Certificate[] loadCertificatesFromFile( String fileName )
throws IOException, CertificateException
{
FileInputStream fis = new FileInputStream( fileName );
return loadCertificatesFromStream( fis );
}
// --------------------------------------------------------------------------------
public static Certificate[] loadCertificatesFromStream( InputStream fis )
throws IOException, CertificateException
{
CertificateFactory cf = CertificateFactory.getInstance( "X.509" );
Collection c = cf.generateCertificates( fis );
int count = c.size();
Certificate[] certArray = new Certificate[ count ];
Iterator p = c.iterator();
int i = 0;
while( p.hasNext() )
{
certArray[ i ] = ( Certificate )p.next();
++i;
}
return certArray;
}
//---------------------------------------------------------------------------------------
public static Certificate loadCertificateFromFile( String fileName )
throws IOException, CertificateException
{
FileInputStream fis = new FileInputStream( fileName );
BufferedInputStream bis = new BufferedInputStream( fis );
CertificateFactory cf = CertificateFactory.getInstance( "X.509" );
Certificate cert = cf.generateCertificate( bis );
return cert;
}
//---------------------------------------------------------------------------------------
public static PrivateKey loadPrivateKeyFromFile( String fileName, String algorithm )
throws IOException, NoSuchAlgorithmException, InvalidKeySpecException
{
FileInputStream fs = new FileInputStream( fileName );
return loadPrivateKeyFromStream( fs, algorithm );
}
//---------------------------------------------------------------------------------------
public static PrivateKey loadPrivateKeyFromStream( InputStream in, String algorithm )
throws IOException, NoSuchAlgorithmException, InvalidKeySpecException
{
ByteArrayOutputStream bufStream = new ByteArrayOutputStream();
MStreamUtil.connectStream( in, bufStream );
byte[] keyBuffer = bufStream.toByteArray();
KeyFactory keyFactory = KeyFactory.getInstance( algorithm );
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec( keyBuffer );
PrivateKey privateKey = keyFactory.generatePrivate( keySpec );
return privateKey;
}
//--------------------------------------------------------------------------------
public static PublicKey loadPublicKeyFromFile( String fileName, String algorithm )
throws IOException, NoSuchAlgorithmException, InvalidKeySpecException
{
ByteArrayOutputStream bufStream = new ByteArrayOutputStream();
FileInputStream fs = new FileInputStream( fileName );
MStreamUtil.connectStream( fs, bufStream );
byte[] keyBuffer = bufStream.toByteArray();
KeyFactory keyFactory = KeyFactory.getInstance( algorithm );
KeySpec keySpec = new X509EncodedKeySpec( keyBuffer );
PublicKey publicKey = keyFactory.generatePublic( keySpec );
return publicKey;
}
//---------------------------------------------------------------------------------------
public static ServerSocketFactory getServerSocketFactory( String certificateFileName, String privateKeyFileName, String algorithm )
throws KeyManagementException, KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException, InvalidKeySpecException, CertificateException, IOException
{
return MSecurityUtil.getServerSocketFactory( MSecurityUtil.generateKeyStore( certificateFileName, privateKeyFileName, algorithm ) );
}
//---------------------------------------------------------------------------------------
public static ServerSocketFactory getServerSocketFactory( InputStream certificateIn, InputStream privateKeyIn, String algorithm )
throws KeyManagementException, KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException, InvalidKeySpecException, CertificateException, IOException
{
return MSecurityUtil.getServerSocketFactory( MSecurityUtil.generateKeyStore( certificateIn, privateKeyIn, algorithm ) );
}
//---------------------------------------------------------------------------------------
public static KeyStore generateKeyStore( String certificateFileName, String privateKeyFileName, String algorithm )
throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, CertificateException, KeyStoreException
{
Certificate[] certList = MSecurityUtil.loadCertificatesFromFile( certificateFileName );
PrivateKey privateKey = MSecurityUtil.loadPrivateKeyFromFile( privateKeyFileName, algorithm );
KeyStore keyStore = KeyStore.getInstance( KEYSTORE_TYPE );
keyStore.load( null, null );
keyStore.setKeyEntry( KEYSTORE_ALIAS, privateKey, KEY_PASS.toCharArray(), certList );
return keyStore;
}
//---------------------------------------------------------------------------------------
public static KeyStore generateKeyStore( InputStream certificateIn, InputStream privateKeyIn, String algorithm )
throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, CertificateException, KeyStoreException
{
Certificate[] certList = MSecurityUtil.loadCertificatesFromStream( certificateIn );
PrivateKey privateKey = MSecurityUtil.loadPrivateKeyFromStream( privateKeyIn, algorithm );
KeyStore keyStore = KeyStore.getInstance( KEYSTORE_TYPE );
keyStore.load( null, null );
keyStore.setKeyEntry( KEYSTORE_ALIAS, privateKey, KEY_PASS.toCharArray(), certList );
return keyStore;
}
//---------------------------------------------------------------------------------------
public static ServerSocketFactory getServerSocketFactory( KeyStore keyStore )
throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException, KeyManagementException
{
SSLContext sslContext = SSLContext.getInstance( SSL_ALGORITHM );
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance( "SunX509" );
keyManagerFactory.init( keyStore, MSecurityUtil.KEY_PASS.toCharArray() );
sslContext.init( keyManagerFactory.getKeyManagers(), null, null );
return sslContext.getServerSocketFactory();
}
//--------------------------------------------------------------------------------
public static SocketFactory getBogusSslSocketFactory()
{
SSLContext ctx = null;
try
{
ctx = SSLContext.getInstance( "TLS" );
TrustManager[] tmArray = new TrustManager[ 1 ];
tmArray[ 0 ] = new MBogusX509TrustManager();
ctx.init( null, tmArray, null );
}
catch( Exception ignored )
{
}
return ctx.getSocketFactory();
}
//--------------------------------------------------------------------------------
public static Socket getBogusSslSocket( String host, int port )
throws IOException
{
return MSecurityUtil.getBogusSslSocketFactory().createSocket( host, port );
}
//---------------------------------------------------------------------------------------
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -