mirror of
				https://github.com/taigrr/nats.docs
				synced 2025-01-18 04:03:23 -08:00 
			
		
		
		
	
		
			
				
	
	
		
			214 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
 | 
						|
<div class="tab-wrap">
 | 
						|
  	
 | 
						|
	
 | 
						|
	<input type="radio" id="connect_tls_go" name="connect_tls" class="tab" checked>
 | 
						|
	
 | 
						|
	<label for="connect_tls_go" class="api-lang" data-language="go">Go</label>
 | 
						|
	
 | 
						|
	
 | 
						|
	<input type="radio" id="connect_tls_java" name="connect_tls" class="tab">
 | 
						|
	
 | 
						|
	<label for="connect_tls_java" class="api-lang" data-language="java">Java</label>
 | 
						|
	
 | 
						|
	
 | 
						|
	<input type="radio" id="connect_tls_js" name="connect_tls" class="tab">
 | 
						|
	
 | 
						|
	<label for="connect_tls_js" class="api-lang" data-language="js">JavaScript</label>
 | 
						|
	
 | 
						|
	
 | 
						|
	<input type="radio" id="connect_tls_py" name="connect_tls" class="tab">
 | 
						|
	
 | 
						|
	<label for="connect_tls_py" class="api-lang" data-language="py">Python</label>
 | 
						|
	
 | 
						|
	
 | 
						|
	<input type="radio" id="connect_tls_ruby" name="connect_tls" class="tab">
 | 
						|
	
 | 
						|
	<label for="connect_tls_ruby" class="api-lang" data-language="ruby">Ruby</label>
 | 
						|
	
 | 
						|
	
 | 
						|
	<input type="radio" id="connect_tls_ts" name="connect_tls" class="tab">
 | 
						|
	
 | 
						|
	<label for="connect_tls_ts" class="api-lang" data-language="ts">TypeScript</label>
 | 
						|
	
 | 
						|
 | 
						|
  	
 | 
						|
	<div class="tab__content">
 | 
						|
	<pre id="connect_tls_go_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/go-nats-examples/blob/master/api-examples/connect_tls/main.go#L10-21"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-go">nc, err := nats.Connect("localhost",
 | 
						|
	nats.ClientCert("resources/certs/cert.pem", "resources/certs/key.pem"),
 | 
						|
	nats.RootCAs("resources/certs/ca.pem"))
 | 
						|
if err != nil {
 | 
						|
	log.Fatal(err)
 | 
						|
}
 | 
						|
defer nc.Close()
 | 
						|
 | 
						|
// Do something with the connection
 | 
						|
 | 
						|
