java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar
⇔
StreamRelay.bat
TCPサーバとして待機しつつ、SSLクライアントとしてSSLサーバへ転送する場合
stone/stunnel の代替としての StreamRelay.jar
「local」側が tcp/90 で待機して、「remote」側の192.0.2.1:443 へSSLクライアントとして転送
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRealy.jar -LocalPort 90 -RemoteHost 192.0.2.1 -RemotePort 443 -RemoteSSL
RemoteSSLオプションとRemoteSSLAfterProxyConnectionオプション
つまりProxyオプションを先に実施するのか、SSLにしてから実施するのかの違い
Java は Socketを継承した SSLSocketなので、このようにした。
(.NET Framework はStreamを継承したSSLStreamなので、より自由に組み合わせられる)
オプション
- RemoteSSLMode [SSL|TLS]
- RemoteSSLName サーバ側の証明書をチェックする場合、コモン名を指定する
- DisableSNI Java7から既定で有効のTLS SNIを無効にする
- UseWeakAlgorithm Java7から既定で弱い暗号や証明書が無効になったものを有効化する
- UseAllSSLProtocols SSLプロトコルは任意
- UseSSLProtocol SSLプロトコルを明示する
- RistrictSSLProtocol 明示したプロトコルだけ拒否する
- UseAllSSLCipherSuites 暗号スイートは任意
- UseSSLCipherSuites 暗号スイートを明示する
- RistrictSSLCipherSuite 明示した暗号スイートだけ拒否する
いろいろ細かくオプションが指定できるJavaのSSLCocketクラスだけど、あまり使わないと思う
暗号スイートの一覧
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -ListSSLCipherSuite
暗号プロトコルの一覧
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -ListSSLProtocol