The curve modifier distorts the objects, that is the intended behavior. If you want an undeformed array use either Duplifaces or a particle system instead.
Add your Array+Curve modifier stack to a simple plane mesh instead.
Create a new plane mesh, parent one single chain link to it and activate Duplifaces on the plane's object properties.
Then add the array modifier, use an empty object rotated $90º$ to introduce rotation to each link. Activate the Object Offset option and pick the empty.
Adjust spacing and settings as desired, and then add the curve modifier exclusively to the plane object alone.
Alternatively use a particle system instead of Dupligroups feature with one particle per face if you wish to hide the original link independently. Manually adjust particle count to match the number of arrayed links.