I’m using the faye-websocket gem in Ruby to try to connect to the paper environment. Here’s the code:
EM.run {
ws = Faye::WebSocket::Client.new('wss://paper-api.alpaca.markets/stream')
ws.on :open do |event|
p [:open]
end
ws.on :message do |event|
p [:message, event.data]
end
ws.on :close do |event|
p [:close, event.code, event.reason]
ws = nil
end
ws.on :error do |event|
p [:error, event]
end
}
First, an error is returned with a message that says: Network error: wss://paper-api.alpaca.markets/stream: Unable to verify the server certificate for ‘paper-api.alpaca.markets’.
Then a close event with status 1006 and an empty reason string is received.
I’m a newbie to integrating with Alpaca. What am I missing here? I’m on Mac OS X.
I found on Google a way to view the certificate. From the command line:
echo | openssl s_client -servername alpaca.markets -connect alpaca.markets:443 2>/dev/null | openssl x509 -text
The first part of the output shows that the certificate should be valid until April 1st:
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=Let's Encrypt, CN=R3
Validity
Not Before: Jan 1 04:56:05 2022 GMT
Not After : Apr 1 04:56:04 2022 GMT
Subject: CN=alpaca.markets
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
…
Is there something I need to do on my machine relating to the certificate? I could really use a hand here.
Update: I found an article about certificate validation by the faye-websocket gem. I have circumvented the problem for now by disabling certificate verification by doing this:
ws = Faye::WebSocket::Client.new(‘wss://paper-api.alpaca.markets/stream’, [], tls: { verify_peer:false })
I get an :open message now.