</code></pre>
 | 
						|
	</div>
 | 
						|
	
 | 
						|
	<div class="tab__content">
 | 
						|
	<pre id="connect_tls_java_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/java-nats-examples/blob/master/src/main/java/io/nats/examples/ConnectTLS.java#L18-81"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-java">class SSLUtils {
 | 
						|
    public static String KEYSTORE_PATH = "src/main/resources/keystore.jks";
 | 
						|
    public static String TRUSTSTORE_PATH = "src/main/resources/cacerts";
 | 
						|
    public static String STORE_PASSWORD = "password";
 | 
						|
    public static String KEY_PASSWORD = "password";
 | 
						|
    public static String ALGORITHM = "SunX509";
 | 
						|
 | 
						|
    public static KeyStore loadKeystore(String path) throws Exception {
 | 
						|
        KeyStore store = KeyStore.getInstance("JKS");
 | 
						|
        BufferedInputStream in = new BufferedInputStream(new FileInputStream(path));
 | 
						|
 | 
						|
        try {
 | 
						|
            store.load(in, STORE_PASSWORD.toCharArray());
 | 
						|
        } finally {
 | 
						|
            if (in != null) {
 | 
						|
                in.close();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return store;
 | 
						|
    }
 | 
						|
 | 
						|
    public static KeyManager[] createTestKeyManagers() throws Exception {
 | 
						|
        KeyStore store = loadKeystore(KEYSTORE_PATH);
 | 
						|
        KeyManagerFactory factory = KeyManagerFactory.getInstance(ALGORITHM);
 | 
						|
        factory.init(store, KEY_PASSWORD.toCharArray());
 | 
						|
        return factory.getKeyManagers();
 | 
						|
    }
 | 
						|
 | 
						|
    public static TrustManager[] createTestTrustManagers() throws Exception {
 | 
						|
        KeyStore store = loadKeystore(TRUSTSTORE_PATH);
 | 
						|
        TrustManagerFactory factory = TrustManagerFactory.getInstance(ALGORITHM);
 | 
						|
        factory.init(store);
 | 
						|
        return factory.getTrustManagers();
 | 
						|
    }
 | 
						|
 | 
						|
    public static SSLContext createSSLContext() throws Exception {
 | 
						|
        SSLContext ctx = SSLContext.getInstance(Options.DEFAULT_SSL_PROTOCOL);
 | 
						|
        ctx.init(createTestKeyManagers(), createTestTrustManagers(), new SecureRandom());
 | 
						|
        return ctx;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
public class ConnectTLS {
 | 
						|
    public static void main(String[] args) {
 | 
						|
 | 
						|
        try {
 | 
						|
            SSLContext ctx = SSLUtils.createSSLContext();
 | 
						|
            Options options = new Options.Builder().
 | 
						|
                                server("nats://localhost:4222").
 | 
						|
                                sslContext(ctx). // Set the SSL context
 | 
						|
                                build();
 | 
						|
            Connection nc = Nats.connect(options);
 | 
						|
            
 | 
						|
            // Do something with the connection
 | 
						|
 | 
						|
            nc.close();
 | 
						|
        } catch (Exception e) {
 | 
						|
            e.printStackTrace();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
</code></pre>
 | 
						|
	</div>
 | 
						|
	
 | 
						|
	<div class="tab__content">
 | 
						|
	<pre id="connect_tls_js_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/node-nats-examples/blob/master/src/tls_samples.js#L44-56"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-javascript">let caCert = fs.readFileSync(caCertPath);
 | 
						|
let clientCert = fs.readFileSync(clientCertPath);
 | 
						|
let clientKey = fs.readFileSync(clientKeyPath);
 | 
						|
let nc = NATS.connect({
 | 
						|
    url: url,
 | 
						|
    tls: {
 | 
						|
        ca: [caCert],
 | 
						|
        key: [clientKey],
 | 
						|
        cert: [clientCert]
 | 
						|
    }
 | 
						|
});
 | 
						|
</code></pre>
 | 
						|
	</div>
 | 
						|
	
 | 
						|
	<div class="tab__content">
 | 
						|
	<pre id="connect_tls_py_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/asyncio-nats-examples/blob/master/connect_tls.py#L7-20"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-python">nc = NATS()
 | 
						|
 | 
						|
ssl_ctx = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH)
 | 
						|
ssl_ctx.load_verify_locations('ca.pem')
 | 
						|
ssl_ctx.load_cert_chain(certfile='client-cert.pem',
 | 
						|
                        keyfile='client-key.pem')
 | 
						|
await nc.connect(io_loop=loop, tls=ssl_ctx)
 | 
						|
 | 
						|
await nc.connect(servers=["nats://demo.nats.io:4222"], tls=ssl_ctx)
 | 
						|
 | 
						|
# Do something with the connection.
 | 
						|
 | 
						|
</code></pre>
 | 
						|
	</div>
 | 
						|
	
 | 
						|
	<div class="tab__content">
 | 
						|
	<pre id="connect_tls_ruby_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/ruby-nats-examples/blob/master/connect_tls.rb#L3-51"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-ruby">EM.run do
 | 
						|
 | 
						|
  options = {
 | 
						|
    :servers => [
 | 
						|
      'nats://localhost:4222',
 | 
						|
    ],
 | 
						|
    :tls => {
 | 
						|
      :private_key_file => './spec/configs/certs/key.pem',
 | 
						|
      :cert_chain_file  => './spec/configs/certs/server.pem'
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  NATS.connect(options) do |nc|
 | 
						|
    puts "#{Time.now.to_f} - Connected to NATS at #{nc.connected_server}"
 | 
						|
 | 
						|
    nc.subscribe("hello") do |msg|
 | 
						|
      puts "#{Time.now.to_f} - Received: #{msg}"
 | 
						|
    end
 | 
						|
 | 
						|
    nc.flush do
 | 
						|
      nc.publish("hello", "world")
 | 
						|
    end
 | 
						|
 | 
						|
    EM.add_periodic_timer(0.1) do
 | 
						|
      next unless nc.connected?
 | 
						|
      nc.publish("hello", "hello")
 | 
						|
    end
 | 
						|
 | 
						|
    # Set default callbacks
 | 
						|
    nc.on_error do |e|
 | 
						|
      puts "#{Time.now.to_f } - Error: #{e}"
 | 
						|
    end
 | 
						|
 | 
						|
    nc.on_disconnect do |reason|
 | 
						|
      puts "#{Time.now.to_f} - Disconnected: #{reason}"
 | 
						|
    end
 | 
						|
 | 
						|
    nc.on_reconnect do |nc|
 | 
						|
      puts "#{Time.now.to_f} - Reconnected to NATS server at #{nc.connected_server}"
 | 
						|
    end
 | 
						|
 | 
						|
    nc.on_close do
 | 
						|
      puts "#{Time.now.to_f} - Connection to NATS closed"
 | 
						|
      EM.stop
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 | 
						|
</code></pre>
 | 
						|
	</div>
 | 
						|
	
 | 
						|
	<div class="tab__content">
 | 
						|
	<pre id="connect_tls_ts_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/ts-nats-examples/blob/master/src/tls_samples.ts#L40-52"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-javascript">let caCert = readFileSync(caCertPath);
 | 
						|
let clientCert = readFileSync(clientCertPath);
 | 
						|
let clientKey = readFileSync(clientKeyPath);
 | 
						|
let nc = await connect({
 | 
						|
    url: url,
 | 
						|
    tls: {
 | 
						|
        ca: [caCert],
 | 
						|
        key: [clientKey],
 | 
						|
        cert: [clientCert]
 | 
						|
    }
 | 
						|
});
 | 
						|
</code></pre>
 | 
						|
	</div>
 | 
						|
	
 | 
						|
</div>
 |